Embedding of YouTube, Vimeo, SoundCloud
This commit is contained in:
parent
c66f5c1fae
commit
0c47e8b9e2
25 changed files with 1995 additions and 1079 deletions
|
@ -146,4 +146,5 @@ some of these fell into disuse in version 2 syntax.
|
|||
@e PAGEBREAK_CMD
|
||||
@e GRAMMAR_INDEX_CMD
|
||||
@e FIGURE_CMD
|
||||
@e EMBED_CMD
|
||||
@e TAG_CMD
|
||||
|
|
|
@ -423,6 +423,16 @@ division in the current section.
|
|||
code_lcat_for_body = COMMENT_BODY_LCAT;
|
||||
L->text_operand = Str::duplicate(mr2.exp[0]);
|
||||
comment_mode = TRUE;
|
||||
} else if ((current_paragraph) &&
|
||||
((Regexp::match(&mr2, mr.exp[0], L"%(embedded (%C+) video (%c+)%)")) ||
|
||||
(Regexp::match(&mr2, mr.exp[0], L"%(embedded (%C+) audio (%c+)%)")))) {
|
||||
Tags::add_by_name(L->owning_paragraph, I"Figures");
|
||||
L->command_code = EMBED_CMD;
|
||||
L->category = COMMAND_LCAT;
|
||||
code_lcat_for_body = COMMENT_BODY_LCAT;
|
||||
L->text_operand = Str::duplicate(mr2.exp[0]);
|
||||
L->text_operand2 = Str::duplicate(mr2.exp[1]);
|
||||
comment_mode = TRUE;
|
||||
} else {
|
||||
Main::error_in_web(I"unknown bracketed annotation", L);
|
||||
}
|
||||
|
|
|
@ -172,6 +172,7 @@ at us; but we don't weave them into the output, that's for sure.
|
|||
if (L->command_code == PAGEBREAK_CMD) Formats::pagebreak(OUT, wv);
|
||||
if (L->command_code == GRAMMAR_INDEX_CMD) InCSupport::weave_grammar_index(OUT);
|
||||
if (L->command_code == FIGURE_CMD) @<Weave a figure@>;
|
||||
if (L->command_code == EMBED_CMD) @<Embed some Internet material@>;
|
||||
/* Otherwise assume it was a tangler command, and ignore it here */
|
||||
continue;
|
||||
}
|
||||
|
@ -201,6 +202,9 @@ at us; but we don't weave them into the output, that's for sure.
|
|||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
|
||||
@<Embed some Internet material@> =
|
||||
Formats::embed(OUT, wv, L->text_operand, L->text_operand2);
|
||||
|
||||
@h Headings.
|
||||
The purpose is set with a little heading. Its operand is that part of
|
||||
the purpose-text which is on the opening line; the rest follows on
|
||||
|
|
196
Chapter 4/Structures and Functions.w
Normal file
196
Chapter 4/Structures and Functions.w
Normal file
|
@ -0,0 +1,196 @@
|
|||
[Structures::] Structures and Functions.
|
||||
|
||||
Basic support for languages to recognise structure and function declarations.
|
||||
|
||||
@ For each |typedef struct| we find, we will make one of these:
|
||||
|
||||
=
|
||||
typedef struct c_structure {
|
||||
struct text_stream *structure_name;
|
||||
int tangled; /* whether the structure definition has been tangled out */
|
||||
struct source_line *structure_header_at; /* opening line of |typedef| */
|
||||
struct source_line *typedef_ends; /* closing line, where |}| appears */
|
||||
struct linked_list *incorporates; /* of |c_structure| */
|
||||
struct linked_list *elements; /* of |structure_element| */
|
||||
struct c_structure *next_cst_alphabetically;
|
||||
MEMORY_MANAGEMENT
|
||||
} c_structure;
|
||||
|
||||
@ =
|
||||
c_structure *first_cst_alphabetically = NULL;
|
||||
|
||||
c_structure *Structures::new_struct(web *W, text_stream *name, source_line *L) {
|
||||
c_structure *str = CREATE(c_structure);
|
||||
@<Initialise the C structure structure@>;
|
||||
Analyser::mark_reserved_word_for_section(L->owning_section, str->structure_name, RESERVED_COLOUR);
|
||||
@<Add this to the lists for its web and its paragraph@>;
|
||||
@<Insertion-sort this into the alphabetical list of all structures found@>;
|
||||
return str;
|
||||
}
|
||||
|
||||
@<Initialise the C structure structure@> =
|
||||
str->structure_name = Str::duplicate(name);
|
||||
str->structure_header_at = L;
|
||||
str->tangled = FALSE;
|
||||
str->typedef_ends = NULL;
|
||||
str->incorporates = NEW_LINKED_LIST(c_structure);
|
||||
str->elements = NEW_LINKED_LIST(structure_element);
|
||||
|
||||
@<Add this to the lists for its web and its paragraph@> =
|
||||
ADD_TO_LINKED_LIST(str, c_structure, W->c_structures);
|
||||
ADD_TO_LINKED_LIST(str, c_structure, L->owning_paragraph->structures);
|
||||
|
||||
@<Insertion-sort this into the alphabetical list of all structures found@> =
|
||||
str->next_cst_alphabetically = NULL;
|
||||
if (first_cst_alphabetically == NULL) first_cst_alphabetically = str;
|
||||
else {
|
||||
int placed = FALSE;
|
||||
c_structure *last = NULL;
|
||||
for (c_structure *seq = first_cst_alphabetically; seq;
|
||||
seq = seq->next_cst_alphabetically) {
|
||||
if (Str::cmp(str->structure_name, seq->structure_name) < 0) {
|
||||
if (seq == first_cst_alphabetically) {
|
||||
str->next_cst_alphabetically = first_cst_alphabetically;
|
||||
first_cst_alphabetically = str;
|
||||
} else {
|
||||
last->next_cst_alphabetically = str;
|
||||
str->next_cst_alphabetically = seq;
|
||||
}
|
||||
placed = TRUE;
|
||||
break;
|
||||
}
|
||||
last = seq;
|
||||
}
|
||||
if (placed == FALSE) last->next_cst_alphabetically = str;
|
||||
}
|
||||
|
||||
@ A language can also create an instance of |structure_element| to record the
|
||||
existence of the element |val|, and add it to the linked list of elements of
|
||||
the structure being defined.
|
||||
|
||||
In InC, only, certain element names used often in Inform's source code are
|
||||
given mildly special treatment. This doesn't amount to much. |allow_sharing|
|
||||
has no effect on tangling, so it doesn't change the program. It simply
|
||||
affects the reports in the woven code about where structures are used.
|
||||
|
||||
=
|
||||
typedef struct structure_element {
|
||||
struct text_stream *element_name;
|
||||
struct source_line *element_created_at;
|
||||
int allow_sharing;
|
||||
MEMORY_MANAGEMENT
|
||||
} structure_element;
|
||||
|
||||
@ =
|
||||
structure_element *Structures::new_element(c_structure *str, text_stream *elname,
|
||||
source_line *L) {
|
||||
Analyser::mark_reserved_word_for_section(L->owning_section, elname, ELEMENT_COLOUR);
|
||||
structure_element *elt = CREATE(structure_element);
|
||||
elt->element_name = Str::duplicate(elname);
|
||||
elt->allow_sharing = FALSE;
|
||||
elt->element_created_at = L;
|
||||
if (LanguageMethods::share_element(L->owning_section->sect_language, elname))
|
||||
elt->allow_sharing = TRUE;
|
||||
ADD_TO_LINKED_LIST(elt, structure_element, str->elements);
|
||||
return elt;
|
||||
}
|
||||
|
||||
@ =
|
||||
c_structure *Structures::find_structure(web *W, text_stream *name) {
|
||||
c_structure *str;
|
||||
LOOP_OVER_LINKED_LIST(str, c_structure, W->c_structures)
|
||||
if (Str::eq(name, str->structure_name))
|
||||
return str;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@h Functions.
|
||||
Each function definition found results in one of these structures being made:
|
||||
|
||||
=
|
||||
typedef struct function {
|
||||
struct text_stream *function_name; /* e.g., |"cultivate"| */
|
||||
struct text_stream *function_type; /* e.g., |"tree *"| */
|
||||
struct text_stream *function_arguments; /* e.g., |"int rainfall)"|: note |)| */
|
||||
struct source_line *function_header_at; /* where the first line of the header begins */
|
||||
int within_namespace; /* written using InC namespace dividers */
|
||||
int called_from_other_sections;
|
||||
int call_freely;
|
||||
int no_conditionals;
|
||||
struct source_line *within_conditionals[MAX_CONDITIONAL_COMPILATION_STACK];
|
||||
MEMORY_MANAGEMENT
|
||||
} function;
|
||||
|
||||
@ =
|
||||
function *Structures::new_function(text_stream *fname, source_line *L) {
|
||||
Analyser::mark_reserved_word_for_section(L->owning_section, fname, FUNCTION_COLOUR);
|
||||
function *fn = CREATE(function);
|
||||
@<Initialise the function structure@>;
|
||||
@<Add the function to its paragraph and line@>;
|
||||
if (L->owning_section->sect_language->supports_namespaces)
|
||||
@<Check that the function has its namespace correctly declared@>;
|
||||
return fn;
|
||||
}
|
||||
|
||||
@ Note that we take a snapshot of the conditional compilation stack as
|
||||
part of the function structure. We'll need it when predeclaring the function.
|
||||
|
||||
@<Initialise the function structure@> =
|
||||
fn->function_name = Str::duplicate(fname);
|
||||
fn->function_arguments = Str::new();
|
||||
fn->function_type = Str::new();
|
||||
fn->within_namespace = FALSE;
|
||||
fn->called_from_other_sections = FALSE;
|
||||
fn->call_freely = FALSE;
|
||||
fn->function_header_at = L;
|
||||
fn->no_conditionals = 0;
|
||||
|
||||
@<Add the function to its paragraph and line@> =
|
||||
paragraph *P = L->owning_paragraph;
|
||||
if (P) ADD_TO_LINKED_LIST(fn, function, P->functions);
|
||||
L->function_defined = fn;
|
||||
|
||||
@<Check that the function has its namespace correctly declared@> =
|
||||
text_stream *declared_namespace = NULL;
|
||||
text_stream *ambient_namespace = L->owning_section->sect_namespace;
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, fname, L"(%c+::)%c*")) {
|
||||
declared_namespace = mr.exp[0];
|
||||
fn->within_namespace = TRUE;
|
||||
} else if ((Str::eq_wide_string(fname, L"main")) &&
|
||||
(Str::eq_wide_string(ambient_namespace, L"Main::")))
|
||||
declared_namespace = I"Main::";
|
||||
if ((Str::ne(declared_namespace, ambient_namespace)) &&
|
||||
(L->owning_paragraph->placed_very_early == FALSE)) {
|
||||
TEMPORARY_TEXT(err_mess);
|
||||
if (Str::len(declared_namespace) == 0)
|
||||
WRITE_TO(err_mess, "Function '%S' should have namespace prefix '%S'",
|
||||
fname, ambient_namespace);
|
||||
else if (Str::len(ambient_namespace) == 0)
|
||||
WRITE_TO(err_mess, "Function '%S' declared in a section with no namespace",
|
||||
fname);
|
||||
else
|
||||
WRITE_TO(err_mess, "Function '%S' declared in a section with the wrong namespace '%S'",
|
||||
fname, ambient_namespace);
|
||||
Main::error_in_web(err_mess, L);
|
||||
DISCARD_TEXT(err_mess);
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
|
||||
@h Cataloguing.
|
||||
This implements the additional information in the |-structures| and |-functions|
|
||||
forms of section catalogue.
|
||||
|
||||
=
|
||||
void Structures::catalogue(section *S, int functions_too) {
|
||||
c_structure *str;
|
||||
LOOP_OVER(str, c_structure)
|
||||
if (str->structure_header_at->owning_section == S)
|
||||
PRINT(" %S ", str->structure_name);
|
||||
if (functions_too) {
|
||||
function *fn;
|
||||
LOOP_OVER(fn, function)
|
||||
if (fn->function_header_at->owning_section == S)
|
||||
PRINT("\n %S", fn->function_name);
|
||||
}
|
||||
}
|
|
@ -293,6 +293,21 @@ void Formats::figure(OUTPUT_STREAM, weave_target *wv, text_stream *figname,
|
|||
VMETHOD_CALL(wf, FIGURE_FOR_MTID, OUT, wv, figname, w, h, pl);
|
||||
}
|
||||
|
||||
@ |EMBED_FOR_MTID| has to embed some Internet-sourced content. |service|
|
||||
here is something like |YouTube| or |Soundcloud|, and |ID| is whatever code
|
||||
that service uses to identify the video/audio in question.
|
||||
|
||||
@e EMBED_FOR_MTID
|
||||
|
||||
=
|
||||
VMETHOD_TYPE(EMBED_FOR_MTID, weave_format *wf, text_stream *OUT, weave_target *wv,
|
||||
text_stream *service, text_stream *ID)
|
||||
void Formats::embed(OUTPUT_STREAM, weave_target *wv, text_stream *service,
|
||||
text_stream *ID) {
|
||||
weave_format *wf = wv->format;
|
||||
VMETHOD_CALL(wf, EMBED_FOR_MTID, OUT, wv, service, ID);
|
||||
}
|
||||
|
||||
@ This method weaves an angle-bracketed paragraph macro name. |defn| is set
|
||||
if and only if this is the place where the macro is defined -- the usual
|
||||
thing is to render some sort of equals sign after it, if so.
|
||||
|
|
|
@ -31,6 +31,7 @@ void HTMLFormat::create(void) {
|
|||
METHOD_ADD(wf, ITEM_FOR_MTID, HTMLFormat::item);
|
||||
METHOD_ADD(wf, BAR_FOR_MTID, HTMLFormat::bar);
|
||||
METHOD_ADD(wf, FIGURE_FOR_MTID, HTMLFormat::figure);
|
||||
METHOD_ADD(wf, EMBED_FOR_MTID, HTMLFormat::embed);
|
||||
METHOD_ADD(wf, PARA_MACRO_FOR_MTID, HTMLFormat::para_macro);
|
||||
METHOD_ADD(wf, PAGEBREAK_FOR_MTID, HTMLFormat::pagebreak);
|
||||
METHOD_ADD(wf, BLANK_LINE_FOR_MTID, HTMLFormat::blank_line);
|
||||
|
@ -446,6 +447,47 @@ void HTMLFormat::figure(weave_format *self, text_stream *OUT, weave_target *wv,
|
|||
WRITE("\n");
|
||||
}
|
||||
|
||||
@ =
|
||||
void HTMLFormat::embed(weave_format *self, text_stream *OUT, weave_target *wv,
|
||||
text_stream *service, text_stream *ID) {
|
||||
text_stream *CH = I"405";
|
||||
text_stream *CW = I"720";
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, ID, L"(%c+) at (%c+) by (%c+)")) {
|
||||
CW = Str::duplicate(mr.exp[1]);
|
||||
CH = Str::duplicate(mr.exp[2]);
|
||||
ID = mr.exp[0];
|
||||
} else if (Regexp::match(&mr, ID, L"(%c+) at (%c+)")) {
|
||||
CH = Str::duplicate(mr.exp[1]);
|
||||
ID = mr.exp[0];
|
||||
}
|
||||
HTMLFormat::exit_current_paragraph(OUT);
|
||||
TEMPORARY_TEXT(embed_leaf);
|
||||
WRITE_TO(embed_leaf, "%S.html", service);
|
||||
filename *F =
|
||||
Filenames::in_folder(
|
||||
Pathnames::subfolder(wv->weave_web->md->path_to_web, I"Embedding"), embed_leaf);
|
||||
if (TextFiles::exists(F) == FALSE)
|
||||
F = Filenames::in_folder(
|
||||
Pathnames::subfolder(path_to_inweb, I"Embedding"), embed_leaf);
|
||||
DISCARD_TEXT(embed_leaf);
|
||||
|
||||
if (TextFiles::exists(F) == FALSE) {
|
||||
PRINT("Tried %f\n", F);
|
||||
Main::error_in_web(I"This is not a supported service", current_weave_line);
|
||||
return;
|
||||
}
|
||||
|
||||
Bibliographic::set_datum(wv->weave_web->md, I"Content ID", ID);
|
||||
Bibliographic::set_datum(wv->weave_web->md, I"Content Width", CW);
|
||||
Bibliographic::set_datum(wv->weave_web->md, I"Content Height", CH);
|
||||
HTML_OPEN("center");
|
||||
Indexer::run(wv->weave_web, I"", F, NULL, OUT, wv->pattern, NULL, NULL, NULL, FALSE, TRUE);
|
||||
HTML_CLOSE("center");
|
||||
WRITE("\n");
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@ =
|
||||
void HTMLFormat::para_macro(weave_format *self, text_stream *OUT, weave_target *wv,
|
||||
para_macro *pmac, int defn) {
|
||||
|
|
1
Embedding/SoundCloud.html
Normal file
1
Embedding/SoundCloud.html
Normal file
|
@ -0,0 +1 @@
|
|||
<iframe width="100%" height="[[Content Height]]" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/[[Content ID]]&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe>
|
1
Embedding/Vimeo.html
Normal file
1
Embedding/Vimeo.html
Normal file
|
@ -0,0 +1 @@
|
|||
<iframe src="https://player.vimeo.com/video/[[Content ID]]" width="[[Content Width]]" height="[[Content Height]]" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
1
Embedding/YouTube.html
Normal file
1
Embedding/YouTube.html
Normal file
|
@ -0,0 +1 @@
|
|||
<iframe width="[[Content Width]]" height="[[Content Height]]" src="https://www.youtube.com/embed/[[Content ID]]" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
BIN
Figures/mars.jpg
Normal file
BIN
Figures/mars.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 139 KiB |
|
@ -451,6 +451,48 @@ In these examples, we constrain the width or the height of the image
|
|||
to be exactly that given: it is scaled accordingly. (They can't both be
|
||||
constrained, so you can't change the aspect ratio.)
|
||||
|
||||
@h Embedded video.
|
||||
This makes sense only for some HTML-like weave formats, but we can also
|
||||
cause videos to be embedded:
|
||||
= (text as Inweb)
|
||||
= (embedded YouTube video GR3aImy7dWw)
|
||||
=
|
||||
With results like so:
|
||||
= (embedded YouTube video GR3aImy7dWw)
|
||||
|
||||
The YouTube ID number |GR3aImy7dWw| can be read from its Share URL, which in
|
||||
this case was |https://youtu.be/GR3aImy7dWw|.
|
||||
|
||||
Similarly for Vimeo:
|
||||
= (text as Inweb)
|
||||
= (embedded Vimeo video 204519)
|
||||
=
|
||||
With results like so:
|
||||
= (embedded Vimeo video 204519)
|
||||
|
||||
For audio, you may like to try SoundCloud:
|
||||
= (text as Inweb)
|
||||
= (embedded SoundCloud audio 42803139)
|
||||
=
|
||||
With results like so:
|
||||
= (embedded SoundCloud audio 42803139)
|
||||
|
||||
@ Adding width and height is straightforward; by default the dimensions are
|
||||
720 by 405.
|
||||
= (text as Inweb)
|
||||
= (embedded Vimeo video 204519 at 400 by 300)
|
||||
= (embedded SoundCloud audio 42803139 at 200)
|
||||
=
|
||||
The latter sets just the height (of the displayed waveform, that is --
|
||||
arguably music has width and not height, but SoundCloud thinks otherwise).
|
||||
|
||||
@ It's easy to add services. These are all handled by using prototype code
|
||||
for a suitable HTML |<iframe>|, and those prototypes are stored in the
|
||||
|Embedding| subdirectory of the Inweb installation. But you can use your
|
||||
own prototypes instead, by creating an |Embedding| subdirectory of your own
|
||||
web; this overrides the ones built in. If your service is, say, |WebTubeo|,
|
||||
then the file would be |W/Embedding/WebTubeo.html|.
|
||||
|
||||
@h Mathematics notation.
|
||||
Mathematical formulae can be typed in TeX notation between dollar signs,
|
||||
as usual for TeX formulae. This can of course only really be rendered if
|
||||
|
|
2116
Tangled/inweb.c
2116
Tangled/inweb.c
File diff suppressed because it is too large
Load diff
|
@ -517,7 +517,7 @@ source:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Main::error_in_web is used in 1/cnf (<a href="1-cnf.html#SP5">§5</a>), 2/tp (<a href="2-tp.html#SP1_1_6_3">§1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">§1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">§1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">§1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">§1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">§1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">§1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">§1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">§1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">§1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">§3</a>), 2/ec (<a href="2-ec.html#SP3_1">§3.1</a>, <a href="2-ec.html#SP3_2">§3.2</a>, <a href="2-ec.html#SP3_3">§3.3</a>), 3/ta (<a href="3-ta.html#SP4_1">§4.1</a>), 3/tt (<a href="3-tt.html#SP1_1_1_1">§1.1.1.1</a>, <a href="3-tt.html#SP3_1">§3.1</a>), 4/saf (<a href="4-saf.html#SP7_3">§7.3</a>), 4/lm (<a href="4-lm.html#SP8">§8</a>), 4/cl (<a href="4-cl.html#SP2">§2</a>, <a href="4-cl.html#SP2_1">§2.1</a>, <a href="4-cl.html#SP2_4_2_1">§2.4.2.1</a>, <a href="4-cl.html#SP8">§8</a>), 5/fm (<a href="5-fm.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function Main::error_in_web is used in 1/cnf (<a href="1-cnf.html#SP5">§5</a>), 2/tp (<a href="2-tp.html#SP1_1_6_3">§1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">§1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">§1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">§1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">§1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">§1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">§1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">§1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">§1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">§1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">§3</a>), 2/ec (<a href="2-ec.html#SP3_1">§3.1</a>, <a href="2-ec.html#SP3_2">§3.2</a>, <a href="2-ec.html#SP3_3">§3.3</a>), 3/ta (<a href="3-ta.html#SP4_1">§4.1</a>), 3/tt (<a href="3-tt.html#SP1_1_1_1">§1.1.1.1</a>, <a href="3-tt.html#SP3_1">§3.1</a>), 4/saf (<a href="4-saf.html#SP7_3">§7.3</a>), 4/lm (<a href="4-lm.html#SP8">§8</a>), 4/cl (<a href="4-cl.html#SP2">§2</a>, <a href="4-cl.html#SP2_1">§2.1</a>, <a href="4-cl.html#SP2_4_2_1">§2.4.2.1</a>, <a href="4-cl.html#SP8">§8</a>), 5/fm (<a href="5-fm.html#SP25">§25</a>), 5/hf (<a href="5-hf.html#SP17">§17</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-bsc.html">Back to 'Basics'</a></li><li><a href="1-cnf.html">Continue with 'Configuration'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -331,7 +331,7 @@ from each other then this routine will lock up into an infinite loop.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Patterns::obtain_filename is used in <a href="#SP6">§6</a>, 3/ts (<a href="3-ts.html#SP3">§3</a>), 3/ti (<a href="3-ti.html#SP1">§1</a>, <a href="3-ti.html#SP2">§2</a>, <a href="3-ti.html#SP2_1_3">§2.1.3</a>, <a href="3-ti.html#SP5_1">§5.1</a>), 5/tf (<a href="5-tf.html#SP3_1">§3.1</a>), 5/hf (<a href="5-hf.html#SP6">§6</a>, <a href="5-hf.html#SP9">§9</a>, <a href="5-hf.html#SP28">§28</a>).</p>
|
||||
<p class="endnote">The function Patterns::obtain_filename is used in <a href="#SP6">§6</a>, 3/ts (<a href="3-ts.html#SP3">§3</a>), 3/ti (<a href="3-ti.html#SP1">§1</a>, <a href="3-ti.html#SP2">§2</a>, <a href="3-ti.html#SP2_1_3">§2.1.3</a>, <a href="3-ti.html#SP5_1">§5.1</a>), 5/tf (<a href="5-tf.html#SP3_1">§3.1</a>), 5/hf (<a href="5-hf.html#SP6">§6</a>, <a href="5-hf.html#SP9">§9</a>, <a href="5-hf.html#SP29">§29</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>When we eventually want to deal with the <code class="display"><span class="extract">use P</span></code> commands, which call
|
||||
for payloads to be copied into weave, we make good use of the above:
|
||||
|
|
|
@ -193,6 +193,7 @@ some of these fell into disuse in version 2 syntax.
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">PAGEBREAK_CMD</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GRAMMAR_INDEX_CMD</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">FIGURE_CMD</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EMBED_CMD</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">TAG_CMD</span>
|
||||
</pre>
|
||||
<hr class="tocbar">
|
||||
|
|
|
@ -662,6 +662,16 @@ division in the current section.
|
|||
<span class="identifier">code_lcat_for_body</span><span class="plain"> = </span><span class="constant">COMMENT_BODY_LCAT</span><span class="plain">;</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr2</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
|
||||
<span class="identifier">comment_mode</span><span class="plain"> = </span><span class="constant">TRUE</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="identifier">current_paragraph</span><span class="plain">) &&</span>
|
||||
<span class="plain">((</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr2</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">L</span><span class="string">"%(embedded (%C+) video (%c+)%)"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr2</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">L</span><span class="string">"%(embedded (%C+) audio (%c+)%)"</span><span class="plain">)))) {</span>
|
||||
<span class="functiontext">Tags::add_by_name</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_paragraph</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Figures"</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">command_code</span><span class="plain"> = </span><span class="constant">EMBED_CMD</span><span class="plain">;</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">category</span><span class="plain"> = </span><span class="constant">COMMAND_LCAT</span><span class="plain">;</span>
|
||||
<span class="identifier">code_lcat_for_body</span><span class="plain"> = </span><span class="constant">COMMENT_BODY_LCAT</span><span class="plain">;</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr2</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">text_operand2</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr2</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
|
||||
<span class="identifier">comment_mode</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="functiontext">Main::error_in_web</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"unknown bracketed annotation"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -459,7 +459,7 @@ tangled for.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Reader::woven_folder is used in 1/ptt (<a href="1-ptt.html#SP7">§7</a>), 3/ts (<a href="3-ts.html#SP2_2">§2.2</a>), 3/ti (<a href="3-ti.html#SP5_4">§5.4</a>), 5/hf (<a href="5-hf.html#SP28">§28</a>).</p>
|
||||
<p class="endnote">The function Reader::woven_folder is used in 1/ptt (<a href="1-ptt.html#SP7">§7</a>), 3/ts (<a href="3-ts.html#SP2_2">§2.2</a>), 3/ti (<a href="3-ti.html#SP5_4">§5.4</a>), 5/hf (<a href="5-hf.html#SP29">§29</a>).</p>
|
||||
|
||||
<p class="endnote">The function Reader::tangled_folder is used in 1/pc (<a href="1-pc.html#SP7_4_2">§7.4.2</a>), 3/tt (<a href="3-tt.html#SP1_2">§1.2</a>), 4/is (<a href="4-is.html#SP13">§13</a>).</p>
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ to call the fuller indexing service if need be, using <code class="display"><spa
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Indexer::cover_sheet_maker is used in <a href="#SP2_1_1">§2.1.1</a>, 3/tw (<a href="3-tw.html#SP1_2">§1.2</a>, <a href="3-tw.html#SP1_4">§1.4</a>), 5/hf (<a href="5-hf.html#SP6">§6</a>, <a href="5-hf.html#SP26">§26</a>).</p>
|
||||
<p class="endnote">The function Indexer::cover_sheet_maker is used in <a href="#SP2_1_1">§2.1.1</a>, 3/tw (<a href="3-tw.html#SP1_2">§1.2</a>, <a href="3-tw.html#SP1_4">§1.4</a>), 5/hf (<a href="5-hf.html#SP6">§6</a>, <a href="5-hf.html#SP27">§27</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b>The cover-sheet-maker has the ability to weave only the top half, or only
|
||||
the bottom half, of the template; they are divided by the marker <code class="display"><span class="extract">[[Code]]</span></code>.
|
||||
|
@ -353,7 +353,7 @@ being accessed directly.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Indexer::run is used in <a href="#SP2_1_3">§2.1.3</a>, <a href="#SP3">§3</a>, 3/ts (<a href="3-ts.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Indexer::run is used in <a href="#SP2_1_3">§2.1.3</a>, <a href="#SP3">§3</a>, 3/ts (<a href="3-ts.html#SP3">§3</a>), 5/hf (<a href="5-hf.html#SP17">§17</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Make any necessary substitutions to turn tl into final output</span> <span class="cwebmacronumber">5.1</span>> =
|
||||
|
|
|
@ -310,6 +310,7 @@ at us; but we don't weave them into the output, that's for sure.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="element">command_code</span><span class="plain"> == </span><span class="constant">PAGEBREAK_CMD</span><span class="plain">) </span><span class="functiontext">Formats::pagebreak</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="element">command_code</span><span class="plain"> == </span><span class="constant">GRAMMAR_INDEX_CMD</span><span class="plain">) </span><span class="functiontext">InCSupport::weave_grammar_index</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="element">command_code</span><span class="plain"> == </span><span class="constant">FIGURE_CMD</span><span class="plain">) </span><<span class="cwebmacro">Weave a figure</span> <span class="cwebmacronumber">1.3.3.1.2.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="element">command_code</span><span class="plain"> == </span><span class="constant">EMBED_CMD</span><span class="plain">) </span><<span class="cwebmacro">Embed some Internet material</span> <span class="cwebmacronumber">1.3.3.1.2.2</span>><span class="plain">;</span>
|
||||
<span class="comment"> Otherwise assume it was a tangler command, and ignore it here</span>
|
||||
<span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -354,6 +355,19 @@ at us; but we don't weave them into the output, that's for sure.
|
|||
|
||||
<p class="endnote">This code is used in <a href="#SP1_3_3_1_2">§1.3.3.1.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_3_3_1_2_2"></a><b>§1.3.3.1.2.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Embed some Internet material</span> <span class="cwebmacronumber">1.3.3.1.2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">Formats::embed</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-></span><span class="element">text_operand</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-></span><span class="element">text_operand2</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP1_3_3_1_2">§1.3.3.1.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_3_3_1_3"></a><b>§1.3.3.1.3. Headings. </b>The purpose is set with a little heading. Its operand is that part of
|
||||
the purpose-text which is on the opening line; the rest follows on
|
||||
subsequent lines until the next blank.
|
||||
|
|
343
docs/inweb/4-saf.html
Normal file
343
docs/inweb/4-saf.html
Normal file
|
@ -0,0 +1,343 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Structures and Functions</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">
|
||||
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<nav role="navigation">
|
||||
<h1><a href="../webs.html">Sources</a></h1>
|
||||
<ul>
|
||||
<li><a href="../inweb/index.html">inweb</a></li>
|
||||
</ul>
|
||||
<h2>Foundation</h2>
|
||||
<ul>
|
||||
<li><a href="../foundation-module/index.html">foundation-module</a></li>
|
||||
<li><a href="../foundation-test/index.html">foundation-test</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of 'Structures and Functions' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Structures and Functions</b></li></ul><p class="purpose">Basic support for languages to recognise structure and function declarations.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP6">§6. Functions</a></li><li><a href="#SP8">§8. Cataloguing</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>For each <code class="display"><span class="extract">typedef struct</span></code> we find, we will make one of these:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">c_structure</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">structure_name</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">tangled</span><span class="plain">; </span><span class="comment"> whether the structure definition has been tangled out</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">structure_header_at</span><span class="plain">; </span><span class="comment"> opening line of <code class="display"><span class="extract">typedef</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">typedef_ends</span><span class="plain">; </span><span class="comment"> closing line, where <code class="display"><span class="extract">}</span></code> appears</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">incorporates</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">c_structure</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">elements</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">structure_element</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">next_cst_alphabetically</span><span class="plain">;</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">c_structure</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure c_structure is accessed in 3/tw, 4/cl and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">first_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="functiontext">Structures::new_struct</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</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">c_structure</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">c_structure</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Initialise the C structure structure</span> <span class="cwebmacronumber">2.1</span>><span class="plain">;</span>
|
||||
<span class="functiontext">Analyser::mark_reserved_word_for_section</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain">, </span><span class="constant">RESERVED_COLOUR</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Add this to the lists for its web and its paragraph</span> <span class="cwebmacronumber">2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Insertion-sort this into the alphabetical list of all structures found</span> <span class="cwebmacronumber">2.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Structures::new_struct is used in 4/cl (<a href="4-cl.html#SP2_2">§2.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_1"></a><b>§2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Initialise the C structure structure</span> <span class="cwebmacronumber">2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">structure_header_at</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">tangled</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">typedef_ends</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">incorporates</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">c_structure</span><span class="plain">);</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">elements</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">structure_element</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add this to the lists for its web and its paragraph</span> <span class="cwebmacronumber">2.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">c_structure</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-></span><span class="element">c_structures</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">c_structure</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_paragraph</span><span class="plain">-></span><span class="element">structures</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_3"></a><b>§2.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Insertion-sort this into the alphabetical list of all structures found</span> <span class="cwebmacronumber">2.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">next_cst_alphabetically</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="identifier">first_cst_alphabetically</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">first_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">placed</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">last</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">seq</span><span class="plain"> = </span><span class="identifier">first_cst_alphabetically</span><span class="plain">; </span><span class="identifier">seq</span><span class="plain">;</span>
|
||||
<span class="identifier">seq</span><span class="plain"> = </span><span class="identifier">seq</span><span class="plain">-></span><span class="identifier">next_cst_alphabetically</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::cmp</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain">, </span><span class="identifier">seq</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain">) < </span><span class="constant">0</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">seq</span><span class="plain"> == </span><span class="identifier">first_cst_alphabetically</span><span class="plain">) {</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">next_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">first_cst_alphabetically</span><span class="plain">;</span>
|
||||
<span class="identifier">first_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">last</span><span class="plain">-></span><span class="element">next_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="identifier">str</span><span class="plain">-></span><span class="element">next_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">seq</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">placed</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">last</span><span class="plain"> = </span><span class="identifier">seq</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">placed</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span><span class="identifier">last</span><span class="plain">-></span><span class="element">next_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>A language can also create an instance of <code class="display"><span class="extract">structure_element</span></code> to record the
|
||||
existence of the element <code class="display"><span class="extract">val</span></code>, and add it to the linked list of elements of
|
||||
the structure being defined.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">In InC, only, certain element names used often in Inform's source code are
|
||||
given mildly special treatment. This doesn't amount to much. <code class="display"><span class="extract">allow_sharing</span></code>
|
||||
has no effect on tangling, so it doesn't change the program. It simply
|
||||
affects the reports in the woven code about where structures are used.
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">structure_element</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">element_name</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">element_created_at</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allow_sharing</span><span class="plain">;</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">structure_element</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure structure_element is accessed in 3/tw, 4/cl and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">structure_element</span><span class="plain"> *</span><span class="functiontext">Structures::new_element</span><span class="plain">(</span><span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">elname</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="functiontext">Analyser::mark_reserved_word_for_section</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">, </span><span class="identifier">elname</span><span class="plain">, </span><span class="constant">ELEMENT_COLOUR</span><span class="plain">);</span>
|
||||
<span class="reserved">structure_element</span><span class="plain"> *</span><span class="identifier">elt</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">structure_element</span><span class="plain">);</span>
|
||||
<span class="identifier">elt</span><span class="plain">-></span><span class="element">element_name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">elname</span><span class="plain">);</span>
|
||||
<span class="identifier">elt</span><span class="plain">-></span><span class="element">allow_sharing</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">elt</span><span class="plain">-></span><span class="element">element_created_at</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="functiontext">LanguageMethods::share_element</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">-></span><span class="element">sect_language</span><span class="plain">, </span><span class="identifier">elname</span><span class="plain">))</span>
|
||||
<span class="identifier">elt</span><span class="plain">-></span><span class="element">allow_sharing</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">elt</span><span class="plain">, </span><span class="reserved">structure_element</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-></span><span class="element">elements</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">elt</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Structures::new_element is used in 4/cl (<a href="4-cl.html#SP2_2_1">§2.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="functiontext">Structures::find_structure</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">c_structure</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-></span><span class="element">c_structures</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain">))</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Structures::find_structure appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Functions. </b>Each function definition found results in one of these structures being made:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">function</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">function_name</span><span class="plain">; </span><span class="comment"> e.g., <code class="display"><span class="extract">"cultivate"</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">function_type</span><span class="plain">; </span><span class="comment"> e.g., <code class="display"><span class="extract">"tree *"</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">function_arguments</span><span class="plain">; </span><span class="comment"> e.g., <code class="display"><span class="extract">"int rainfall)"</span></code>: note <code class="display"><span class="extract">)</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">function_header_at</span><span class="plain">; </span><span class="comment"> where the first line of the header begins</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">within_namespace</span><span class="plain">; </span><span class="comment"> written using InC namespace dividers</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">called_from_other_sections</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">call_freely</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_conditionals</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">within_conditionals</span><span class="plain">[</span><span class="constant">MAX_CONDITIONAL_COMPILATION_STACK</span><span class="plain">];</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">function</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure function is accessed in 3/tw, 4/cl and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">function</span><span class="plain"> *</span><span class="functiontext">Structures::new_function</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fname</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="functiontext">Analyser::mark_reserved_word_for_section</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">, </span><span class="identifier">fname</span><span class="plain">, </span><span class="constant">FUNCTION_COLOUR</span><span class="plain">);</span>
|
||||
<span class="reserved">function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">function</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Initialise the function structure</span> <span class="cwebmacronumber">7.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add the function to its paragraph and line</span> <span class="cwebmacronumber">7.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">-></span><span class="element">sect_language</span><span class="plain">-></span><span class="element">supports_namespaces</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Check that the function has its namespace correctly declared</span> <span class="cwebmacronumber">7.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">fn</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Structures::new_function is used in 4/cl (<a href="4-cl.html#SP2_4_2">§2.4.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b>Note that we take a snapshot of the conditional compilation stack as
|
||||
part of the function structure. We'll need it when predeclaring the function.
|
||||
</p>
|
||||
|
||||
|
||||
<p class="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Initialise the function structure</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">function_name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">);</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">function_arguments</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">function_type</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">within_namespace</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">called_from_other_sections</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">call_freely</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">function_header_at</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="identifier">fn</span><span class="plain">-></span><span class="element">no_conditionals</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_2"></a><b>§7.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Add the function to its paragraph and line</span> <span class="cwebmacronumber">7.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_paragraph</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) </span><span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">function</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-></span><span class="element">functions</span><span class="plain">);</span>
|
||||
<span class="identifier">L</span><span class="plain">-></span><span class="element">function_defined</span><span class="plain"> = </span><span class="identifier">fn</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_3"></a><b>§7.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Check that the function has its namespace correctly declared</span> <span class="cwebmacronumber">7.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">declared_namespace</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ambient_namespace</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain">-></span><span class="element">sect_namespace</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">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">fname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+::)%c*"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">declared_namespace</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">fn</span><span class="plain">-></span><span class="element">within_namespace</span><span class="plain"> = </span><span class="constant">TRUE</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">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"main"</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">ambient_namespace</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Main::"</span><span class="plain">)))</span>
|
||||
<span class="identifier">declared_namespace</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"Main::"</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">declared_namespace</span><span class="plain">, </span><span class="identifier">ambient_namespace</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_paragraph</span><span class="plain">-></span><span class="element">placed_very_early</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">declared_namespace</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">, </span><span class="string">"Function '%S' should have namespace prefix '%S'"</span><span class="plain">,</span>
|
||||
<span class="identifier">fname</span><span class="plain">, </span><span class="identifier">ambient_namespace</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">Str::len</span><span class="plain">(</span><span class="identifier">ambient_namespace</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">, </span><span class="string">"Function '%S' declared in a section with no namespace"</span><span class="plain">,</span>
|
||||
<span class="identifier">fname</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">, </span><span class="string">"Function '%S' declared in a section with the wrong namespace '%S'"</span><span class="plain">,</span>
|
||||
<span class="identifier">fname</span><span class="plain">, </span><span class="identifier">ambient_namespace</span><span class="plain">);</span>
|
||||
<span class="functiontext">Main::error_in_web</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">err_mess</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. Cataloguing. </b>This implements the additional information in the <code class="display"><span class="extract">-structures</span></code> and <code class="display"><span class="extract">-functions</span></code>
|
||||
forms of section catalogue.
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Structures::catalogue</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">int</span><span class="plain"> </span><span class="identifier">functions_too</span><span class="plain">) {</span>
|
||||
<span class="reserved">c_structure</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">c_structure</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">str</span><span class="plain">-></span><span class="element">structure_header_at</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain"> == </span><span class="identifier">S</span><span class="plain">)</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" %S "</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-></span><span class="element">structure_name</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">functions_too</span><span class="plain">) {</span>
|
||||
<span class="reserved">function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">function</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fn</span><span class="plain">-></span><span class="element">function_header_at</span><span class="plain">-></span><span class="element">owning_section</span><span class="plain"> == </span><span class="identifier">S</span><span class="plain">)</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"\n %S"</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">-></span><span class="element">function_name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Structures::catalogue is used in 3/ta (<a href="3-ta.html#SP2">§2</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-pl.html">Back to 'Programming Languages'</a></li><li><a href="4-lm.html">Continue with 'Language Methods'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
<!--Weave of 'Format Methods' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#5">Chapter 5: Formats</a></li><li><b>Format Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various weaving formats offered, such as HTML, ePub, or TeX.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP1">§1. Formats</a></li><li><a href="#SP3">§3. Creation</a></li><li><a href="#SP4">§4. Methods</a></li><li><a href="#SP30">§30. Post-processing</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Formats</a></li><li><a href="#SP3">§3. Creation</a></li><li><a href="#SP4">§4. Methods</a></li><li><a href="#SP31">§31. Post-processing</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Formats. </b>Exactly as in the previous chapter, each format expresses its behaviour
|
||||
through optional method calls.
|
||||
|
@ -61,7 +61,7 @@ through optional method calls.
|
|||
|
||||
<p class="endnote">The function Formats::create_weave_format is used in 5/ptf (<a href="5-ptf.html#SP1">§1</a>), 5/tf (<a href="5-tf.html#SP1_1">§1.1</a>, <a href="5-tf.html#SP1_2">§1.2</a>, <a href="5-tf.html#SP1_3">§1.3</a>), 5/hf (<a href="5-hf.html#SP1_1">§1.1</a>, <a href="5-hf.html#SP1_2">§1.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Formats::find_by_name is used in <a href="#SP32">§32</a>, 1/ptt (<a href="1-ptt.html#SP3_2">§3.2</a>).</p>
|
||||
<p class="endnote">The function Formats::find_by_name is used in <a href="#SP33">§33</a>, 1/ptt (<a href="1-ptt.html#SP3_2">§3.2</a>).</p>
|
||||
|
||||
<p class="endnote">The structure weave_format is accessed in 3/ts and here.</p>
|
||||
|
||||
|
@ -342,7 +342,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::source_fragment is used in <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">The function Formats::source_fragment is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>And this weaves a URL, hyperlinking it where possible.
|
||||
</p>
|
||||
|
@ -368,7 +368,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::url is used in <a href="#SP23_2">§23.2</a>, <a href="#SP23_3_1">§23.3.1</a>, 5/hf (<a href="5-hf.html#SP10_1">§10.1</a>, <a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
<p class="endnote">The function Formats::url is used in <a href="#SP24_2">§24.2</a>, <a href="#SP24_3_1">§24.3.1</a>, 5/hf (<a href="5-hf.html#SP10_1">§10.1</a>, <a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>This method produces the <code class="display"><span class="extract">>> Example</span></code> bits of example source text, really
|
||||
a convenience for Inform 7 code commentary.
|
||||
|
@ -471,7 +471,31 @@ of the web.
|
|||
|
||||
<p class="endnote">The function Formats::figure is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_2_1">§1.3.3.1.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b>This method weaves an angle-bracketed paragraph macro name. <code class="display"><span class="extract">defn</span></code> is set
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b><code class="display"><span class="extract">EMBED_FOR_MTID</span></code> has to embed some Internet-sourced content. <code class="display"><span class="extract">service</span></code>
|
||||
here is something like <code class="display"><span class="extract">YouTube</span></code> or <code class="display"><span class="extract">Soundcloud</span></code>, and <code class="display"><span class="extract">ID</span></code> is whatever code
|
||||
that service uses to identify the video/audio in question.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="definitions">
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">EMBED_FOR_MTID</span>
|
||||
</pre>
|
||||
|
||||
<pre class="display">
|
||||
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">)</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::embed</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">,</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">) {</span>
|
||||
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-></span><span class="element">format</span><span class="plain">;</span>
|
||||
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">service</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::embed is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_2_2">§1.3.3.1.2.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>This method weaves an angle-bracketed paragraph macro name. <code class="display"><span class="extract">defn</span></code> is set
|
||||
if and only if this is the place where the macro is defined — the usual
|
||||
thing is to render some sort of equals sign after it, if so.
|
||||
</p>
|
||||
|
@ -494,7 +518,7 @@ thing is to render some sort of equals sign after it, if so.
|
|||
|
||||
<p class="endnote">The function Formats::para_macro is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_9_6">§1.3.3.1.9.6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b>For many formats, page breaks are meaningless, and in that case this method
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>For many formats, page breaks are meaningless, and in that case this method
|
||||
should not be provided. Inweb uses them only for cosmetic benefit (and rarely
|
||||
at that), so no harm is done if there's no visual indication here.
|
||||
</p>
|
||||
|
@ -516,7 +540,7 @@ at that), so no harm is done if there's no visual indication here.
|
|||
|
||||
<p class="endnote">The function Formats::pagebreak is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_2">§1.3.3.1.2</a>, <a href="3-tw.html#SP1_3_3_1_10_1">§1.3.3.1.10.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b>"Blank line" here might better be called "vertical skip of some kind". The
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b>"Blank line" here might better be called "vertical skip of some kind". The
|
||||
following should render some kind of skip, and may want to take note of whether
|
||||
this happens in commentary or in code: the <code class="display"><span class="extract">in_comment</span></code> flag provides this
|
||||
information.
|
||||
|
@ -540,7 +564,7 @@ information.
|
|||
|
||||
<p class="endnote">The function Formats::blank_line is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_8_2">§1.3.3.1.8.2</a>, <a href="3-tw.html#SP1_3_3_1_9_2">§1.3.3.1.9.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b>Another opportunity for vertical tidying-up. At the beginning of a code
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>Another opportunity for vertical tidying-up. At the beginning of a code
|
||||
line which occurs after a run of <code class="display"><span class="extract">@d</span></code> or <code class="display"><span class="extract">@e</span></code> definitions, this method is
|
||||
called. It can then insert a little vertical gap to separate the code from
|
||||
the definitions.
|
||||
|
@ -563,7 +587,7 @@ the definitions.
|
|||
|
||||
<p class="endnote">The function Formats::after_definitions is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_9">§1.3.3.1.9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b>This method is called when the weaver changes "material" — for example,
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b>This method is called when the weaver changes "material" — for example,
|
||||
from <code class="display"><span class="extract">REGULAR_MATERIAL</span></code> to <code class="display"><span class="extract">CODE_MATERIAL</span></code>. The flag <code class="display"><span class="extract">content</span></code> is set if
|
||||
the line on which this happens contains some content which will then be
|
||||
woven; it will be clear for blank lines, or lines intercepted by the
|
||||
|
@ -590,7 +614,7 @@ weaver and turned into something else (such as list items).
|
|||
|
||||
<p class="endnote">The function Formats::change_material is used in 3/tw (<a href="3-tw.html#SP1_3_3_1_1">§1.3.3.1.1</a>, <a href="3-tw.html#SP1_3_3_1_8_3">§1.3.3.1.8.3</a>, <a href="3-tw.html#SP1_3_3_1_8_4">§1.3.3.1.8.4</a>, <a href="3-tw.html#SP1_3_3_1_9_1">§1.3.3.1.9.1</a>, <a href="3-tw.html#SP1_3_3_2">§1.3.3.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b>This is called on a change of colour. "Colour" is really a shorthand way
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b>This is called on a change of colour. "Colour" is really a shorthand way
|
||||
of saying something more like "style", but seemed less ambiguous. In HTML,
|
||||
this might trigger a change of CSS span style; in plain text, it would do
|
||||
nothing.
|
||||
|
@ -614,7 +638,7 @@ nothing.
|
|||
|
||||
<p class="endnote">The function Formats::change_colour is used in 5/tf (<a href="5-tf.html#SP8_2">§8.2</a>, <a href="5-tf.html#SP15">§15</a>), 5/hf (<a href="5-hf.html#SP10_3">§10.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b>The following takes text, divides it up at stroke-mark boundaries —
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b>The following takes text, divides it up at stroke-mark boundaries —
|
||||
that is, <code class="display"><span class="extract">this is inside</span></code>, this is outside — and sends contiguous pieces
|
||||
of it either to <code class="display"><span class="extract">Formats::source_fragment</span></code> or <code class="display"><span class="extract">Formats::text_fragment</span></code>
|
||||
as appropriate.
|
||||
|
@ -633,13 +657,13 @@ as appropriate.
|
|||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">code_in_comments_notation</span><span class="plain"> =</span>
|
||||
<span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">comments</span><span class="plain">)?(</span><span class="identifier">I</span><span class="string">"Code In Code Comments Notation"</span><span class="plain">):(</span><span class="identifier">I</span><span class="string">"Code In Commentary Notation"</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Split text and code extracts</span> <span class="cwebmacronumber">23.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Split text and code extracts</span> <span class="cwebmacronumber">24.1</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Recognose hyperlinks</span> <span class="cwebmacronumber">23.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Recognose hyperlinks</span> <span class="cwebmacronumber">24.2</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">xref_notation</span><span class="plain"> = </span><span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">,</span>
|
||||
<span class="identifier">I</span><span class="string">"Cross-References Notation"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Recognise cross-references</span> <span class="cwebmacronumber">23.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Recognise cross-references</span> <span class="cwebmacronumber">24.3</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Formats::source_fragment</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
|
||||
|
@ -655,10 +679,10 @@ as appropriate.
|
|||
|
||||
<p class="endnote">The function Formats::text_comment is used in 5/tf (<a href="5-tf.html#SP24_2">§24.2</a>), 5/hf (<a href="5-hf.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Formats::text_r is used in <a href="#SP23_1">§23.1</a>, <a href="#SP23_2">§23.2</a>, <a href="#SP23_3_1">§23.3.1</a>.</p>
|
||||
<p class="endnote">The function Formats::text_r is used in <a href="#SP24_1">§24.1</a>, <a href="#SP24_2">§24.2</a>, <a href="#SP24_3_1">§24.3.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_1"></a><b>§23.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Split text and code extracts</span> <span class="cwebmacronumber">23.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_1"></a><b>§24.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Split text and code extracts</span> <span class="cwebmacronumber">24.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -682,10 +706,10 @@ as appropriate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_2"></a><b>§23.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognose hyperlinks</span> <span class="cwebmacronumber">23.2</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_2"></a><b>§24.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognose hyperlinks</span> <span class="cwebmacronumber">24.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -714,10 +738,10 @@ as appropriate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_3"></a><b>§23.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognise cross-references</span> <span class="cwebmacronumber">23.3</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_3"></a><b>§24.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognise cross-references</span> <span class="cwebmacronumber">24.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -735,7 +759,7 @@ as appropriate.
|
|||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="functiontext">Str::start</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">), </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">));</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<<span class="cwebmacro">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">23.3.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">24.3.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
|
@ -749,10 +773,10 @@ as appropriate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_3_1"></a><b>§23.3.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">23.3.1</span>> =
|
||||
<p class="inwebparagraph"><a id="SP24_3_1"></a><b>§24.3.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">24.3.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -772,9 +796,9 @@ as appropriate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP23_3">§23.3</a>.</p>
|
||||
<p class="endnote">This code is used in <a href="#SP24_3">§24.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b>The following must decide what a reference like "Chapter 3" should refer
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b>The following must decide what a reference like "Chapter 3" should refer
|
||||
to: that is, whether it makes unamgiguous sense, and if so, what URL we should
|
||||
link to, and what the full text of the link might be.
|
||||
</p>
|
||||
|
@ -818,9 +842,9 @@ link to, and what the full text of the link might be.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::resolve_reference_in_weave is used in <a href="#SP23_3_1">§23.3.1</a>, 5/hf (<a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
<p class="endnote">The function Formats::resolve_reference_in_weave is used in <a href="#SP24_3_1">§24.3.1</a>, 5/hf (<a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b><code class="display"><span class="extract">COMMENTARY_TEXT_FOR_MTID</span></code> straightforwardly weaves out a run of contiguous
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b><code class="display"><span class="extract">COMMENTARY_TEXT_FOR_MTID</span></code> straightforwardly weaves out a run of contiguous
|
||||
text. Ordinarily, any formulae written in TeX notation (i.e., in dollar signs
|
||||
used as brackets) will be transmogrified into a plain text paraphrase, but
|
||||
the <code class="display"><span class="extract">PRESERVE_MATH_MODE_FOR_MTID</span></code> can prevent this. (And of course the TeX
|
||||
|
@ -857,9 +881,9 @@ format does, because it wants to keep the formulae in all their glory.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::text_fragment is used in <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">The function Formats::text_fragment is used in <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b>The weaver has special typographical support for the stand-alone Inform
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>The weaver has special typographical support for the stand-alone Inform
|
||||
document of Preform grammar, and this is the hook for it. Most formats
|
||||
should ignore it.
|
||||
</p>
|
||||
|
@ -888,7 +912,7 @@ should ignore it.
|
|||
|
||||
<p class="endnote">The function Formats::preform_document is used in 4/is (<a href="4-is.html#SP16">§16</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>When the weaver adds one of its endnotes — "This function is used in...",
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </b>When the weaver adds one of its endnotes — "This function is used in...",
|
||||
or some such — it calls this method twice, once before the start, with
|
||||
<code class="display"><span class="extract">end</span></code> set to 1, and once after the end, with <code class="display"><span class="extract">end</span></code> set to 2.
|
||||
</p>
|
||||
|
@ -910,7 +934,7 @@ or some such — it calls this method twice, once before the start, with
|
|||
|
||||
<p class="endnote">The function Formats::endnote is used in 2/tgs (<a href="2-tgs.html#SP7">§7</a>, <a href="2-tgs.html#SP7_1">§7.1</a>), 3/tw (<a href="3-tw.html#SP2_1">§2.1</a>, <a href="3-tw.html#SP2_2">§2.2</a>, <a href="3-tw.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </b>"Locale" here isn't used in the Unix sense. It means text which describes
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. </b>"Locale" here isn't used in the Unix sense. It means text which describes
|
||||
a range of numbered paragraphs, from <code class="display"><span class="extract">par1</span></code> to <code class="display"><span class="extract">par2</span></code>, though <code class="display"><span class="extract">par2</span></code> can
|
||||
instead be null, in which case the description is of just one para. (This
|
||||
is often used in endnotes.)
|
||||
|
@ -934,7 +958,7 @@ is often used in endnotes.)
|
|||
|
||||
<p class="endnote">The function Formats::locale is used in 3/tw (<a href="3-tw.html#SP2_1">§2.1</a>, <a href="3-tw.html#SP2_2_1">§2.2.1</a>), 5/ptf (<a href="5-ptf.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. </b>And finally: the bottom of the woven file. The <code class="display"><span class="extract">comment</span></code> is, again, not
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. </b>And finally: the bottom of the woven file. The <code class="display"><span class="extract">comment</span></code> is, again, not
|
||||
intended for human eyes, and will be some sort of "End of weave" remark.
|
||||
</p>
|
||||
|
||||
|
@ -956,7 +980,7 @@ intended for human eyes, and will be some sort of "End of weave" remark.
|
|||
|
||||
<p class="endnote">The function Formats::tail is used in 3/tw (<a href="3-tw.html#SP1_5">§1.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
|
||||
to a TeX file; it's then "post-processing" which will turn this into a PDF.
|
||||
The following method calls allow such two-stage formats to function; in
|
||||
this case, it would be the PDF format which provides the necessary methods
|
||||
|
@ -979,7 +1003,7 @@ to turn TeX into PDF. The important method is this one:
|
|||
|
||||
<p class="endnote">The function Formats::post_process_weave is used in 3/ts (<a href="3-ts.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. </b>Optionally, a fancy report can be printed out, to describe what has been
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </b>Optionally, a fancy report can be printed out, to describe what has been
|
||||
done:
|
||||
</p>
|
||||
|
||||
|
@ -999,7 +1023,7 @@ done:
|
|||
|
||||
<p class="endnote">The function Formats::report_on_post_processing is used in 3/ts (<a href="3-ts.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </b>After post-processing, an index file is sometimes needed. For example, if a
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. </b>After post-processing, an index file is sometimes needed. For example, if a
|
||||
big web is woven to a swarm of PDFs, one for each section, then we also want
|
||||
to make an index page in HTML which provides annotated links to those PDFs.
|
||||
</p>
|
||||
|
@ -1024,7 +1048,7 @@ to make an index page in HTML which provides annotated links to those PDFs.
|
|||
|
||||
<p class="endnote">The function Formats::index_pdfs appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. </b>And in that index file, we may want to substitute in values for placeholder
|
||||
<p class="inwebparagraph"><a id="SP34"></a><b>§34. </b>And in that index file, we may want to substitute in values for placeholder
|
||||
text like <code class="display"><span class="extract">[[PDF Size]]</span></code> in the template file. This is the <code class="display"><span class="extract">detail</span></code>.
|
||||
</p>
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<!--Weave of 'HTML Formats' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#5">Chapter 5: Formats</a></li><li><b>HTML Formats</b></li></ul><p class="purpose">To provide for weaving into HTML and into EPUB books.</p>
|
||||
|
||||
<ul class="toc"><li><a href="#SP2">§2. Current state</a></li><li><a href="#SP6">§6. Methods</a></li><li><a href="#SP28">§28. EPUB-only methods</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP2">§2. Current state</a></li><li><a href="#SP6">§6. Methods</a></li><li><a href="#SP29">§29. EPUB-only methods</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b></p>
|
||||
|
||||
|
@ -89,6 +89,7 @@
|
|||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">ITEM_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::item</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BAR_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::bar</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">FIGURE_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::figure</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::embed</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PARA_MACRO_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::para_macro</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PAGEBREAK_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::pagebreak</span><span class="plain">);</span>
|
||||
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BLANK_LINE_FOR_MTID</span><span class="plain">, </span><span class="functiontext">HTMLFormat::blank_line</span><span class="plain">);</span>
|
||||
|
@ -148,13 +149,13 @@ but in fact that's fine here.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::p is used in <a href="#SP7">§7</a>, <a href="#SP9">§9</a>, <a href="#SP11">§11</a>, <a href="#SP13">§13</a>, <a href="#SP19">§19</a>, <a href="#SP20">§20</a>, <a href="#SP22">§22</a>, <a href="#SP23">§23</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::p is used in <a href="#SP7">§7</a>, <a href="#SP9">§9</a>, <a href="#SP11">§11</a>, <a href="#SP13">§13</a>, <a href="#SP20">§20</a>, <a href="#SP21">§21</a>, <a href="#SP23">§23</a>, <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::cp is used in <a href="#SP4">§4</a>, <a href="#SP7">§7</a>, <a href="#SP13">§13</a>, <a href="#SP22">§22</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::cp is used in <a href="#SP4">§4</a>, <a href="#SP7">§7</a>, <a href="#SP13">§13</a>, <a href="#SP23">§23</a>.</p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::pre is used in <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::pre is used in <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::cpre is used in <a href="#SP4">§4</a>, <a href="#SP20">§20</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::cpre is used in <a href="#SP4">§4</a>, <a href="#SP21">§21</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>Depth 1 means "inside a list entry"; depth 2, "inside an entry of a list
|
||||
which is itself inside a list entry"; and so on.
|
||||
|
@ -203,7 +204,7 @@ which is itself inside a list entry"; and so on.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::exit_current_paragraph is used in <a href="#SP3">§3</a>, <a href="#SP7">§7</a>, <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, <a href="#SP13">§13</a>, <a href="#SP15">§15</a>, <a href="#SP16">§16</a>, <a href="#SP18">§18</a>, <a href="#SP19">§19</a>, <a href="#SP20">§20</a>, <a href="#SP22">§22</a>, <a href="#SP26">§26</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::exit_current_paragraph is used in <a href="#SP3">§3</a>, <a href="#SP7">§7</a>, <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, <a href="#SP13">§13</a>, <a href="#SP15">§15</a>, <a href="#SP16">§16</a>, <a href="#SP17">§17</a>, <a href="#SP19">§19</a>, <a href="#SP20">§20</a>, <a href="#SP21">§21</a>, <a href="#SP23">§23</a>, <a href="#SP27">§27</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>"Breadcrumbs" are the chain of links in a horizontal list at the top of
|
||||
the page, and this drops one.
|
||||
|
@ -662,6 +663,54 @@ the page, and this drops one.
|
|||
|
||||
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::embed</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">) {</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">CH</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"405"</span><span class="plain">;</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">CW</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"720"</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">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+) at (%c+) by (%c+)"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">CW</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</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">CH</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[2]);</span>
|
||||
<span class="identifier">ID</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="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+) at (%c+)"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">CH</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</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">ID</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="functiontext">HTMLFormat::exit_current_paragraph</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">embed_leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">embed_leaf</span><span class="plain">, </span><span class="string">"%S.html"</span><span class="plain">, </span><span class="identifier">service</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="functiontext">Filenames::in_folder</span><span class="plain">(</span>
|
||||
<span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">-></span><span class="element">path_to_web</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Embedding"</span><span class="plain">), </span><span class="identifier">embed_leaf</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
|
||||
<span class="identifier">F</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span>
|
||||
<span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="identifier">path_to_inweb</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Embedding"</span><span class="plain">), </span><span class="identifier">embed_leaf</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">embed_leaf</span><span class="plain">);</span>
|
||||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Tried %f\n"</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">);</span>
|
||||
<span class="functiontext">Main::error_in_web</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"This is not a supported service"</span><span class="plain">, </span><span class="identifier">current_weave_line</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Content ID"</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
|
||||
<span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Content Width"</span><span class="plain">, </span><span class="identifier">CW</span><span class="plain">);</span>
|
||||
<span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Content Height"</span><span class="plain">, </span><span class="identifier">CH</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"center"</span><span class="plain">);</span>
|
||||
<span class="functiontext">Indexer::run</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-></span><span class="element">pattern</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"center"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::embed is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::para_macro</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">) {</span>
|
||||
|
@ -682,7 +731,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::para_macro is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::pagebreak</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
|
||||
|
@ -694,7 +743,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::pagebreak is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::blank_line</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -714,7 +763,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::blank_line is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::change_material</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -790,7 +839,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::change_material is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP21"></a><b>§21. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::change_colour</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -818,7 +867,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::change_colour is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::endnote</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">) {</span>
|
||||
|
@ -835,7 +884,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::endnote is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::commentary_text</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -863,7 +912,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::commentary_text is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::locale</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -884,7 +933,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::locale is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::section_URL</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
|
||||
|
@ -922,11 +971,11 @@ the page, and this drops one.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::section_URL is used in 5/fm (<a href="5-fm.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function HTMLFormat::section_URL is used in 5/fm (<a href="5-fm.html#SP25">§25</a>).</p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::xref is used in <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, <a href="#SP24">§24</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::xref is used in <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, <a href="#SP25">§25</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::tail</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
|
||||
|
@ -980,7 +1029,7 @@ the page, and this drops one.
|
|||
|
||||
<p class="endnote">The function HTMLFormat::tail is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::sref</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
|
||||
|
@ -996,9 +1045,9 @@ the page, and this drops one.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::sref is used in <a href="#SP26">§26</a>.</p>
|
||||
<p class="endnote">The function HTMLFormat::sref is used in <a href="#SP27">§27</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. EPUB-only methods. </b></p>
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. EPUB-only methods. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">HTMLFormat::begin_weaving_EPUB</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
|
||||
|
|
|
@ -857,7 +857,7 @@ To do this, the weaver calls the following.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function TeX::remove_math_mode is used in 5/fm (<a href="5-fm.html#SP25">§25</a>).</p>
|
||||
<p class="endnote">The function TeX::remove_math_mode is used in 5/fm (<a href="5-fm.html#SP26">§26</a>).</p>
|
||||
|
||||
<p class="endnote">The function TeX::remove_math_mode_range is used in <a href="#SP28_1">§28.1</a>, <a href="#SP28_2">§28.2</a>, <a href="#SP28_3">§28.3</a>.</p>
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<!--Weave of 'How to Write a Web' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</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">§1. The title of a section</a></li><li><a href="#SP2">§2. Paragraphing</a></li><li><a href="#SP6">§6. Conditional compilation</a></li><li><a href="#SP7">§7. Commentary</a></li><li><a href="#SP12">§12. Code samples and other extraneous matter</a></li><li><a href="#SP13">§13. Links</a></li><li><a href="#SP14">§14. Cross-references</a></li><li><a href="#SP15">§15. Figures</a></li><li><a href="#SP16">§16. Mathematics notation</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. The title of a section</a></li><li><a href="#SP2">§2. Paragraphing</a></li><li><a href="#SP6">§6. Conditional compilation</a></li><li><a href="#SP7">§7. Commentary</a></li><li><a href="#SP12">§12. Code samples and other extraneous matter</a></li><li><a href="#SP13">§13. Links</a></li><li><a href="#SP14">§14. Cross-references</a></li><li><a href="#SP15">§15. Figures</a></li><li><a href="#SP16">§16. Embedded video</a></li><li><a href="#SP19">§19. Mathematics notation</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§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
|
||||
|
@ -655,7 +655,71 @@ 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="SP16"></a><b>§16. Mathematics notation. </b>Mathematical formulae can be typed in TeX notation between dollar signs,
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. Embedded video. </b>This makes sense only for some HTML-like weave formats, but we can also
|
||||
cause videos to be embedded:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="functiontext">= (embedded YouTube video GR3aImy7dWw)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">With results like so:
|
||||
</p>
|
||||
|
||||
<center><iframe width="720" height="405" src="https://www.youtube.com/embed/GR3aImy7dWw" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||
|
||||
</center>
|
||||
<p class="inwebparagraph">The YouTube ID number <code class="display"><span class="extract">GR3aImy7dWw</span></code> can be read from its Share URL, which in
|
||||
this case was <code class="display"><span class="extract">https://youtu.be/GR3aImy7dWw</span></code>.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Similarly for Vimeo:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="functiontext">= (embedded Vimeo video 204519)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">With results like so:
|
||||
</p>
|
||||
|
||||
<center><iframe src="https://player.vimeo.com/video/204519" width="720" height="405" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
||||
|
||||
</center>
|
||||
<p class="inwebparagraph">For audio, you may like to try SoundCloud:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="functiontext">= (embedded SoundCloud audio 42803139)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">With results like so:
|
||||
</p>
|
||||
|
||||
<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="SP17"></a><b>§17. </b>Adding width and height is straightforward; by default the dimensions are
|
||||
720 by 405.
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="functiontext">= (embedded Vimeo video 204519 at 400 by 300)</span>
|
||||
<span class="functiontext">= (embedded SoundCloud audio 42803139 at 200)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">The latter sets just the height (of the displayed waveform, that is —
|
||||
arguably music has width and not height, but SoundCloud thinks otherwise).
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP18"></a><b>§18. </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"><iframe></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
|
||||
web; this overrides the ones built in. If your service is, say, <code class="display"><span class="extract">WebTubeo</span></code>,
|
||||
then the file would be <code class="display"><span class="extract">W/Embedding/WebTubeo.html</span></code>.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP19"></a><b>§19. Mathematics notation. </b>Mathematical formulae can be typed in TeX notation between dollar signs,
|
||||
as usual for TeX formulae. This can of course only really be rendered if
|
||||
the weave is to TeX, but a few very approximate attempts are made by Inweb
|
||||
so that the HTML version may also make sense. For example, <code class="display"><span class="extract">$x \leq y$</span></code> would
|
||||
|
|
BIN
docs/inweb/mars.jpg
Normal file
BIN
docs/inweb/mars.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 139 KiB |
Loading…
Reference in a new issue