Better module roster on contents indexes

This commit is contained in:
Graham Nelson 2020-05-03 17:12:45 +01:00
parent ad6b3d411d
commit 3183528e25
13 changed files with 1087 additions and 944 deletions

View file

@ -87,27 +87,24 @@ collater_state Collater::initial_state(web *W, text_stream *range,
cls.into_file = into;
cls.modules = NEW_LINKED_LIST(module);
if (W) {
module *M;
LOOP_OVER_LINKED_LIST(M, module, W->md->as_module->dependencies) {
text_stream *owner = Collater::module_owner(M, W);
if (Str::len(owner) == 0)
ADD_TO_LINKED_LIST(M, module, cls.modules);
}
LOOP_OVER_LINKED_LIST(M, module, W->md->as_module->dependencies) {
text_stream *owner = Collater::module_owner(M, W);
if ((Str::len(owner) > 0) && (Str::ne_insensitive(owner, I"inweb")))
ADD_TO_LINKED_LIST(M, module, cls.modules);
}
LOOP_OVER_LINKED_LIST(M, module, W->md->as_module->dependencies) {
text_stream *owner = Collater::module_owner(M, W);
if ((Str::len(owner) > 0) && (Str::eq_insensitive(owner, I"inweb")))
ADD_TO_LINKED_LIST(M, module, cls.modules);
}
int c = LinkedLists::len(W->md->as_module->dependencies);
if (c > 0) @<Form the list of imported modules@>;
}
@<Read in the source file containing the contents page template@>;
return cls;
}
@<Form the list of imported modules@> =
module **module_array =
Memory::calloc(c, sizeof(module *), CLS_SORTING_MREASON);
module *M; int d=0;
LOOP_OVER_LINKED_LIST(M, module, W->md->as_module->dependencies)
module_array[d++] = M;
Collater::sort_web(W);
qsort(module_array, (size_t) c, sizeof(module *), Collater::sort_comparison);
for (int d=0; d<c; d++) ADD_TO_LINKED_LIST(module_array[d], module, cls.modules);
Memory::I7_free(module_array, CLS_SORTING_MREASON, c*((int) sizeof(module *)));
@<Read in the source file containing the contents page template@> =
TextFiles::read(template_filename, FALSE,
"can't find contents template", TRUE, Collater::temp_line, NULL, &cls);
@ -742,7 +739,7 @@ navigation purposes.
empty text) if it appears to belong to the current web |W|.
=
text_stream *Collater::module_owner(module *M, web *W) {
text_stream *Collater::module_owner(const module *M, web *W) {
text_stream *owner =
Pathnames::directory_name(Pathnames::up(M->module_location));
text_stream *me = NULL;
@ -751,3 +748,36 @@ text_stream *Collater::module_owner(module *M, web *W) {
if (Str::ne_insensitive(me, owner)) return owner;
return NULL;
}
@ This enables us to sort them. The empty owner (i.e., the current web) comes
top, then all other owners, in alphabetical order, and then last of all Inweb,
so that //foundation// will always be at the bottom.
=
web *sorting_web = NULL;
void Collater::sort_web(web *W) {
sorting_web = W;
}
int Collater::sort_comparison(const void *ent1, const void *ent2) {
const module *M1 = *((const module **) ent1);
const module *M2 = *((const module **) ent2);
text_stream *O1 = Collater::module_owner(M1, sorting_web);
text_stream *O2 = Collater::module_owner(M2, sorting_web);
int r = Collater::cmp_owners(O1, O2);
if (r != 0) return r;
return Str::cmp_insensitive(M1->module_name, M2->module_name);
}
int Collater::cmp_owners(text_stream *O1, text_stream *O2) {
if (Str::len(O1) == 0) {
if (Str::len(O2) > 0) return -1;
return 0;
}
if (Str::len(O2) == 0) return 1;
if (Str::eq_insensitive(O1, I"inweb")) {
if (Str::eq_insensitive(O2, I"inweb") == FALSE) return 1;
return 0;
}
if (Str::eq_insensitive(O2, I"inweb")) return -1;
return Str::cmp_insensitive(O1, O2);
}

View file

@ -48,11 +48,11 @@
[[End If]]
[[If Modules]]
<hr>
<p class="purpose">Importing:</p>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
[[Repeat Module]]
<li>
<p class="chapterentry">
<p class="moduleentry">
[[If Module Page]]
<a href="[[Module Page]]"><spon class="sectiontitle">[[Module Title]]</span></a>
[[Else]]

View file

@ -16,6 +16,10 @@ div.contentspage .chapterlist .sectionlist li {
div.contentspage p.chapterentry {
padding-bottom: 0px;
}
div.contentspage p.moduleentry {
padding-top: 0px;
padding-bottom: 0px;
}
div.contentspage span.chaptertitle {
font-weight: bold;
}

View file

@ -4,31 +4,63 @@
[[Plugins]]
</head>
<body class="commentary-font">
<ul class="crumbs"><li><b>[[Title]] [[Version Number]]</b></li></ul>
<p class="chapter">[[Purpose]]</font></p>
<p class="tight">[[Licence]]</font></p>
<ul class="crumbs">[[Breadcrumbs]]<li><b>[[Title]]</b></li></ul>
<p class="purpose">[[Purpose]] This is version [[Version Number]].</p>
<hr>
<div class="contentspage">
[[If Chapters]]
<ul class="chapterlist">
[[Repeat Chapter]]
<li>
<p><a name="[[Chapter Code]]"></a><spon class="chaptertitle">[[Chapter Title]]</span></p>
<p><span class="purpose">[[Chapter Purpose]]</span></p>
<p class="chapterentry"><a name="[[Chapter Code]]"></a>
<span class="chaptertitle">[[Chapter Title]]</span></p>
[[If Chapter Purpose]]
<p class="chapterpurpose">[[Chapter Purpose]]</p>
[[End If]]
<ul class="sectionlist">
[[Repeat Section]]
<li>
<p><a href="[[Section Page]]"><spon class="sectiontitle">[[Section Title]]</span></a> -
<span class="purpose">[[Section Purpose]]</span></p>
<p class="sectionentry"><a href="[[Section Page]]">
<spon class="sectiontitle">[[Section Title]]</span></a> -
<span class="sectionpurpose">[[Section Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
</li>
[[End Repeat]]
</ul>
[[Else]]
[[Repeat Chapter]]
<ul class="chapterlist">
[[Repeat Section]]
<li>
<p class="chapterentry"><a href="[[Section Page]]">
<spon class="sectiontitle">[[Section Title]]</span></a> -
<span class="sectionpurpose">[[Section Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
[[End Repeat]]
[[End If]]
[[If Modules]]
<hr>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
[[Repeat Module]]
<li>
<p class="moduleentry">
[[If Module Page]]
<a href="[[Module Page]]"><spon class="sectiontitle">[[Module Title]]</span></a>
[[Else]]
<spon class="sectiontitle">[[Module Title]]</span>
[[End If]]
- <span class="sectionpurpose">[[Module Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
[[End If]]
</div>
<hr>
<p class="tight">
Powered by <a href="https://github.com/ganelson/inweb">Inweb</a>.
</p>
<p class="purpose">Powered by <a href="https://github.com/ganelson/inweb">Inweb</a>.</p>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -16,6 +16,10 @@ div.contentspage .chapterlist .sectionlist li {
div.contentspage p.chapterentry {
padding-bottom: 0px;
}
div.contentspage p.moduleentry {
padding-top: 0px;
padding-bottom: 0px;
}
div.contentspage span.chaptertitle {
font-weight: bold;
}

View file

@ -47,12 +47,12 @@
</li>
</ul>
<hr>
<p class="purpose">Importing:</p>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
<li>
<p class="chapterentry">
<p class="moduleentry">
<a href="../foundation-module/index.html"><spon class="sectiontitle">inweb/foundation</span></a>
- <span class="sectionpurpose">A library of common code used by all of the Inform tools.</span></p>
- <span class="sectionpurpose">A library of utility functions for command-line tools.</span></p>
</li>
</ul>
</div>

View file

@ -36,7 +36,7 @@
</nav>
<main role="main">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>foundation</b></li></ul>
<p class="purpose">A library of common code used by all of the Inform tools. This is version 1.</p>
<p class="purpose">A library of utility functions for command-line tools. This is version 1.</p>
<hr>
<div class="contentspage">
<ul class="chapterlist">

View file

@ -52,12 +52,12 @@
</li>
</ul>
<hr>
<p class="purpose">Importing:</p>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
<li>
<p class="chapterentry">
<p class="moduleentry">
<a href="../foundation-module/index.html"><spon class="sectiontitle">inweb/foundation</span></a>
- <span class="sectionpurpose">A library of common code used by all of the Inform tools.</span></p>
- <span class="sectionpurpose">A library of utility functions for command-line tools.</span></p>
</li>
</ul>
</div>

Binary file not shown.

View file

@ -141,28 +141,29 @@ if so, they can always be subdivided.
<span class="plain-syntax"> </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">into_file</span><span class="plain-syntax"> = </span><span class="identifier-syntax">into</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">modules</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">module</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_module</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dependencies</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP6" class="function-link"><span class="function-syntax">Collater::module_owner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">modules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="../foundation-module/2-llas.html#SP6" class="function-link"><span class="function-syntax">LinkedLists::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_module</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dependencies</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-tc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Form the list of imported modules</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_module</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dependencies</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP6" class="function-link"><span class="function-syntax">Collater::module_owner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::ne_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inweb"</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">modules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_module</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dependencies</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP6" class="function-link"><span class="function-syntax">Collater::module_owner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inweb"</span><span class="plain-syntax">)))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">modules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tc.html#SP3_1" class="named-paragraph-link"><span class="named-paragraph">Read in the source file containing the contents page template</span><span class="named-paragraph-number">3.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-tc.html#SP3_2" class="named-paragraph-link"><span class="named-paragraph">Read in the source file containing the contents page template</span><span class="named-paragraph-number">3.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cls</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the source file containing the contents page template</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_1"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Form the list of imported modules</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> **</span><span class="identifier-syntax">module_array</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="../foundation-module/2-mmr.html#SP25" class="function-link"><span class="function-syntax">Memory::calloc</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">module</span><span class="plain-syntax"> *), </span><span class="constant-syntax">CLS_SORTING_MREASON</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax">; </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">=0;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">as_module</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dependencies</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">module_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">d</span><span class="plain-syntax">++] = </span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="3-tc.html#SP7" class="function-link"><span class="function-syntax">Collater::sort_web</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">qsort</span><span class="plain-syntax">(</span><span class="identifier-syntax">module_array</span><span class="plain-syntax">, (</span><span class="identifier-syntax">size_t</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">, </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">module</span><span class="plain-syntax"> *), </span><a href="3-tc.html#SP7" class="function-link"><span class="function-syntax">Collater::sort_comparison</span></a><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">d</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">d</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">c</span><span class="plain-syntax">; </span><span class="identifier-syntax">d</span><span class="plain-syntax">++) </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">module_array</span><span class="plain-syntax">[</span><span class="identifier-syntax">d</span><span class="plain-syntax">], </span><span class="reserved-syntax">module</span><span class="plain-syntax">, </span><span class="identifier-syntax">cls</span><span class="plain-syntax">.</span><span class="element-syntax">modules</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/2-mmr.html#SP27" class="function-link"><span class="function-syntax">Memory::I7_free</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">module_array</span><span class="plain-syntax">, </span><span class="constant-syntax">CLS_SORTING_MREASON</span><span class="plain-syntax">, </span><span class="identifier-syntax">c</span><span class="plain-syntax">*((</span><span class="reserved-syntax">int</span><span class="plain-syntax">) </span><span class="reserved-syntax">sizeof</span><span class="plain-syntax">(</span><span class="reserved-syntax">module</span><span class="plain-syntax"> *)));</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="3-tc.html#SP3">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2"></a><b>&#167;3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the source file containing the contents page template</span><span class="named-paragraph-number">3.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -178,7 +179,7 @@ if so, they can always be subdivided.
<p class="commentary firstcommentary"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Collater::temp_line</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Collater::temp_line</span></span>:<br/><a href="3-tc.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_ies</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Collater::temp_line</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Collater::temp_line</span></span>:<br/><a href="3-tc.html#SP3_2">&#167;3.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">v_ies</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">collater_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cls</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">collater_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">v_ies</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cls</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_tlines</span><span class="plain-syntax"> &lt; </span><span class="constant-syntax">MAX_TEMPLATE_LINES</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">cls</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tlines</span><span class="plain-syntax">[</span><span class="identifier-syntax">cls</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_tlines</span><span class="plain-syntax">++] = </span><a href="../foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
@ -968,7 +969,7 @@ empty text) if it appears to belong to the current web <span class="extract"><sp
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Collater::module_owner</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Collater::module_owner</span></span>:<br/><a href="3-tc.html#SP3">&#167;3</a>, <a href="3-tc.html#SP5_1_11_6_1">&#167;5.1.11.6.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">web</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">Collater::module_owner</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">Collater::module_owner</span></span>:<br/><a href="3-tc.html#SP5_1_11_6_1">&#167;5.1.11.6.1</a>, <a href="3-tc.html#SP7">&#167;7</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">web</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">owner</span><span class="plain-syntax"> =</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-pth.html#SP7" class="function-link"><span class="function-syntax">Pathnames::directory_name</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP7" class="function-link"><span class="function-syntax">Pathnames::up</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_location</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">me</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
@ -978,6 +979,40 @@ empty text) if it appears to belong to the current web <span class="extract"><sp
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7"></a><b>&#167;7. </b>This enables us to sort them. The empty owner (i.e., the current web) comes
top, then all other owners, in alphabetical order, and then last of all Inweb,
so that <a href="../foundation-module/index.html" class="internal">foundation</a> will always be at the bottom.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">web</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sorting_web</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Collater::sort_web</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Collater::sort_web</span></span>:<br/><a href="3-tc.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">web</span><span class="plain-syntax"> *</span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">sorting_web</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Collater::sort_comparison</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">Collater::sort_comparison</span></span>:<br/><a href="3-tc.html#SP3_1">&#167;3.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ent1</span><span class="plain-syntax">, </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ent2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M1</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ent1</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M2</span><span class="plain-syntax"> = *((</span><span class="reserved-syntax">const</span><span class="plain-syntax"> </span><span class="reserved-syntax">module</span><span class="plain-syntax"> **) </span><span class="identifier-syntax">ent2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">O1</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP6" class="function-link"><span class="function-syntax">Collater::module_owner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M1</span><span class="plain-syntax">, </span><span class="identifier-syntax">sorting_web</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">O2</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP6" class="function-link"><span class="function-syntax">Collater::module_owner</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M2</span><span class="plain-syntax">, </span><span class="identifier-syntax">sorting_web</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax"> = </span><a href="3-tc.html#SP7" class="function-link"><span class="function-syntax">Collater::cmp_owners</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O1</span><span class="plain-syntax">, </span><span class="identifier-syntax">O2</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">r</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP20" class="function-link"><span class="function-syntax">Str::cmp_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M1</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">M2</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Collater::cmp_owners</span><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">O1</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">O2</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O1</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O2</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O2</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O1</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inweb"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O2</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inweb"</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O2</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"inweb"</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP20" class="function-link"><span class="function-syntax">Str::cmp_insensitive</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">O1</span><span class="plain-syntax">, </span><span class="identifier-syntax">O2</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="3-ta.html">&#10094;</a></li><li class="progresschapter"><a href="M-iti.html">M</a></li><li class="progresschapter"><a href="P-htpw.html">P</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresschapter"><a href="2-tr.html">2</a></li><li class="progresscurrentchapter">3</li><li class="progresssection"><a href="3-ta.html">ta</a></li><li class="progresscurrent">tc</li><li class="progresssection"><a href="3-tw.html">tw</a></li><li class="progresssection"><a href="3-twot.html">twot</a></li><li class="progresssection"><a href="3-tt.html">tt</a></li><li class="progresschapter"><a href="4-pl.html">4</a></li><li class="progresschapter"><a href="5-wt.html">5</a></li><li class="progresschapter"><a href="6-mkf.html">6</a></li><li class="progressnext"><a href="3-tw.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -321,12 +321,12 @@
</li>
</ul>
<hr>
<p class="purpose">Importing:</p>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
<li>
<p class="chapterentry">
<p class="moduleentry">
<a href="../foundation-module/index.html"><spon class="sectiontitle">foundation</span></a>
- <span class="sectionpurpose">A library of common code used by all of the Inform tools.</span></p>
- <span class="sectionpurpose">A library of utility functions for command-line tools.</span></p>
</li>
</ul>
</div>

View file

@ -1,6 +1,6 @@
Title: foundation
Author: Graham Nelson
Purpose: A library of common code used by all of the Inform tools.
Purpose: A library of utility functions for command-line tools.
Language: InC
Licence: Artistic License 2.0