Better links, clearer single-file-web headings

This commit is contained in:
Graham Nelson 2020-04-15 00:38:51 +01:00
parent 5670710fac
commit 95dcf1afbc
19 changed files with 1214 additions and 1065 deletions

View file

@ -96,9 +96,11 @@ version 2 it's much tidier.
@<In version 2 syntax, construe the comment under the heading as the purpose@> =
if (S->md->using_syntax >= V2_SYNTAX) {
source_line *L = S->first_line;
if ((L) && (L->category == CHAPTER_HEADING_LCAT)) L = L->next_line;
S->sect_purpose = Parser::extract_purpose(I"", L?L->next_line: NULL, S, NULL);
if (Str::len(S->sect_purpose) > 0) L->next_line->category = PURPOSE_LCAT;
if ((L) && (L->category == CHAPTER_HEADING_LCAT)) L = L->next_line;
if (Str::len(S->sect_purpose) == 0) {
S->sect_purpose = Parser::extract_purpose(I"", L?L->next_line: NULL, S, NULL);
if (Str::len(S->sect_purpose) > 0) L->next_line->category = PURPOSE_LCAT;
}
}
@ A new paragraph is implied when a macro definition begins in the middle of
@ -177,7 +179,13 @@ namespace for its functions.
@<Parse the line as a probable section heading@> =
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, L->text, L"%[(%C+)%] (%C+/%C+): (%c+).")) {
if (Regexp::match(&mr, L->text, L"Implied Purpose: (%c+)")) {
S->sect_purpose = Str::duplicate(mr.exp[0]);
if (Str::len(S->sect_purpose) > 0) {
L->category = PURPOSE_LCAT;
L->is_commentary = TRUE;
}
} else if (Regexp::match(&mr, L->text, L"%[(%C+)%] (%C+/%C+): (%c+).")) {
if (S->md->using_syntax >= V2_SYNTAX)
Parser::wrong_version(S->md->using_syntax, L,
"section range in header line", V1_SYNTAX);

View file

@ -252,6 +252,14 @@ void Reader::read_file(web *W, chapter *C, filename *F, text_stream *titling_lin
@<Accept this as a line belonging to this section and chapter@>;
Str::clear(line);
@<Accept this as a line belonging to this section and chapter@>;
text_stream *purpose = Bibliographic::get_datum(W->md, I"Purpose");
if (Str::len(purpose) > 0) {
Str::clear(line);
WRITE_TO(line, "Implied Purpose: %S", purpose);
@<Accept this as a line belonging to this section and chapter@>;
Str::clear(line);
@<Accept this as a line belonging to this section and chapter@>;
}
DISCARD_TEXT(line);
@ Non-implied source lines come from here. Note that we assume here that
@ -262,7 +270,8 @@ tangled for.
void Reader::scan_source_line(text_stream *line, text_file_position *tfp, void *state) {
section *S = (section *) state;
int l = Str::len(line) - 1;
while ((l>=0) && (Characters::is_space_or_tab(Str::get_at(line, l)))) Str::truncate(line, l--);
while ((l>=0) && (Characters::is_space_or_tab(Str::get_at(line, l))))
Str::truncate(line, l--);
if (S->paused_until_at) {
if (Str::get_at(line, 0) == '@') S->paused_until_at = FALSE;

View file

@ -286,6 +286,21 @@ is where the reference is made from.
=
int Colonies::resolve_reference_in_weave(text_stream *url, text_stream *title,
filename *for_HTML_file, text_stream *text, web_md *Wm, source_line *L) {
int r = 0;
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, text, L"(%c+?) -> (%c+)")) {
r = Colonies::resolve_reference_in_weave_inner(url, NULL,
for_HTML_file, mr.exp[1], Wm, L);
WRITE_TO(title, "%S", mr.exp[0]);
} else {
r = Colonies::resolve_reference_in_weave_inner(url, title,
for_HTML_file, text, Wm, L);
}
Regexp::dispose_of(&mr);
return r;
}
int Colonies::resolve_reference_in_weave_inner(text_stream *url, text_stream *title,
filename *for_HTML_file, text_stream *text, web_md *Wm, source_line *L) {
module *from_M = (Wm)?(Wm->as_module):NULL;
module *search_M = from_M;

View file

@ -1,9 +1,9 @@
Title: goldbach
Title: The Goldbach Conjecture
Author: Graham Nelson
Purpose: This example of using inweb is a simple program to test Goldbach's Conjecture, a classic problem in number theory.
Language: C
Licence: This is a free, open-source program published under the Artistic License 2.0.
Sections
The Goldbach Conjecture
Summing Primes
The Sieve of Eratosthenes

View file

@ -1,9 +1,8 @@
The Goldbach Conjecture.
Summing Two Primes.
Here we verify the conjecture for small numbers.
@h The conjecture.
So, this is a program to see if even numbers from 4 to 100 can all be written
@ So, this is a program to see if even numbers from 4 to 100 can all be written
as a sum of two primes. Christian Goldbach asked Euler in 1742 if every even
number greater than 2 can be written this way. This remains open, though
every even number is a sum of at most six primes (Ramaré, 1995) and every
@ -29,9 +28,9 @@ int main(int argc, char *argv[]) {
4 = 2+2
6 = 3+3
8 = 3+5
10 = 3+7 5+5
10 = 3+7 = 5+5
12 = 5+7
14 = 3+11 7+7
14 = 3+11 = 7+7
...
=
We'll print each different pair of primes adding up to i. We
@ -39,8 +38,8 @@ only check in the range $2 \leq j \leq i/2$ to avoid counting pairs
twice over (thus $8 = 3+5 = 5+3$, but that's hardly two different ways).
@<Solve Goldbach's conjecture for i@> =
printf("%d =", i);
printf("%d", i);
for (int j=2; j<=i/2; j++)
if ((isprime(j)) && (isprime(i-j)))
printf(" %d+%d", j, i-j);
printf(" = %d+%d", j, i-j);
printf("\n");

View file

@ -1,6 +1,6 @@
Title: twinprimes
Title: The Twin Primes Conjecture
Author: Graham Nelson
Purpose: A single-file test web for inweb.
Purpose: This example of using inweb is a whole web in a single short file, to look for twin primes, a classic problem in number theory.
Language: C
@h The conjecture.

View file

@ -406,7 +406,15 @@ numerically, link to the first section in them; modules likewise. Errors are
thrown if these references to sections are in any way ambiguous. They are not
case sensitive.
It's also possible to reference function names and type names, provided that
@ Sometimes we want to make a link without literally showing the destination.
This is simple: for example,
= (text)
First //the program has to configure itself -> Configuration//, then...
=
produces: "First //the program has to configure itself -> Configuration//,
then..."; the text "the program has to configure itself" links to //Configuration//.
@ It's also possible to reference function names and type names, provided that
the language definition supports these (see //Supporting Programming Languages//):
this is certainly the case for C-like languages. For example,
= (text)

View file

@ -1,6 +1,6 @@
# Inweb 7
v7-alpha.1+1A20 'Escape to Danger' (14 April 2020)
v7-alpha.1+1A21 'Escape to Danger' (15 April 2020)
## About Inweb

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 14 April 2020
Build Number: 1A20
Build Date: 15 April 2020
Build Number: 1A21

View file

@ -1,7 +1,5 @@
Title: The Inweb Manual and Source Code
Author: Graham Nelson
Purpose: A documentation page.
Language: C
@ This website holds human-readable, or "woven", forms of the source code for
the literate programming tool Inweb. To download and build Inweb, go to the

View file

@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Goldbach Conjecture</title>
<title>Summing Two Primes</title>
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
@ -30,12 +30,10 @@
</nav>
<main role="main">
<!--Weave of 'The Goldbach Conjecture' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">goldbach</a></li><li><b>The Goldbach Conjecture</b></li></ul><p class="purpose">Here we verify the conjecture for small numbers.</p>
<!--Weave of 'Summing Two Primes' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">The Goldbach Conjecture</a></li><li><b>Summing Two Primes</b></li></ul><p class="purpose">Here we verify the conjecture for small numbers.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The conjecture</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. The conjecture. </b>So, this is a program to see if even numbers from 4 to 100 can all be written
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>So, this is a program to see if even numbers from 4 to 100 can all be written
as a sum of two primes. Christian Goldbach asked Euler in 1742 if every even
number greater than 2 can be written this way. This remains open, though
every even number is a sum of at most six primes (Ramaré, 1995) and every
@ -70,9 +68,9 @@ methods.
<span class="plain">4 = 2+2</span>
<span class="plain">6 = 3+3</span>
<span class="plain">8 = 3+5</span>
<span class="plain">10 = 3+7 5+5</span>
<span class="plain">10 = 3+7 = 5+5</span>
<span class="plain">12 = 5+7</span>
<span class="plain">14 = 3+11 7+7</span>
<span class="plain">14 = 3+11 = 7+7</span>
<span class="plain">...</span>
</pre>
@ -88,10 +86,10 @@ twice over (thus \(8 = 3+5 = 5+3\), but that's hardly two different ways).
<pre class="displaydefn">
<span class="identifier">printf</span><span class="plain">(</span><span class="string">"%d ="</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=2; </span><span class="identifier">j</span><span class="plain">&lt;=</span><span class="identifier">i</span><span class="plain">/2; </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="S-tsoe.html#SP2">isprime</a></span><span class="plain">(</span><span class="identifier">j</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext"><a href="S-tsoe.html#SP2">isprime</a></span><span class="plain">(</span><span class="identifier">i</span><span class="plain">-</span><span class="identifier">j</span><span class="plain">)))</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">" %d+%d"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-</span><span class="identifier">j</span><span class="plain">);</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">" = %d+%d"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-</span><span class="identifier">j</span><span class="plain">);</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
</pre>

View file

@ -31,7 +31,7 @@
<main role="main">
<!--Weave of 'The Sieve of Eratosthenes' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">goldbach</a></li><li><b>The Sieve of Eratosthenes</b></li></ul><p class="purpose">A fairly fast way to determine if small numbers are prime, given storage.</p>
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">The Goldbach Conjecture</a></li><li><b>The Sieve of Eratosthenes</b></li></ul><p class="purpose">A fairly fast way to determine if small numbers are prime, given storage.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Storage</a></li><li><a href="#SP2">&#167;2. Primality</a></li></ul><hr class="tocbar">
@ -65,7 +65,7 @@ for primality.
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">isprime<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>isprime</b>:<br>The Goldbach Conjecture - <a href="S-tgc.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">isprime<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>isprime</b>:<br>Summing Two Primes - <a href="S-sp.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &lt;= </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt; </span><span class="constant">RANGE</span><span class="plain">) { </span><span class="identifier">printf</span><span class="plain">(</span><span class="string">"Out of range!\n"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">sieve_performed</span><span class="plain">) </span>&lt;<span class="cwebmacro">Perform the sieve</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
@ -127,7 +127,7 @@ for example.
<p class="endnote">This code is used in <a href="#SP2_1">&#167;2.1</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="S-tgc.html">Back to 'The Goldbach Conjecture'</a></li><li><i>(This section ends Sections.)</i></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="S-sp.html">Back to 'Summing Two Primes'</a></li><li><i>(This section ends Sections.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {

View file

@ -1,6 +1,6 @@
<html>
<head>
<title>goldbach</title>
<title>The Goldbach Conjecture</title>
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
@ -28,12 +28,12 @@
</ul>
</nav>
<main role="main">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>goldbach</b></li></ul>
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>The Goldbach Conjecture</b></li></ul>
<p class="purpose">This example of using inweb is a simple program to test Goldbach's Conjecture, a classic problem in number theory. This is version 1.</p>
<hr>
<ul class="sectionlist">
<li>
<p><a href="S-tgc.html"><spon class="sectiontitle">The Goldbach Conjecture</span></a> -
<p><a href="S-sp.html"><spon class="sectiontitle">Summing Two Primes</span></a> -
<span class="purpose">Here we verify the conjecture for small numbers.</span></p>
</li>
<li>

View file

@ -186,8 +186,10 @@ version 2 it's much tidier.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="identifier">using_syntax</span><span class="plain"> &gt;= </span><span class="constant">V2_SYNTAX</span><span class="plain">) {</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">first_line</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">) &amp;&amp; (</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> == </span><span class="constant">CHAPTER_HEADING_LCAT</span><span class="plain">)) </span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain"> = </span><span class="functiontext"><a href="#SP2">Parser::extract_purpose</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">?</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">next_line:</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">PURPOSE_LCAT</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain"> = </span><span class="functiontext"><a href="#SP2">Parser::extract_purpose</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">?</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">next_line:</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">PURPOSE_LCAT</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -325,7 +327,13 @@ namespace for its functions.
<pre class="displaydefn">
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[(%C+)%] (%C+/%C+): (%c+)."</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Implied Purpose: (%c+)"</span><span class="plain">)) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">PURPOSE_LCAT</span><span class="plain">;</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">is_commentary</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[(%C+)%] (%C+/%C+): (%c+)."</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="identifier">using_syntax</span><span class="plain"> &gt;= </span><span class="constant">V2_SYNTAX</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP3">Parser::wrong_version</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">using_syntax</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="string">"section range in header line"</span><span class="plain">, </span><span class="constant">V1_SYNTAX</span><span class="plain">);</span>

View file

@ -380,6 +380,14 @@ inserted if this is a multi-chapter web.
&lt;<span class="cwebmacro">Accept this as a line belonging to this section and chapter</span> <span class="cwebmacronumber">6.1.2</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Accept this as a line belonging to this section and chapter</span> <span class="cwebmacronumber">6.1.2</span>&gt;<span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">purpose</span><span class="plain"> = </span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Purpose"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">purpose</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="string">"Implied Purpose: %S"</span><span class="plain">, </span><span class="identifier">purpose</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Accept this as a line belonging to this section and chapter</span> <span class="cwebmacronumber">6.1.2</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Accept this as a line belonging to this section and chapter</span> <span class="cwebmacronumber">6.1.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
</pre>
@ -396,7 +404,8 @@ tangled for.
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::scan_source_line<button class="popup" onclick="togglePopup('usagePopup18')">...<span class="popuptext" id="usagePopup18">Usage of <b>Reader::scan_source_line</b>:<br><a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = (</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">l</span><span class="plain">&gt;=0) &amp;&amp; (</span><span class="functiontext"><a href="4-chr.html#SP2">Characters::is_space_or_tab</a></span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">)))) </span><span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">--);</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">l</span><span class="plain">&gt;=0) &amp;&amp; (</span><span class="functiontext"><a href="4-chr.html#SP2">Characters::is_space_or_tab</a></span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">))))</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">--);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">paused_until_at</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'@'</span><span class="plain">) </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">paused_until_at</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
@ -427,7 +436,7 @@ tangled for.
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a> (twice), <a href="#SP6_1_1">&#167;6.1.1</a>.</p>
<p class="endnote">This code is used in <a href="#SP6_1">&#167;6.1</a>, <a href="#SP6_2">&#167;6.2</a> (four times), <a href="#SP6_1_1">&#167;6.1.1</a>.</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Woven and Tangled folders. </b>We abstract these in order to be able to respond well to their not existing:
</p>

View file

@ -426,6 +426,21 @@ is where the reference is made from.
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Colonies::resolve_reference_in_weave<button class="popup" onclick="togglePopup('usagePopup369')">...<span class="popuptext" id="usagePopup369">Usage of <b>Colonies::resolve_reference_in_weave</b>:<br><a href="#SP11">&#167;11</a>, Format Methods - <a href="5-fm.html#SP27_4_1">&#167;27.4.1</a><br>HTML Formats - <a href="5-hf.html#SP9_2_1">&#167;9.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">,</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">for_HTML_file</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">r</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+?) -&gt; (%c+)"</span><span class="plain">)) {</span>
<span class="identifier">r</span><span class="plain"> = </span><span class="functiontext"><a href="#SP10">Colonies::resolve_reference_in_weave_inner</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
<span class="identifier">for_HTML_file</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1], </span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">r</span><span class="plain"> = </span><span class="functiontext"><a href="#SP10">Colonies::resolve_reference_in_weave_inner</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">,</span>
<span class="identifier">for_HTML_file</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">r</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Colonies::resolve_reference_in_weave_inner<button class="popup" onclick="togglePopup('usagePopup370')">...<span class="popuptext" id="usagePopup370">Usage of <b>Colonies::resolve_reference_in_weave_inner</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">,</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">for_HTML_file</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">module</span><span class="plain"> *</span><span class="identifier">from_M</span><span class="plain"> = (</span><span class="identifier">Wm</span><span class="plain">)?(</span><span class="identifier">Wm</span><span class="plain">-&gt;</span><span class="element">as_module</span><span class="plain">):</span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">module</span><span class="plain"> *</span><span class="identifier">search_M</span><span class="plain"> = </span><span class="identifier">from_M</span><span class="plain">;</span>
@ -615,7 +630,7 @@ the main one, and suffixed by <code class="display"><span class="extract">-modul
<p class="inwebparagraph"><a id="SP11"></a><b>&#167;11. URL management. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::link_URL<button class="popup" onclick="togglePopup('usagePopup370')">...<span class="popuptext" id="usagePopup370">Usage of <b>Colonies::link_URL</b>:<br><a href="#SP6">&#167;6</a>, The Indexer - <a href="3-ti.html#SP6_1_8_15">&#167;6.1.8.15</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">link_text</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::link_URL<button class="popup" onclick="togglePopup('usagePopup371')">...<span class="popuptext" id="usagePopup371">Usage of <b>Colonies::link_URL</b>:<br><a href="#SP6">&#167;6</a>, The Indexer - <a href="3-ti.html#SP6_1_8_15">&#167;6.1.8.15</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">link_text</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">link_text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *//(%c+)// *"</span><span class="plain">))</span>
<span class="functiontext"><a href="#SP11">Colonies::reference_URL</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="identifier">F</span><span class="plain">);</span>
@ -624,7 +639,7 @@ the main one, and suffixed by <code class="display"><span class="extract">-modul
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::reference_URL<button class="popup" onclick="togglePopup('usagePopup371')">...<span class="popuptext" id="usagePopup371">Usage of <b>Colonies::reference_URL</b>:<br>The Indexer - <a href="3-ti.html#SP6_1_8_11">&#167;6.1.8.11</a>, <a href="3-ti.html#SP6_1_8_14">&#167;6.1.8.14</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">link_text</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::reference_URL<button class="popup" onclick="togglePopup('usagePopup372')">...<span class="popuptext" id="usagePopup372">Usage of <b>Colonies::reference_URL</b>:<br>The Indexer - <a href="3-ti.html#SP6_1_8_11">&#167;6.1.8.11</a>, <a href="3-ti.html#SP6_1_8_14">&#167;6.1.8.14</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">link_text</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP10">Colonies::resolve_reference_in_weave</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">link_text</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">))</span>
@ -635,7 +650,7 @@ the main one, and suffixed by <code class="display"><span class="extract">-modul
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::section_URL<button class="popup" onclick="togglePopup('usagePopup372')">...<span class="popuptext" id="usagePopup372">Usage of <b>Colonies::section_URL</b>:<br><a href="#SP10_5_1">&#167;10.5.1</a>, <a href="#SP10_5_2">&#167;10.5.2</a>, The Indexer - <a href="3-ti.html#SP6_1_8_8_1">&#167;6.1.8.8.1</a><br>HTML Formats - <a href="5-hf.html#SP28">&#167;28</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::section_URL<button class="popup" onclick="togglePopup('usagePopup373')">...<span class="popuptext" id="usagePopup373">Usage of <b>Colonies::section_URL</b>:<br><a href="#SP10_5_1">&#167;10.5.1</a>, <a href="#SP10_5_2">&#167;10.5.2</a>, The Indexer - <a href="3-ti.html#SP6_1_8_8_1">&#167;6.1.8.8.1</a><br>HTML Formats - <a href="5-hf.html#SP28">&#167;28</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Sm</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unwoven section"</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">) || (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">))</span>
@ -645,7 +660,7 @@ the main one, and suffixed by <code class="display"><span class="extract">-modul
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">".html"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::paragraph_URL<button class="popup" onclick="togglePopup('usagePopup373')">...<span class="popuptext" id="usagePopup373">Usage of <b>Colonies::paragraph_URL</b>:<br><a href="#SP10_3">&#167;10.3</a>, <a href="#SP10_4">&#167;10.4</a>, HTML Formats - <a href="5-hf.html#SP7">&#167;7</a>, <a href="5-hf.html#SP8">&#167;8</a>, <a href="5-hf.html#SP9_3">&#167;9.3</a>, <a href="5-hf.html#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">a_link</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Colonies::paragraph_URL<button class="popup" onclick="togglePopup('usagePopup374')">...<span class="popuptext" id="usagePopup374">Usage of <b>Colonies::paragraph_URL</b>:<br><a href="#SP10_3">&#167;10.3</a>, <a href="#SP10_4">&#167;10.4</a>, HTML Formats - <a href="5-hf.html#SP7">&#167;7</a>, <a href="5-hf.html#SP8">&#167;8</a>, <a href="5-hf.html#SP9_3">&#167;9.3</a>, <a href="5-hf.html#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">a_link</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">from</span><span class="plain">) &amp;&amp; (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain"> != </span><span class="identifier">from</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>

View file

@ -33,7 +33,7 @@
<!--Weave of 'How to Write a Web' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#M">Manual</a></li><li><b>How to Write a Web</b></li></ul><p class="purpose">How to mark up code for literate programming.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The title of a section</a></li><li><a href="#SP2">&#167;2. Paragraphing</a></li><li><a href="#SP6">&#167;6. Conditional compilation</a></li><li><a href="#SP7">&#167;7. Commentary</a></li><li><a href="#SP12">&#167;12. Code samples and other extraneous matter</a></li><li><a href="#SP13">&#167;13. Links</a></li><li><a href="#SP14">&#167;14. Cross-references</a></li><li><a href="#SP16">&#167;16. Figures</a></li><li><a href="#SP17">&#167;17. Embedded video</a></li><li><a href="#SP20">&#167;20. Mathematics notation</a></li><li><a href="#SP21">&#167;21. Footnotes</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="#SP1">&#167;1. The title of a section</a></li><li><a href="#SP2">&#167;2. Paragraphing</a></li><li><a href="#SP6">&#167;6. Conditional compilation</a></li><li><a href="#SP7">&#167;7. Commentary</a></li><li><a href="#SP12">&#167;12. Code samples and other extraneous matter</a></li><li><a href="#SP13">&#167;13. Links</a></li><li><a href="#SP14">&#167;14. Cross-references</a></li><li><a href="#SP18">&#167;18. Figures</a></li><li><a href="#SP19">&#167;19. Embedded video</a></li><li><a href="#SP22">&#167;22. Mathematics notation</a></li><li><a href="#SP23">&#167;23. Footnotes</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. The title of a section. </b>In any section file, there will be a few lines at the top which occur before
the first paragraph of code begins. (The first paragraph begins on the first
@ -594,7 +594,19 @@ thrown if these references to sections are in any way ambiguous. They are not
case sensitive.
</p>
<p class="inwebparagraph">It's also possible to reference function names and type names, provided that
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>Sometimes we want to make a link without literally showing the destination.
This is simple: for example,
</p>
<pre class="display">
<span class="plain">First //the program has to configure itself -&gt; Configuration//, then...</span>
</pre>
<p class="inwebparagraph">produces: "First <a href="1-cnf.html" class="internal">the program has to configure itself</a>,
then..."; the text "the program has to configure itself" links to <a href="1-cnf.html" class="internal">Configuration</a>.
</p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. </b>It's also possible to reference function names and type names, provided that
the language definition supports these (see <a href="M-spl.html" class="internal">Supporting Programming Languages</a>):
this is certainly the case for C-like languages. For example,
</p>
@ -614,7 +626,7 @@ current one, but this requires the use of a Colony file.
See <a href="M-mwiw.html" class="internal">Making Weaves into Websites</a>.
</p>
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. </b>Cross-references also work inside text extracts marked as <code class="display"><span class="extract">hyperlinked</span></code>.
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. </b>Cross-references also work inside text extracts marked as <code class="display"><span class="extract">hyperlinked</span></code>.
</p>
<pre class="display">
@ -649,7 +661,7 @@ can be configured in the Contents page of a web, say like so:
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP16"></a><b>&#167;16. Figures. </b>Images to be included in weaves of a web are called "Figures", as they
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. Figures. </b>Images to be included in weaves of a web are called "Figures", as they
would be in a printed book. These images should ideally be in PNG, JPG or PDF
format and placed in a subdirectory of the web called <code class="display"><span class="extract">Figures</span></code>: for instance,
the weaver would seek <code class="display"><span class="extract">Fig_2_3.pdf</span></code> at pathname <code class="display"><span class="extract">Figures/Fig_2_3.pdf</span></code>.
@ -680,7 +692,7 @@ to be exactly that given: it is scaled accordingly. (They can't both be
constrained, so you can't change the aspect ratio.)
</p>
<p class="inwebparagraph"><a id="SP17"></a><b>&#167;17. Embedded video. </b>This makes sense only for some HTML-like weave formats, but we can also
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. Embedded video. </b>This makes sense only for some HTML-like weave formats, but we can also
cause videos to be embedded:
</p>
@ -723,7 +735,7 @@ this case was <code class="display"><span class="extract">https://youtu.be/GR3aI
<center><iframe width="100%" height="405" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/42803139&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe>
</center>
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. </b>Adding width and height is straightforward; by default the dimensions are
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. </b>Adding width and height is straightforward; by default the dimensions are
720 by 405.
</p>
@ -736,7 +748,7 @@ this case was <code class="display"><span class="extract">https://youtu.be/GR3aI
arguably music has width and not height, but SoundCloud thinks otherwise).
</p>
<p class="inwebparagraph"><a id="SP19"></a><b>&#167;19. </b>It's easy to add services. These are all handled by using prototype code
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. </b>It's easy to add services. These are all handled by using prototype code
for a suitable HTML <code class="display"><span class="extract">&lt;iframe&gt;</span></code>, and those prototypes are stored in the
<code class="display"><span class="extract">Embedding</span></code> subdirectory of the Inweb installation. But you can use your
own prototypes instead, by creating an <code class="display"><span class="extract">Embedding</span></code> subdirectory of your own
@ -744,7 +756,7 @@ web; this overrides the ones built in. If your service is, say, <code class="dis
then the file would be <code class="display"><span class="extract">W/Embedding/WebTubeo.html</span></code>.
</p>
<p class="inwebparagraph"><a id="SP20"></a><b>&#167;20. Mathematics notation. </b>Literate programming is a good technique to justify code which hangs on
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. Mathematics notation. </b>Literate programming is a good technique to justify code which hangs on
unobvious pieces of mathematics or computer science, and which must therefore
be explained carefully. Formulae or equations are a real convenience for that.
</p>
@ -803,7 +815,7 @@ deactivated entirely by writing the following in the Contents section of a web:
<p class="inwebparagraph">(This is always <code class="display"><span class="extract">On</span></code>, the default, or <code class="display"><span class="extract">Off</span></code>.)
</p>
<p class="inwebparagraph"><a id="SP21"></a><b>&#167;21. Footnotes. </b>Not everyone likes footnotes,<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> but sometimes they're a tidy way to make
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. Footnotes. </b>Not everyone likes footnotes,<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> but sometimes they're a tidy way to make
references.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>
</p>
@ -813,7 +825,7 @@ University Press, 1999).
Computers &amp; Mathematics with Applications, 2, 137-39 (1976).
<a href="#fnref:2" title="return to text"> &#x21A9;</a></p></li></p>
<p class="inwebparagraph"><a id="SP22"></a><b>&#167;22. </b>The content of that sentence was typed as follows:
<p class="inwebparagraph"><a id="SP24"></a><b>&#167;24. </b>The content of that sentence was typed as follows:
</p>
<pre class="display">
@ -846,7 +858,7 @@ right now it's not possible to have mathematics in a footnote when <code class="
is in use.
</p>
<p class="inwebparagraph"><a id="SP23"></a><b>&#167;23. </b>Once again, notation may be an issue, and so it's controllable. By default,
<p class="inwebparagraph"><a id="SP25"></a><b>&#167;25. </b>Once again, notation may be an issue, and so it's controllable. By default,
we have:
</p>

View file

@ -489,7 +489,11 @@ main {
<main role="main">
<!--Weave of 'Complete Program' generated by 7-->
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>twinprimes</b></li></ul><p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. The conjecture. </b>It is widely believed that there are an infinite number of twin primes, that
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><b>The Twin Primes Conjecture</b></li></ul><p class="purpose">This example of using inweb is a whole web in a single short file, to look for twin primes, a classic problem in number theory.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The conjecture</a></li><li><a href="#SP2">&#167;2. Primality</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. The conjecture. </b>It is widely believed that there are an infinite number of twin primes, that
is, prime numbers occurring in pairs different by 2. Twins are known to exist
at least as far out as \(10^{388,342}\) (as of 2016), and there are infinitely
many pairs of primes closer together than about 250 (Zhang, 2013; Tao, Maynard,