2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2020-04-14 19:56:54 +03:00
< title > Numbered Words< / title >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Breadcrumbs.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-03-17 14:40:57 +02:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-05-03 03:01:21 +03:00
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Contents.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Progress.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Navigation.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Fonts.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Base.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-05-03 03:01:21 +03:00
< script >
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
< / script >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Popups.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
< link href = "../docs-assets/Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2019-03-17 14:40:57 +02:00
< / head >
2020-05-03 03:01:21 +03:00
< body class = "commentary-font" >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2020-04-14 19:56:54 +03:00
< h1 > < a href = "../index.html" >
2020-05-03 18:34:53 +03:00
< img src = "../docs-assets/Inform.png" height = 72" >
2020-04-14 19:56:54 +03:00
< / a > < / h1 >
2022-04-04 20:31:44 +03:00
< ul > < li > < a href = "../index.html" > home< / a > < / li >
< / ul > < h2 > Compiler< / h2 > < ul >
< li > < a href = "../structure.html" > structure< / a > < / li >
< li > < a href = "../inbuildn.html" > inbuild< / a > < / li >
< li > < a href = "../inform7n.html" > inform7< / a > < / li >
< li > < a href = "../intern.html" > inter< / a > < / li >
< li > < a href = "../services.html" > services< / a > < / li >
< / ul > < h2 > Other Tools< / h2 > < ul >
< li > < a href = "../inblorbn.html" > inblorb< / a > < / li >
< li > < a href = "../indocn.html" > indoc< / a > < / li >
< li > < a href = "../inform6.html" > inform6< / a > < / li >
< li > < a href = "../inpolicyn.html" > inpolicy< / a > < / li >
< li > < a href = "../inrtpsn.html" > inrtps< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../extensions.html" > extensions and kits< / a > < / li >
2022-04-04 20:31:44 +03:00
< / ul > < h2 > Repository< / h2 > < ul >
< li > < a href = "https://github.com/ganelson/inform" > < img src = "../docs-assets/github.png" height = 18 > github< / a > < / li >
< / ul > < h2 > Related Projects< / h2 > < ul >
< li > < a href = "../../../inweb/docs/index.html" > inweb< / a > < / li >
< li > < a href = "../../../intest/docs/index.html" > intest< / a > < / li >
2020-03-19 02:11:25 +02:00
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2020-05-03 03:01:21 +03:00
<!-- Weave of 'Numbered Words' generated by Inweb -->
< div class = "breadcrumbs" >
2022-04-04 20:31:44 +03:00
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../services.html" > Services< / a > < / li > < li > < a href = "index.html" > words< / a > < / li > < li > < a href = "index.html#2" > Chapter 2: Words in Isolation< / a > < / li > < li > < b > Numbered Words< / b > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< p class = "purpose" > Some utilities for handling single words referred to by number.< / p >
2019-03-17 14:40:57 +02:00
2020-05-13 01:33:17 +03:00
< ul class = "toc" > < li > < a href = "2-nw.html#SP1" > § 1. Comparisons< / a > < / li > < li > < a href = "2-nw.html#SP3" > § 3. Correct use of text substitutions< / a > < / li > < li > < a href = "2-nw.html#SP4" > § 4. Casing and sentence division< / a > < / li > < li > < a href = "2-nw.html#SP7" > § 7. Dequoting literal text< / a > < / li > < li > < a href = "2-nw.html#SP8" > § 8. Dictionary words< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. Comparisons. < / b > Comparison of the word at a given numbered position against some known
2019-03-17 14:40:57 +02:00
word, say "rulebook", must be done very quickly. The whole point of the
vocabulary bank identifying each distinct word was to enable this to be
done by a single comparison of pointers: and to avoid the overhead of a
function call, we perform this with macros.
< / p >
2020-08-09 20:39:31 +03:00
< pre class = "definitions code-font" > < span class = "definition-keyword" > define< / span > < span class = "identifier-syntax" > compare_word< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > voc< / span > < span class = "plain-syntax" > ) (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > ) == (< / span > < span class = "identifier-syntax" > voc< / span > < span class = "plain-syntax" > ))< / span >
< span class = "definition-keyword" > define< / span > < span class = "identifier-syntax" > compare_words< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w1< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > w2< / span > < span class = "plain-syntax" > ) (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w1< / span > < span class = "plain-syntax" > ) == < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w2< / span > < span class = "plain-syntax" > ))< / span >
< span class = "definition-keyword" > define< / span > < span class = "identifier-syntax" > compare_words_cs< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w1< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > w2< / span > < span class = "plain-syntax" > ) (< / span > < span class = "identifier-syntax" > Wide::cmp< / span > < span class = "plain-syntax" > (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w1< / span > < span class = "plain-syntax" > ), < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w2< / span > < span class = "plain-syntax" > )) == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > )< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. < / b > We can also, more slowly, perform a direct string comparison. If carried
2019-03-17 14:40:57 +02:00
out on the original, raw, text, this will be case sensitive — which is
usually wrong for Inform purposes. On the treated text, however, we are
comparing a case-normalised version of the original word, which is likely
2020-05-03 03:01:21 +03:00
to be safely case insensitive comparison, provided that the content of < span class = "extract" > < span class = "extract-syntax" > t< / span > < / span >
2019-03-17 14:40:57 +02:00
is also normalised.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-05-17 02:20:21 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::compare_by_strcmp< / span > < button class = "popup" onclick = "togglePopup('usagePopup1')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup1" > Usage of < span class = "code-font" > < span class = "function-syntax" > Word::compare_by_strcmp< / span > < / span > :< br / > Basic Nonterminals - < a href = "4-bn.html#SP8" > § 8< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wide::cmp< / span > < span class = "plain-syntax" > (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::compare_raw_by_strcmp< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wide::cmp< / span > < span class = "plain-syntax" > (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > w< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. Correct use of text substitutions. < / b > If a "word" is going to be quoted literal text, then it has to use the
2020-05-03 03:01:21 +03:00
characters < span class = "extract" > < span class = "extract-syntax" > [< / span > < / span > and < span class = "extract" > < span class = "extract-syntax" > ]< / span > < / span > in a matched way, and without nesting them. The
2019-03-17 14:40:57 +02:00
following verifies that.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > These rules are quite strict. It could be argued that nested brackets should be
2019-03-17 14:40:57 +02:00
allowed, allowing comments in text substitutions, but the result would be hard
to read and tricky for the user interface applications to syntax-colour.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::well_formed_text_routine< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NOT_APPLICABLE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > =0; < / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] != < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ++) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] == < / span > < span class = "constant-syntax" > TEXT_SUBSTITUTION_BEGIN< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] == < / span > < span class = "constant-syntax" > TEXT_SUBSTITUTION_END< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > != < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NOT_APPLICABLE< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > escaped< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-05-12 12:00:53 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::perhaps_ill_formed_text_routine< / span > < button class = "popup" onclick = "togglePopup('usagePopup2')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup2" > Usage of < span class = "code-font" > < span class = "function-syntax" > Word::perhaps_ill_formed_text_routine< / span > < / span > :< br / > Vocabulary - < a href = "2-vcb.html#SP15" > § 15< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > =0; < / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] != < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ++) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] == < / span > < span class = "constant-syntax" > TEXT_SUBSTITUTION_BEGIN< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > fw< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] == < / span > < span class = "constant-syntax" > TEXT_SUBSTITUTION_END< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. Casing and sentence division. < / b > Casing is only sometimes informative in English: for the first word in
2019-03-17 14:40:57 +02:00
a sentence, we expect to find an upper-case letter, so that there is no
easy way to tell the name of a person or institution from a common noun.
But in other cases an upper case initial letter is unexpected, and can
tell us something.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-09 20:39:31 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::unexpectedly_upper_case< / span > < button class = "popup" onclick = "togglePopup('usagePopup3')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup3" > Usage of < span class = "code-font" > < span class = "function-syntax" > Word::unexpectedly_upper_case< / span > < / span > :< br / > Word Assemblages - < a href = "2-wa.html#SP10" > § 10< / a > < br / > Preform - < a href = "4-prf.html#SP3" > § 3< / a > < br / > Basic Nonterminals - < a href = "4-bn.html#SP3" > § 3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > < 1) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > compare_word< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > -1, < / span > < span class = "identifier-syntax" > FULLSTOP_V< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > compare_word< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > -1, < / span > < span class = "identifier-syntax" > PARBREAK_V< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > compare_word< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > -1, < / span > < span class = "identifier-syntax" > COLON_V< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > isupper< / span > < span class = "plain-syntax" > (*(< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > )))) {< / span >
2020-05-13 01:33:17 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "2-nw.html#SP6" class = "function-link" > < span class = "function-syntax" > Word::text_ending_sentence< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > -1)) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. < / b > Is the word at < span class = "extract" > < span class = "extract-syntax" > wn< / span > < / span > in single quotes? Count the number at the ends.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::singly_quoted< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > < 1) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > qc< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > qc< / span > < span class = "plain-syntax" > ++;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) > < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > )-1] == < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > qc< / span > < span class = "plain-syntax" > ++;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > qc< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. < / b > Does the word at < span class = "extract" > < span class = "extract-syntax" > wn< / span > < / span > appear to be a piece of quoted text which, because
2019-03-17 14:40:57 +02:00
it ends with punctuation, may also end the sentence which quotes it?
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-05-13 01:33:17 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::text_ending_sentence< / span > < button class = "popup" onclick = "togglePopup('usagePopup4')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup4" > Usage of < span class = "code-font" > < span class = "function-syntax" > Word::text_ending_sentence< / span > < / span > :< br / > < a href = "2-nw.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] != < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > += < / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) - < / span > < span class = "constant-syntax" > 2< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '.'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '?'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '!'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > --;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '.'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > ')'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '?'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > ')'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '!'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > ')'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '.'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '?'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [0] == < / span > < span class = "character-syntax" > '!'< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [2] == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. Dequoting literal text. < / b > A utility for stripping double-quotes from literal text, along with
2019-03-17 14:40:57 +02:00
initial or trailing spaces inside those quotes.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::dequote< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > previous_text< / span > < span class = "plain-syntax" > = < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > previous_text< / span > < span class = "plain-syntax" > [0] != < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::set_word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > , < / span > < a href = "3-lxr.html#SP15" class = "function-link" > < span class = "function-syntax" > Lexer::copy_to_memory< / span > < / a > < span class = "plain-syntax" > (< / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::word_raw_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > )));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > previous_text< / span > < span class = "plain-syntax" > + < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > (*(< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > ) == < / span > < span class = "character-syntax" > ' '< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > ++;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > ) > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (*(< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > +< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > )-1) == < / span > < span class = "character-syntax" > '"'< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > *(< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > +< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > )-1) = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > ) > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) & & < / span >
< span class = "plain-syntax" > (*(< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > +< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > )-1) == < / span > < span class = "character-syntax" > ' '< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > *(< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > +< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > )-1) = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
2020-08-09 20:39:31 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-lxr.html#SP19" class = "function-link" > < span class = "function-syntax" > Lexer::set_word_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOGIF< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VOCABULARY< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Dequoting word %d < %w> to < %w> \n"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > previous_text< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > dequoted_text< / span > < span class = "plain-syntax" > );< / span >
2020-05-12 12:00:53 +03:00
< span class = "plain-syntax" > < / span > < a href = "2-vcb.html#SP3" class = "function-link" > < span class = "function-syntax" > Vocabulary::identify_word< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < a href = "2-vcb.html#SP6" class = "function-link" > < span class = "function-syntax" > Vocabulary::set_raw_exemplar_to_text< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wn< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-08-27 17:50:24 +03:00
< p class = "commentary firstcommentary" > < a id = "SP8" class = "paragraph-anchor" > < / a > < b > § 8. Dictionary words. < / b > We take a wide Unicode string and compile an I6 dictionary word constant
2019-03-17 14:40:57 +02:00
to lodge the same text into the virtual machine's parsing dictionary.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > A legal I6 dictionary word can take several forms: it can be in single
quotes, < span class = "extract" > < span class = "extract-syntax" > 'thus'< / span > < / span > , but only if it is more than one character long, since
< span class = "extract" > < span class = "extract-syntax" > 't'< / span > < / span > would be the character value of lower-case T instead. (Or it can be
double-quoted < span class = "extract" > < span class = "extract-syntax" > "so"< / span > < / span > , but only in grammar or properties; this usage is
deprecated and we avoid it.) Within the dictionary word, < span class = "extract" > < span class = "extract-syntax" > ^< / span > < / span > is an escape
character meaning a literal single quote, and the notation < span class = "extract" > < span class = "extract-syntax" > @{xx}< / span > < / span > is an
escape meaning the character with hexadecimal value < span class = "extract" > < span class = "extract-syntax" > xx< / span > < / span > .
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Optionally, a dictionary word can end with a pair of slashes and then,
2019-03-17 14:40:57 +02:00
optionally again, markers to indicate that the word is (for instance) a
2020-05-03 03:01:21 +03:00
plural: thus < span class = "extract" > < span class = "extract-syntax" > 'newts//p'< / span > < / span > . Using no markers, as in < span class = "extract" > < span class = "extract-syntax" > 'toads//'< / span > < / span > , makes a
2019-03-17 14:40:57 +02:00
word equivalent to that without a marker, but avoids the single-letter
problem — so the preferred modern way to write a single-character I6
2020-05-03 03:01:21 +03:00
dictionary word is < span class = "extract" > < span class = "extract-syntax" > 't//'< / span > < / span > , and this is what the following routine does.
(Note the exceptional case where the word consists only of a < span class = "extract" > < span class = "extract-syntax" > '/'< / span > < / span > : here
we cannot write < span class = "extract" > < span class = "extract-syntax" > '///'< / span > < / span > because I6 reads this as < span class = "extract" > < span class = "extract-syntax" > //< / span > < / span > plus an invalid
marker < span class = "extract" > < span class = "extract-syntax" > /< / span > < / span > , and throws an error. We escape the single < span class = "extract" > < span class = "extract-syntax" > /< / span > < / span > to avoid this.
In all other cases there's no need to escape a < span class = "extract" > < span class = "extract-syntax" > /< / span > < / span > .)
2019-03-17 14:40:57 +02:00
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Dictionary words with a literal < span class = "extract" > < span class = "extract-syntax" > ~< / span > < / span > in are, as it happens, not parsable
by the Z-machine, but the code below — employing the < span class = "extract" > < span class = "extract-syntax" > @{7E}< / span > < / span >
2019-03-17 14:40:57 +02:00
escape — is in principle legal, and it does work on Glulx.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > Very long words can safely be truncated since the virtual machines do not
2019-03-17 14:40:57 +02:00
have indefinitely long dictionary resolution anyway, and we had better do
so because I6 rejects overlong text between single quotation marks.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-09 20:39:31 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Word::compile_to_I6_dictionary< / span > < button class = "popup" onclick = "togglePopup('usagePopup5')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup5" > Usage of < span class = "code-font" > < span class = "function-syntax" > Word::compile_to_I6_dictionary< / span > < / span > :< br / > Lexer - < a href = "3-lxr.html#SP19" > § 19< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > OUTPUT_STREAM< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > pluralise< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > n< / span > < span class = "plain-syntax" > = < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "'"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > =0; < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > ] != < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ; < / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > ++) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > switch< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > ]) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "character-syntax" > '/'< / span > < span class = "plain-syntax" > : < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [1] == < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@{2F}"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "/"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "character-syntax" > '\''< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "^"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "character-syntax" > '^'< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@{5E}"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "character-syntax" > '~'< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@{7E}"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "character-syntax" > '@'< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "@{40}"< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > default:< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PUT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > ]);< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > n< / span > < span class = "plain-syntax" > ++ > < / span > < span class = "constant-syntax" > 32< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > break< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pluralise< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "//p"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wide::len< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ) == < / span > < span class = "constant-syntax" > 1< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "//"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > WRITE< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "'"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-03 03:01:21 +03:00
< nav role = "progress" > < div class = "progresscontainer" >
2020-05-13 01:33:17 +03:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "2-wa.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-wtmd.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-wm.html" > 1< / a > < / li > < li class = "progresscurrentchapter" > 2< / li > < li class = "progresssection" > < a href = "2-vcb.html" > vcb< / a > < / li > < li class = "progresssection" > < a href = "2-wa.html" > wa< / a > < / li > < li class = "progresscurrent" > nw< / li > < li class = "progresschapter" > < a href = "3-lxr.html" > 3< / a > < / li > < li class = "progresschapter" > < a href = "4-ap.html" > 4< / a > < / li > < li class = "progressnext" > < a href = "3-lxr.html" > ❯ < / a > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< / nav > <!-- End of weave -->
2019-03-17 14:40:57 +02:00
2020-03-19 02:11:25 +02:00
< / main >
2019-03-17 14:40:57 +02:00
< / body >
< / html >