2019-02-04 22:26:45 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< title > 1/ptt< / title >
< 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 >
2019-02-09 12:33:40 +00:00
<!-- Weave of '2/bd' generated by 7 -->
2019-02-04 22:26:45 +00:00
< ul class = "crumbs" > < li > < a href = "../webs.html" > ★ < / a > < / li > < li > < a href = "index.html" > inweb 7< / a > < / li > < li > < a href = "index.html#2" > Chapter 2: Parsing a Web< / a > < / li > < li > < b > Bibliographic Data< / b > < / li > < / ul > < p class = "purpose" > To manage key-value pairs of bibliographic data, metadata if you like, associated with a given web.< / p >
< ul class = "toc" > < li > < a href = "#SP1" > § 1. Storing data< / a > < / li > < li > < a href = "#SP4" > § 4. Initialising a web< / a > < / li > < li > < a href = "#SP6" > § 6. Reading bibliographic data< / a > < / li > < li > < a href = "#SP7" > § 7. Writing bibliographic data< / a > < / li > < / ul > < hr class = "tocbar" >
< p class = "inwebparagraph" > < a id = "SP1" > < / a > < b > § 1. Storing data. < / b > There are never more than a dozen or so key-value pairs, and it's more
convenient to store them directly here than to use a dictionary.
< / 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" > bibliographic_datum< / 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" > key< / 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" > value< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > declaration_permitted< / span > < span class = "plain" > ; < / span > < span class = "comment" > is the contents page of the web allowed to set this?< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > declaration_mandatory< / span > < span class = "plain" > ; < / span > < span class = "comment" > is it positively required to?< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > on_or_off< / span > < span class = "plain" > ; < / span > < span class = "comment" > boolean: which we handle as the string "On" or "Off"< / span >
< span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > alias< / span > < span class = "plain" > ;< / span >
< span class = "constant" > MEMORY_MANAGEMENT< / span >
< span class = "plain" > } < / span > < span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The structure bibliographic_datum is accessed in 2/dl, 2/dct, 5/ee and here.< / p >
< p class = "inwebparagraph" > < a id = "SP2" > < / a > < b > § 2. < / b > We keep these in linked lists, and here's a convenient way to scan them:
< / p >
< pre class = "definitions" >
< span class = "definitionkeyword" > define< / span > < span class = "identifier" > LOOP_OVER_BIBLIOGRAPHIC_DATA< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > , < / span > < span class = "identifier" > W< / span > < span class = "plain" > )< / span >
< span class = "identifier" > LOOP_OVER_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > , < / span > < span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > , < / span > < span class = "identifier" > W< / span > < span class = "plain" > -< / span > < span class = "element" > > bibliographic_data< / span > < span class = "plain" > )< / span >
< / pre >
< p class = "inwebparagraph" > < a id = "SP3" > < / a > < b > § 3. < / b > The following check the rules:
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > Bibliographic::datum_can_be_declared< / 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" > key< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::look_up_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_permitted< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > Bibliographic::datum_on_or_off< / 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" > key< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::look_up_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > on_or_off< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Bibliographic::datum_can_be_declared is used in 2/tr (< a href = "2-tr.html#SP9_3_2_1" > § 9.3.2.1< / a > ).< / p >
< p class = "endnote" > The function Bibliographic::datum_on_or_off is used in 2/tr (< a href = "2-tr.html#SP9_3_2_1" > § 9.3.2.1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP4" > < / a > < b > § 4. Initialising a web. < / b > Each web has the following slate of data:
< / p >
< pre class = "display" >
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Bibliographic::initialise_data< / 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" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > TEMPORARY_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > IB< / span > < span class = "plain" > );< / span >
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > IB< / span > < span class = "plain" > , < / span > < span class = "string" > "%s"< / span > < span class = "plain" > , < / span > < span class = "constant" > INWEB_BUILD< / span > < span class = "plain" > );< / span >
2019-02-09 12:33:40 +00:00
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Inweb Version"< / span > < span class = "plain" > , < / span > < span class = "identifier" > IB< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_permitted< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > DISCARD_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > IB< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Author"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Language"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Purpose"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Title"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "License"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > alias< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Licence"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ); < / span > < span class = "comment" > alias US to UK spelling< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Short Title"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Capitalized Title"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Build Date"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Build Number"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Version Number"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Version Name"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Index Template"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Preform Language"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Declare Section Usage"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Off"< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > on_or_off< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Namespaces"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Off"< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > on_or_off< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Strict Usage Rules"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Off"< / span > < span class = "plain" > ); < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > on_or_off< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Web Syntax Version"< / 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 Bibliographic::initialise_data is used in 2/tr (< a href = "2-tr.html#SP2" > § 2< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP5" > < / a > < b > § 5. < / b > Once the declarations for a web have been processed, the following is called
to check that all the mandatory declarations have indeed been made:
< / p >
< pre class = "display" >
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Bibliographic::check_required_data< / 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" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_BIBLIOGRAPHIC_DATA< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > , < / span > < span class = "identifier" > W< / span > < span class = "plain" > )< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > ) & & < / span >
< span class = "plain" > (< / span > < span class = "functiontext" > Str::len< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > value< / span > < span class = "plain" > ) == 0))< / span >
< span class = "functiontext" > Errors::fatal_with_text< / span > < span class = "plain" > (< / span >
< span class = "string" > "The Contents.w section does not specify '%S: ...'"< / span > < span class = "plain" > , < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > key< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Bibliographic::check_required_data is used in 2/tr (< a href = "2-tr.html#SP7" > § 7< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP6" > < / a > < b > § 6. Reading bibliographic data. < / b > Key names are case-sensitive.
< / p >
< pre class = "display" >
< span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "functiontext" > Bibliographic::get_datum< / 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" > key< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::look_up_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > value< / 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 >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > Bibliographic::data_exists< / 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" > key< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::look_up_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > bd< / span > < span class = "plain" > ) & & (< / span > < span class = "functiontext" > Str::len< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > value< / span > < span class = "plain" > ) > 0)) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "functiontext" > Bibliographic::look_up_datum< / 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" > key< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_BIBLIOGRAPHIC_DATA< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > , < / span > < span class = "identifier" > W< / 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" > key< / span > < span class = "plain" > , < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > key< / span > < span class = "plain" > )) {< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > alias< / span > < span class = "plain" > ) < / span > < span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > alias< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > ;< / 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 >
2019-03-12 23:32:12 +00:00
< p class = "endnote" > The function Bibliographic::get_datum is used in 1/pc (< a href = "1-pc.html#SP7_2_2_1" > § 7.2.2.1< / a > , < a href = "1-pc.html#SP7_2_3_1" > § 7.2.3.1< / a > ), 2/tr (< a href = "2-tr.html#SP4" > § 4< / a > , < a href = "2-tr.html#SP9_3_1" > § 9.3.1< / a > , < a href = "2-tr.html#SP9_3_3_2_1" > § 9.3.3.2.1< / a > , < a href = "2-tr.html#SP9_2_2_3_1" > § 9.2.2.3.1< / a > ), 3/ti (< a href = "3-ti.html#SP2_1_3" > § 2.1.3< / a > , < a href = "3-ti.html#SP4_1_8_1" > § 4.1.8.1< / a > ), 3/tw (< a href = "3-tw.html#SP1_3_3_1_10_4" > § 1.3.3.1.10.4< / a > ), 3/tt (< a href = "3-tt.html#SP3_2" > § 3.2< / a > ), 4/cl (< a href = "4-cl.html#SP22" > § 22< / a > ), 4/is (< a href = "4-is.html#SP13" > § 13< / a > ), 5/hf (< a href = "5-hf.html#SP9" > § 9< / a > , < a href = "5-hf.html#SP27" > § 27< / a > ).< / p >
2019-02-04 22:26:45 +00:00
< p class = "endnote" > The function Bibliographic::data_exists is used in 1/pc (< a href = "1-pc.html#SP7_2_2_1" > § 7.2.2.1< / a > , < a href = "1-pc.html#SP7_2_3_1" > § 7.2.3.1< / a > ), 1/ptt (< a href = "1-ptt.html#SP3_2" > § 3.2< / a > ), 3/ts (< a href = "3-ts.html#SP3" > § 3< / a > ), 3/ti (< a href = "3-ti.html#SP2_1" > § 2.1< / a > , < a href = "3-ti.html#SP4_1_8" > § 4.1.8< / a > ), 3/tw (< a href = "3-tw.html#SP1_2" > § 1.2< / a > , < a href = "3-tw.html#SP1_4" > § 1.4< / a > ), 4/is (< a href = "4-is.html#SP13" > § 13< / a > ).< / p >
< p class = "endnote" > The function Bibliographic::look_up_datum is used in < a href = "#SP3" > § 3< / a > , < a href = "#SP7" > § 7< / a > , 3/tt (< a href = "3-tt.html#SP3_2" > § 3.2< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP7" > < / a > < b > § 7. Writing bibliographic data. < / b > Note that a key-value pair is created if the key doesn't exist at present,
so this routine never fails.
< / p >
< pre class = "display" >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "functiontext" > Bibliographic::set_datum< / 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" > key< / span > < span class = "plain" > , < / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > val< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > *< / span > < span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Bibliographic::look_up_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) < / span > < < span class = "cwebmacro" > Create a new datum, then< / span > < span class = "cwebmacronumber" > 7.1< / span > >
< span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "functiontext" > Str::copy< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > value< / span > < span class = "plain" > , < / span > < span class = "identifier" > val< / 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" > key< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > "Title"< / span > < span class = "plain" > )) < / span > < < span class = "cwebmacro" > Also set a capitalized form< / span > < span class = "cwebmacronumber" > 7.2< / span > > < span class = "plain" > ;< / span >
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > bd< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Bibliographic::set_datum is used in < a href = "#SP4" > § 4< / a > , < a href = "#SP7_2" > § 7.2< / a > , 1/ptt (< a href = "1-ptt.html#SP3_2" > § 3.2< / a > ), 2/tr (< a href = "2-tr.html#SP9_3_2_1" > § 9.3.2.1< / a > ), 3/ts (< a href = "3-ts.html#SP3" > § 3< / 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#SP25" > § 25< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP7_1" > < / a > < b > § 7.1. < / b > < code class = "display" >
< < span class = "cwebmacrodefn" > Create a new datum, then< / span > < span class = "cwebmacronumber" > 7.1< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > bd< / span > < span class = "plain" > = < / span > < span class = "identifier" > CREATE< / span > < span class = "plain" > (< / span > < span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > key< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Str::duplicate< / span > < span class = "plain" > (< / span > < span class = "identifier" > key< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > value< / span > < span class = "plain" > = < / span > < span class = "functiontext" > Str::duplicate< / span > < span class = "plain" > (< / span > < span class = "identifier" > val< / span > < span class = "plain" > );< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_mandatory< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > declaration_permitted< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > on_or_off< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > bd< / span > < span class = "plain" > -< / span > < span class = "element" > > alias< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > ADD_TO_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > bd< / span > < span class = "plain" > , < / span > < span class = "reserved" > bibliographic_datum< / span > < span class = "plain" > , < / span > < span class = "identifier" > W< / span > < span class = "plain" > -< / span > < span class = "element" > > bibliographic_data< / 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 > A slightly foolish feature, this; if text like "Wuthering Heights" is
written to the "Title" key, then a full-caps "WUTHERING HEIGHTS" is
written to a "Capitalized Title" key. (This enables cover sheets which
want to typeset the title in full caps to do so.)
< / p >
< p class = "macrodefinition" > < code class = "display" >
< < span class = "cwebmacrodefn" > Also set a capitalized form< / span > < span class = "cwebmacronumber" > 7.2< / span > > =
< / code > < / p >
< pre class = "displaydefn" >
< span class = "identifier" > TEMPORARY_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > recapped< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > Str::copy< / span > < span class = "plain" > (< / span > < span class = "identifier" > recapped< / span > < span class = "plain" > , < / span > < span class = "identifier" > val< / span > < span class = "plain" > );< / span >
< span class = "identifier" > LOOP_THROUGH_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > P< / span > < span class = "plain" > , < / span > < span class = "identifier" > recapped< / span > < span class = "plain" > )< / span >
< span class = "functiontext" > Str::put< / span > < span class = "plain" > (< / span > < span class = "identifier" > P< / span > < span class = "plain" > , < / span > < span class = "identifier" > toupper< / span > < span class = "plain" > (< / span > < span class = "functiontext" > Str::get< / span > < span class = "plain" > (< / span > < span class = "identifier" > P< / span > < span class = "plain" > )));< / span >
< span class = "functiontext" > Bibliographic::set_datum< / span > < span class = "plain" > (< / span > < span class = "identifier" > W< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Capitalized Title"< / span > < span class = "plain" > , < / span > < span class = "identifier" > recapped< / span > < span class = "plain" > );< / span >
< span class = "identifier" > DISCARD_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > recapped< / span > < span class = "plain" > );< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > This code is used in < a href = "#SP7" > § 7< / a > .< / p >
2019-03-12 23:32:12 +00:00
< hr class = "tocbar" >
< ul class = "toc" > < li > < i > (This section begins Chapter 2: Parsing a Web.)< / i > < / li > < li > < a href = "2-tr.html" > Continue with 'The Reader'< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-18 11:16:10 +00:00
<!-- End of weave -->
2019-02-04 22:26:45 +00:00
< / body >
< / html >