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 > Properties< / 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" >
2021-02-19 02:21:55 +02:00
< script >
MathJax = {
tex: {
inlineMath: '$', '$'], ['\\(', '\\)'
},
svg: {
fontCache: 'global'
}
};
< / script >
< script type = "text/javascript" id = "MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
< / script >
< script src = "http://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous">< / script >
< script src = "../docs-assets/Bigfoot.js" > < / script >
< link href = "../docs-assets/Bigfoot.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-05-09 01:13:45 +03:00
< link href = "../docs-assets/Preform-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" >
2022-04-28 19:37:28 +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-28 19:37:28 +03:00
< ul > < li > < a href = "../index.html" > home< / a > < / li >
2022-04-04 20:31:44 +03:00
< / 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 >
2022-04-18 17:46:46 +03:00
< li > < a href = "../secrets.html" > secrets< / a > < / li >
2022-04-04 20:31:44 +03:00
< / 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 >
2022-04-08 12:23:23 +03:00
< / ul > < h2 > Resources< / h2 > < ul >
< li > < a href = "../extensions.html" > extensions< / a > < / li >
< li > < a href = "../kits.html" > 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 >
2022-04-28 19:20:06 +03:00
< li > < a href = "../../../inweb/index.html" > inweb< / a > < / li >
< li > < a href = "../../../intest/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 'Properties' generated by Inweb -->
< div class = "breadcrumbs" >
2022-04-28 19:37:28 +03:00
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../inform7n.html" > Inform7< / a > < / li > < li > < a href = "index.html" > knowledge< / a > < / li > < li > < a href = "index.html#3" > Chapter 3: Properties< / a > < / li > < li > < b > Properties< / b > < / li > < / ul > < / div >
2021-02-18 12:26:57 +02:00
< p class = "purpose" > Subjects in the model world have properties associated with them: some either/or, others with values.< / p >
2019-03-17 14:40:57 +02:00
2021-05-11 01:09:06 +03:00
< ul class = "toc" > < li > < a href = "3-prp.html#SP1" > § 1. Introduction< / a > < / li > < li > < a href = "3-prp.html#SP2" > § 2. Creation< / a > < / li > < li > < a href = "3-prp.html#SP4" > § 4. The kinds of properties and their contents< / a > < / li > < li > < a href = "3-prp.html#SP5" > § 5. Nonterminals for bare property names< / a > < / li > < li > < a href = "3-prp.html#SP11" > § 11. Access functions< / a > < / li > < li > < a href = "3-prp.html#SP14" > § 14. Logging< / a > < / li > < li > < a href = "3-prp.html#SP15" > § 15. Inter translation requests< / a > < / li > < li > < a href = "3-prp.html#SP16" > § 16. Compiling property values< / a > < / li > < li > < a href = "3-prp.html#SP18" > § 18. Coincidence< / a > < / li > < li > < a href = "3-prp.html#SP19" > § 19. Translated names of properties< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. Introduction. < / b > Each differently-named property has a < a href = "3-prp.html#SP1" class = "internal" > property< / a > instance. It can be
had by multiple subjects — usually kinds or instances — which is why it
has a list of < span class = "extract" > < span class = "extract-syntax" > permissions< / span > < / span > saying who can have it, and not just one subject;
but it is the same essential property whoever has it, and in particular has
the same kind. A door and a scene could both have the property "style", but
it would have to hold the same kind of value in each case.
2019-03-17 14:40:57 +02:00
< / p >
2021-02-19 02:21:55 +02:00
< p class = "commentary" > Properties come in two types: either/or, such as "open", which has a named
property acting as its negation, "closed"; or valued, such as "carrying
capacity". These have different semantics, and very different run-time
implementations. In this section of code, we deal with what they have in
common.
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" > typedef< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > name< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > name of property< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > has_of_in_the_name< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > looks like a property test, e.g., "point of view"?< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Inter_level_only< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > i.e., does not correspond to an I7 property< / span >
2021-04-30 17:53:28 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > where_created< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > linked_list< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > permissions< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > of < / span > < span class = "extract" > < span class = "extract-syntax" > property_permission< / span > < / span > < span class = "comment-syntax" > : who can have this?< / span >
2020-05-03 03:01:21 +03:00
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "comment-syntax" > exactly one of these must be non-< / span > < span class = "extract" > < span class = "extract-syntax" > NULL< / span > < / span > < span class = "comment-syntax" > :< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > either_or_property_data< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > either_or_data< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > for an either/or property< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > value_property_data< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > value_data< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > for a value property< / span >
2021-02-18 01:32:04 +02:00
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > property_compilation_data< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > compilation_data< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > struct< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > possession_marker< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > pom< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > for temporary use when checking implications< / span >
2020-05-03 03:01:21 +03:00
2020-05-09 15:07:39 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CLASS_DEFINITION< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > ;< / span >
< / pre >
2021-05-24 01:12:40 +03:00
< ul class = "endnotetexts" > < li > The structure property is accessed in 2/ins, 2/nv, 3/ep, 3/epa, 3/vp, 3/spr, 3/msr, 4/vs, 4/pp, 4/cos, 5/pi, 5/tmw, 5/tnt and here.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. Creation. < / b > We have two basic operations: (1) To find the structure corresponding to a
2019-03-17 14:40:57 +02:00
given textual name, creating it afresh if necessary. If we do obtain an
existing one, we need to make absolutely certain that we aren't using an
either/or property where a valued property is wanted, or vice versa.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::obtain< / 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" > Properties::obtain< / span > < / span > :< br / > Either-Or Properties - < a href = "3-ep.html#SP3" > § 3< / a > < br / > Valued Properties - < a href = "3-vp.html#SP2" > § 2< / a > , < a href = "3-vp.html#SP3" > § 3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > valued< / span > < span class = "plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Lexicon::retrieve< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > PROPERTY_MC< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) {< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > = < / span > < a href = "3-prp.html#SP3" class = "function-link" > < span class = "function-syntax" > Properties::create< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > , (< / span > < span class = "identifier-syntax" > valued< / span > < span class = "plain-syntax" > )?< / span > < span class = "identifier-syntax" > FALSE:TRUE< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > valued< / span > < span class = "plain-syntax" > ) < / span > < a href = "3-vp.html#SP5" class = "function-link" > < span class = "function-syntax" > ValueProperties::make_setting_bp< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Rvalues::to_property< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > valued< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > ))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "either/or property made into valued"< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > valued< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ))< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "valued property made into either/or"< / 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" > prn< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. < / b > And: (2) To create a new structure outright.
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" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::create< / 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" > Properties::create< / span > < / span > :< br / > < a href = "3-prp.html#SP2" > § 2< / a > < br / > Either-Or Properties - < a href = "3-ep.html#SP4" > § 4< / a > < br / > Valued Properties - < a href = "3-vp.html#SP4" > § 4< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > package_request< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > using_package< / span > < span class = "plain-syntax" > ,< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > inter_name< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > using_iname< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > eo< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > translation< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Articles::remove_article< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Ensure that the new property name is one we can live with< / span > < span class = "named-paragraph-number" > 3.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_2" class = "named-paragraph-link" > < span class = "named-paragraph" > See if the property name already has a meaning, which may or may not be okay< / span > < span class = "named-paragraph-number" > 3.2< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > CREATE< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_3" class = "named-paragraph-link" > < span class = "named-paragraph" > Initialise the property name structure< / span > < span class = "named-paragraph-number" > 3.3< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_4" class = "named-paragraph-link" > < span class = "named-paragraph" > Does the new property have the same name as a kind of value?< / span > < span class = "named-paragraph-number" > 3.4< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_7" class = "named-paragraph-link" > < span class = "named-paragraph" > Note the significance of this property, if it needs compiler support< / span > < span class = "named-paragraph-number" > 3.7< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wordings::nonempty< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP3_9" class = "named-paragraph-link" > < span class = "named-paragraph" > Register the property name as a noun< / span > < span class = "named-paragraph-number" > 3.9< / span > < / a > < / span >
2021-06-22 22:37:53 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::dont_show_in_index< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
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" > PROPERTY_CREATIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Created property: $Y\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP3_1" class = "paragraph-anchor" > < / a > < b > § 3.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Ensure that the new property name is one we can live with< / span > < span class = "named-paragraph-number" > 3.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > unfortunate< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "function-syntax" > < k-kind> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) & & (< / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > unfortunate< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / span > < span class = "plain-syntax" > (), < / span > < span class = "identifier-syntax" > _p_< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > BelievedImpossible< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "the single word 'value' cannot be used as the name of a property"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "because it has a much broader meaning already. Inform uses the "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "word 'value' to mean any number, time of day, name of something, "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "etcetera: and because of that very broadness, Inform cannot decide "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "what kind of value a simple 'value' might be. So 'A door has "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "a value' is not allowed; but 'A door has a number called the "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "room number' would be fine."< / 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" > Wordings::length< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > ) > < / span > < span class = "identifier-syntax" > MAX_WORDS_IN_ASSEMBLAGE< / span > < span class = "plain-syntax" > -2) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_PropertyNameTooLong< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "this is too long a name for a single property to have"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "and would become unwieldy."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Wordings::truncate< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > MAX_WORDS_IN_ASSEMBLAGE< / span > < span class = "plain-syntax" > -2);< / span >
< span class = "plain-syntax" > }< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < unsuitable-name> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > unfortunate< / 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" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_PropertyNameUnsuitable< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "The sentence %1 seems to create a new property called '%2', but "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "this is not a good name, and I think I must have misread what "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "you wanted. Maybe the punctuation is wrong?"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
2020-05-12 12:00:53 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > unfortunate< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Feeds::feed_C_string< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > L< / span > < span class = "string-syntax" > "problem recovery name"< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP3_2" class = "paragraph-anchor" > < / a > < b > § 3.2. < / b > Name clashes between properties and other constructs are surprisingly often
2019-03-17 14:40:57 +02:00
unproblematic, so we won't reject a name just because it already means
something.
< / p >
2021-02-19 02:21:55 +02:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > See if the property name already has a meaning, which may or may not be okay< / span > < span class = "named-paragraph-number" > 3.2< / span > < / span > < span class = "comment-syntax" > =< / span >
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" >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < s-type-expression-or-value> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / 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" > okay< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > ;< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Specifications::is_kind_like< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > okay< / 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" > Rvalues::is_CONSTANT_construction< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > CON_table_column< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > okay< / 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" > Rvalues::is_CONSTANT_construction< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > CON_property< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > okay< / 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" > Specifications::is_description< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > okay< / 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" > Node::is< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NONLOCAL_VARIABLE_NT< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > okay< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > TRUE< / 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" > okay< / 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" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "Existing meaning: $P"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_source< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_wording< / span > < span class = "plain-syntax" > (2, < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::quote_kind_of< / span > < span class = "plain-syntax" > (3, < / span > < span class = "identifier-syntax" > spec< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_PropertyNameClash< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "You wrote %1, but '%2' is not free to be the name of a fresh "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "property: it already has a meaning (as %3)."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP3_3" class = "paragraph-anchor" > < / a > < b > § 3.3. < / b > So by this point the new property will be allowed.
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2021-02-19 02:21:55 +02:00
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Initialise the property name structure< / span > < span class = "named-paragraph-number" > 3.3< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > ;< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > has_of_in_the_name< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < name-looking-like-property-test> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > );< / span >
2021-04-30 17:53:28 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > where_created< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > ;< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > permissions< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NEW_LINKED_LIST< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property_permission< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > Inter_level_only< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::initialise_pcd< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > using_package< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > using_iname< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > translation< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > eo< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > = < / span > < a href = "3-ep.html#SP2" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::new_eo_data< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > value_data< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > value_data< / span > < span class = "plain-syntax" > = < / span > < a href = "3-vp.html#SP1" class = "function-link" > < span class = "function-syntax" > ValueProperties::new_value_data< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP3_4" class = "paragraph-anchor" > < / a > < b > § 3.4. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Does the new property have the same name as a kind of value?< / span > < span class = "named-paragraph-number" > 3.4< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < k-kind> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > ))< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < a href = "3-vp.html#SP7" class = "function-link" > < span class = "function-syntax" > ValueProperties::make_coincide_with_kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > );< / span >
< / pre >
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP3_5" class = "paragraph-anchor" > < / a > < b > § 3.5. < / b > A few properties have special significance to core Inform, though plugins
are interested in many others:
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_description< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > a text property for holding annotations< / span >
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_specification< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > a pseudo-property for indexing kinds< / span >
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_indefinite_appearance_text< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > quoted text which seems to describe this< / span >
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_variable_initial_value< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > a pseudo-property for initialising variables< / span >
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P_grammatical_gender< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ; < / span > < span class = "comment-syntax" > a value property describing names< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP3_6" class = "paragraph-anchor" > < / a > < b > § 3.6. < / b > The first four of these are recognised by having the names in this Preform
nonterminal; the fifth is detected instead by having the same name as the
kind "grammatical gender" — see < a href = "2-ins.html#SP7" class = "internal" > Instances::make_kind_coincident< / a > .
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < notable-properties> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ::=< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > description< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > |< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > specification< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > |< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > indefinite< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > appearance< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > text< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > |< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > variable< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > initial< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > value< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP3_7" class = "paragraph-anchor" > < / a > < b > § 3.7. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Note the significance of this property, if it needs compiler support< / span > < span class = "named-paragraph-number" > 3.7< / span > < / span > < span class = "Preform-comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < notable-properties> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > switch< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < < r> > < / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > case< / span > < span class = "plain-syntax" > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > P_description< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-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 = "constant-syntax" > 1< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > P_specification< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ;< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < a href = "3-vp.html#SP6" class = "function-link" > < span class = "function-syntax" > ValueProperties::set_kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_text< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::do_not_compile< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-06-22 22:37:53 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::dont_show_in_index< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-17 11:43:05 +02:00
< span class = "plain-syntax" > < / span > < a href = "4-pp.html#SP3" class = "function-link" > < span class = "function-syntax" > PropertyPermissions::grant< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > model_world< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > P_specification< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< 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 = "constant-syntax" > 2< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > P_indefinite_appearance_text< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ;< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < a href = "3-vp.html#SP6" class = "function-link" > < span class = "function-syntax" > ValueProperties::set_kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_text< / span > < span class = "plain-syntax" > );< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::do_not_compile< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-06-22 22:37:53 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::dont_show_in_index< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-17 11:43:05 +02:00
< span class = "plain-syntax" > < / span > < a href = "4-pp.html#SP3" class = "function-link" > < span class = "function-syntax" > PropertyPermissions::grant< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > global_constants< / span > < span class = "plain-syntax" > ,< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > P_indefinite_appearance_text< / 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" > 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 = "constant-syntax" > 3< / span > < span class = "plain-syntax" > : < / span > < span class = "identifier-syntax" > P_variable_initial_value< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ;< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::do_not_compile< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < a href = "3-vp.html#SP6" class = "function-link" > < span class = "function-syntax" > ValueProperties::set_kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > K_value< / span > < span class = "plain-syntax" > );< / span >
2021-06-22 22:37:53 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::dont_show_in_index< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-17 11:43:05 +02:00
< span class = "plain-syntax" > < / span > < a href = "4-pp.html#SP3" class = "function-link" > < span class = "function-syntax" > PropertyPermissions::grant< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > global_variables< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > P_variable_initial_value< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > TRUE< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< 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 >
2021-02-20 01:20:09 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PluginCalls::new_property_notify< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP3_8" class = "paragraph-anchor" > < / a > < b > § 3.8. < / b > To clarify their meanings as nouns, the word "property" can be prepended;
2019-03-17 14:40:57 +02:00
thus "the property open", for instance. We achieve this by registering the
name in both forms. The following grammar is used to construct this prefix.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < property-name-construction> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ::=< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > property< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ...< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP3_9" class = "paragraph-anchor" > < / a > < b > § 3.9. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Register the property name as a noun< / span > < span class = "named-paragraph-number" > 3.9< / span > < / span > < span class = "Preform-comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-06-29 04:17:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Nouns::new_proper_noun< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NEUTER_GENDER< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ADD_TO_LEXICON_NTOPT< / span > < span class = "plain-syntax" > ,< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PROPERTY_MC< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Rvalues::from_property< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > Task::language_of_syntax< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > word_assemblage< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wa< / span > < span class = "plain-syntax" > =< / span >
2020-05-22 11:38:17 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PreformUtilities::merge< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < property-name-construction> < / 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 = "identifier-syntax" > WordAssemblages::from_wording< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > AW< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > WordAssemblages::to_wording< / span > < span class = "plain-syntax" > (& < / span > < span class = "identifier-syntax" > wa< / span > < span class = "plain-syntax" > );< / span >
2020-06-29 04:17:54 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Nouns::new_proper_noun< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > AW< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > NEUTER_GENDER< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > ADD_TO_LEXICON_NTOPT< / span > < span class = "plain-syntax" > ,< / span >
2020-08-26 12:52:50 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PROPERTY_MC< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > Rvalues::from_property< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > Task::language_of_syntax< / span > < span class = "plain-syntax" > ());< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP3" > § 3< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. The kinds of properties and their contents. < / b > For any kind \(K\), "\(K\)-valued property" is also a kind. Note that an either-or
property is treated as if a valued property holding a "truth state".
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::to_kind< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "took kind of null property"< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Kinds::unary_con< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > CON_property< / span > < span class = "plain-syntax" > , < / span > < a href = "3-prp.html#SP4" class = "function-link" > < span class = "function-syntax" > Properties::kind_of_contents< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ));< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > }< / span >
< span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::kind_of_contents< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "took kind of null property"< / 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" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > K_truth_state< / 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" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > value_data< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > property_value_kind< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. Nonterminals for bare property names. < / b > The following are slow nonterminals, but are used only in places where speed
does not matter. They match any property name, optionally preceded by the
definite article; note that they match the name itself, not the confection
made above when the noun "... property" was entered into the lexicon.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < property-name> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > internal< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > Articles::remove_the< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LOOP_OVER< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > )< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Wordings::match< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > Wordings::first_wn< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) + < / span > < span class = "Preform-identifier-syntax" > Wordings::length< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > ) - < / span > < span class = "Preform-constant-syntax" > 1< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. < / b > With two variants, one matching only either-ors and the other only values:
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < either-or-property-name> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > internal< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > Articles::remove_the< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LOOP_OVER< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > )< / span >
2021-02-18 12:26:57 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > either_or_data< / span > < span class = "Preform-plain-syntax" > )< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Wordings::match< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-function-syntax" > < value-property-name> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > internal< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > Articles::remove_the< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LOOP_OVER< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > )< / span >
2021-02-18 12:26:57 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > either_or_data< / span > < span class = "Preform-plain-syntax" > == < / span > < span class = "Preform-identifier-syntax" > NULL< / span > < span class = "Preform-plain-syntax" > )< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Wordings::match< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. < / b > For tiresome internal reasons, we also need a version which is voracious
2019-03-17 14:40:57 +02:00
(and doesn't accept the definite article):
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < property-name-v> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > internal< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > ?< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LOOP_OVER< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > )< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Wordings::starts_with< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > Wordings::first_wn< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) + < / span > < span class = "Preform-identifier-syntax" > Wordings::length< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > ) - < / span > < span class = "Preform-constant-syntax" > 1< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP8" class = "paragraph-anchor" > < / a > < b > § 8. < / b > The trickiest property names are those which syntactically look like a
value of a property and not just a name. For example, a property called
"point of view" could easily be mistaken for the "point" property of something
called "view". The following should match anything with that potential
ambiguity:
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < name-looking-like-property-test> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ::=< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > ***< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > of< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > ***< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP9" class = "paragraph-anchor" > < / a > < b > § 9. < / b > And this internal is exactly like < property-name-v> except that it only
2019-03-17 14:40:57 +02:00
matches ambiguous cases.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < ambiguous-property-name> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > internal< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > ?< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-constant-syntax" > {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LOOP_OVER< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-reserved-syntax" > property< / span > < span class = "Preform-plain-syntax" > )< / span >
2021-02-18 01:32:04 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > has_of_in_the_name< / span > < span class = "Preform-plain-syntax" > ) {< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Wordings::starts_with< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > Wordings::first_wn< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) + < / span > < span class = "Preform-identifier-syntax" > Wordings::length< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > prn< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-element-syntax" > name< / span > < span class = "Preform-plain-syntax" > ) - < / span > < span class = "Preform-constant-syntax" > 1< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP10" class = "paragraph-anchor" > < / a > < b > § 10. < / b > The following slow function, also not used very often, is also convenient for
2019-03-17 14:40:57 +02:00
finding the length of the longest property name at the start of an excerpt.
(The assertion parser uses this to break text like "carrying capacity 20".)
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::match_longest< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / 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" > maxlen< / span > < span class = "plain-syntax" > = -1;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_OVER< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > property< / 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" > Wordings::starts_with< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / 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" > maxlen< / span > < span class = "plain-syntax" > < < / span > < span class = "identifier-syntax" > Wordings::length< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > maxlen< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Wordings::length< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / 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" > maxlen< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP11" class = "paragraph-anchor" > < / a > < b > § 11. Access functions. < / b > < / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "identifier-syntax" > linked_list< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::get_permissions< / 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" > Properties::get_permissions< / span > < / span > :< br / > Property Permissions - < a href = "4-pp.html#SP2" > § 2< / a > , < a href = "4-pp.html#SP3_3" > § 3.3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > permissions< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2021-02-19 02:21:55 +02:00
< span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::get_name< / 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" > Properties::get_name< / span > < / span > :< br / > Same Property Relation - < a href = "3-spr.html#SP2" > § 2< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > EMPTY_WORDING< / 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" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
< p class = "commentary firstcommentary" > < a id = "SP12" class = "paragraph-anchor" > < / a > < b > § 12. < / b > The "possession marker" is used to keep tabs on which either/or properties
things seem to have, but only as temporary workspace: see < a href = "../assertions-module/4-imp.html" class = "internal" > Implications (in assertions)< / a > .
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "identifier-syntax" > possession_marker< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::get_possession_marker< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > pom< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
< p class = "commentary firstcommentary" > < a id = "SP13" class = "paragraph-anchor" > < / a > < b > § 13. < / b > These are frequently used. As noted above, exactly one of < span class = "extract" > < span class = "extract-syntax" > either_or_data< / span > < / span >
and < span class = "extract" > < span class = "extract-syntax" > value_data< / span > < / span > is < span class = "extract" > < span class = "extract-syntax" > NULL< / span > < / span > , so these are in fact antonyms:
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
2021-05-11 01:09:06 +03:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::is_either_or< / 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" > Properties::is_either_or< / span > < / span > :< br / > < a href = "3-prp.html#SP16" > § 16< / a > , < a href = "3-prp.html#SP17" > § 17< / a > , < a href = "3-prp.html#SP19" > § 19< / a > < br / > Instances - < a href = "2-ins.html#SP8" > § 8< / a > < br / > Property Permissions - < a href = "4-pp.html#SP2" > § 2< / a > < br / > Property Inferences - < a href = "5-pi.html#SP5" > § 5< / a > , < a href = "5-pi.html#SP9" > § 9< / a > , < a href = "5-pi.html#SP10" > § 10< / a > , < a href = "5-pi.html#SP11" > § 11< / a > < br / > The Model World - < a href = "5-tmw.html#SP4_2" > § 4.2< / a > , < a href = "5-tmw.html#SP4_2_1_1" > § 4.2.1.1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > )?< / span > < span class = "identifier-syntax" > TRUE:FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2021-02-20 17:45:46 +02:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::is_value_property< / span > < button class = "popup" onclick = "togglePopup('usagePopup6')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup6" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::is_value_property< / span > < / span > :< br / > Same Property Relation - < a href = "3-spr.html#SP2" > § 2< / a > < br / > Property Inferences - < a href = "5-pi.html#SP6" > § 6< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > value_data< / span > < span class = "plain-syntax" > )?< / span > < span class = "identifier-syntax" > TRUE:FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< / pre >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP14" class = "paragraph-anchor" > < / a > < b > § 14. Logging. < / b > < / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::log< / span > < button class = "popup" onclick = "togglePopup('usagePopup7')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup7" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::log< / span > < / span > :< br / > Knowledge Module - < a href = "1-km.html#SP2" > § 2< / a > , < a href = "1-km.html#SP3" > § 3< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-06 20:00:34 +02:00
< span class = "plain-syntax" > < / span > < a href = "3-prp.html#SP14" class = "function-link" > < span class = "function-syntax" > Properties::log_basic_pname< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / 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" > Streams::I6_escapes_enabled< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > DL< / span > < span class = "plain-syntax" > )) || (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > neg< / span > < span class = "plain-syntax" > = < / span > < a href = "3-ep.html#SP6" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::get_negation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
2021-02-06 20:00:34 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > neg< / span > < span class = "plain-syntax" > ) { < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "=~"< / span > < span class = "plain-syntax" > ); < / span > < a href = "3-prp.html#SP14" class = "function-link" > < span class = "function-syntax" > Properties::log_basic_pname< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > neg< / span > < span class = "plain-syntax" > ); }< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "=%u"< / span > < span class = "plain-syntax" > , < / span > < a href = "3-vp.html#SP6" class = "function-link" > < span class = "function-syntax" > ValueProperties::kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ));< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::log_basic_pname< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) { < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "< null-property> "< / span > < span class = "plain-syntax" > ); < / span > < span class = "reserved-syntax" > return< / 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" > Wordings::nonempty< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > )) { < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "'%W'"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > ); }< / span >
2021-02-18 01:32:04 +02:00
< 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" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > compilation_data< / span > < span class = "plain-syntax" > .< / span > < span class = "identifier-syntax" > prop_iname< / span > < span class = "plain-syntax" > ) { < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "%n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > compilation_data< / span > < span class = "plain-syntax" > .< / span > < span class = "identifier-syntax" > prop_iname< / span > < span class = "plain-syntax" > ); }< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > { < / span > < span class = "identifier-syntax" > LOG< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "nameless"< / span > < span class = "plain-syntax" > ); }< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP15" class = "paragraph-anchor" > < / a > < b > § 15. Inter translation requests. < / b > This is the function which is called by the assertion parser in response
2019-03-17 14:40:57 +02:00
to sentences like:
< / p >
< blockquote >
2021-02-19 02:21:55 +02:00
< p > The initial appearance property translates into Inter as "initial".< / p >
2019-03-17 14:40:57 +02:00
< / blockquote >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2020-08-26 12:52:50 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::translates< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > wording< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > p2< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
2020-05-09 01:13:45 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "function-syntax" > < property-name> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > W< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > = < / span > < span class = "function-syntax" > < < rp> > < / span > < span class = "plain-syntax" > ;< / span >
2020-05-11 17:21:29 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > text< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Lexer::word_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Wordings::first_wn< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p2< / span > < span class = "plain-syntax" > )));< / span >
2019-03-17 14:40:57 +02:00
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP15_1" class = "named-paragraph-link" > < span class = "named-paragraph" > Make sure this is a genuine and previously untranslated property< / span > < span class = "named-paragraph-number" > 15.1< / span > < / a > < / span > < span class = "plain-syntax" > ;< / span >
2019-03-17 14:40:57 +02:00
2021-05-11 01:09:06 +03:00
< span class = "plain-syntax" > < / span > < a href = "3-prp.html#SP19" class = "function-link" > < span class = "function-syntax" > Properties::set_translation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > 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" > PROPERTY_TRANSLATIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Property < $Y> translates as < %w> \n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text< / span > < span class = "plain-syntax" > );< / span >
2019-03-17 14:40:57 +02:00
2021-02-18 12:26:57 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > either_or_data< / span > < span class = "plain-syntax" > )< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "named-paragraph-container code-font" > < a href = "3-prp.html#SP15_2" class = "named-paragraph-link" > < span class = "named-paragraph" > Check to see if a sense reversal has taken place in translation< / span > < span class = "named-paragraph-number" > 15.2< / span > < / a > < / 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 >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP15_1" class = "paragraph-anchor" > < / a > < b > § 15.1. < / b > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Make sure this is a genuine and previously untranslated property< / span > < span class = "named-paragraph-number" > 15.1< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_NonPropertyTranslated< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "this property does not exist"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "so cannot be translated."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > RTProperties::has_been_translated< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) & & < / span >
< span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Str::eq_wide_string< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > RTProperties::current_translation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > text< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > )) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::sentence_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_TranslatedTwice< / span > < span class = "plain-syntax" > ),< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "this property has already been translated"< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "so there must be some duplication somewhere."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP15" > § 15< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP15_2" class = "paragraph-anchor" > < / a > < b > § 15.2. < / b > But there is a kick in the tail, which is that translation can reverse the
2019-03-17 14:40:57 +02:00
run-time parity of an either/or property. The Standard Rules normally say:
< / p >
< blockquote >
2021-02-19 02:21:55 +02:00
< p > The open property translates into Inter as "open".< / p >
2019-03-17 14:40:57 +02:00
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > This means that information about openness is stored as < span class = "extract" > < span class = "extract-syntax" > open< / span > < / span > within the
template; an open door has < span class = "extract" > < span class = "extract-syntax" > open< / span > < / span > set, for instance. If we had written:
2019-03-17 14:40:57 +02:00
< / p >
< blockquote >
2021-02-19 02:21:55 +02:00
< p > The closed property translates into Inter as "open".< / p >
2019-03-17 14:40:57 +02:00
< / blockquote >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > then the relevant data would still have been stored as < span class = "extract" > < span class = "extract-syntax" > open< / span > < / span > , but with the
2021-02-19 02:21:55 +02:00
opposite sense; an open door would now be one with < span class = "extract" > < span class = "extract-syntax" > open< / span > < / span > cleared.< sup id = "fnref:1" > < a href = "#fn:1" rel = "footnote" > 1< / a > < / sup >
2019-03-17 14:40:57 +02:00
< / p >
2021-02-19 02:21:55 +02:00
< ul class = "footnotetexts" > < li class = "footnote" id = "fn:1" > < p class = "inwebfootnote" > < sup id = "fnref:1" > < a href = "#fn:1" rel = "footnote" > 1< / a > < / sup > Of course we'd never want to do something so confusing, but the facility
exists because Inform 7 made a few either/or properties opposite in sense
to their analogous Inform 6 ones.
< a href = "#fnref:1" title = "return to text" > ↩ < / a > < / p > < / li > < / ul >
< p class = "commentary" > < span class = "named-paragraph-container code-font" > < span class = "named-paragraph-defn" > Check to see if a sense reversal has taken place in translation< / span > < span class = "named-paragraph-number" > 15.2< / span > < / span > < span class = "comment-syntax" > =< / span >
2020-05-03 03:01:21 +03:00
< / p >
2019-03-17 14:40:57 +02:00
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > neg< / span > < span class = "plain-syntax" > = < / span > < a href = "3-ep.html#SP6" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::get_negation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / 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" > neg< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::store_in_negation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > neg< / 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" > PROPERTY_TRANSLATIONS< / span > < span class = "plain-syntax" > , < / span > < span class = "string-syntax" > "Storing this way round: $Y\n"< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2021-02-19 02:21:55 +02:00
< ul class = "endnotetexts" > < li > This code is used in < a href = "3-prp.html#SP15" > § 15< / a > .< / li > < / ul >
< p class = "commentary firstcommentary" > < a id = "SP16" class = "paragraph-anchor" > < / a > < b > § 16. Compiling property values. < / b > Small as it may be, this function contains two important principles: one, that
2019-03-17 14:40:57 +02:00
property values of something are drawn from the most specific knowledge we have
about it; and two, that if we have no knowledge of any specificity, then we fill
in a default value.
< / p >
2020-05-03 03:01:21 +03:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::compile_inferred_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > value_holster< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > inference_subject< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) || (< / span > < span class = "identifier-syntax" > RTProperties::can_be_compiled< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > while< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "3-prp.html#SP17" class = "function-link" > < span class = "function-syntax" > Properties::compile_property_value_inner< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
2021-02-16 21:21:06 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > = < / span > < a href = "4-is.html#SP11" class = "function-link" > < span class = "function-syntax" > InferenceSubjects::narrowest_broader_subject< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > );< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "3-prp.html#SP13" class = "function-link" > < span class = "function-syntax" > Properties::is_either_or< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) {< / span >
2022-01-22 18:44:52 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Holsters::value_pair_allowed< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > ))< / span >
2022-02-25 01:53:40 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Holsters::holster_pair< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > InterValuePairs::number< / span > < span class = "plain-syntax" > (0));< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > } < / span > < span class = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > NULL< / 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" > RTProperties::compile_vp_default_value< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > prn< / 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" > Problems::quote_wording< / span > < span class = "plain-syntax" > (1, < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > name< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > StandardProblems::handmade_problem< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Task::syntax_tree< / 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" > PM_PropertyUninitialisable< / span > < span class = "plain-syntax" > ));< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_segment< / span > < span class = "plain-syntax" > (< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "I am unable to put any value into the property '%1', because "< / span >
< span class = "plain-syntax" > < / span > < span class = "string-syntax" > "it seems to have a kind of value which has no actual values."< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Problems::issue_problem_end< / span > < span class = "plain-syntax" > ();< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP17" class = "paragraph-anchor" > < / a > < b > § 17. < / b > Here we look for a specific subject's knowledge about our property, and if
2020-05-03 03:01:21 +03:00
we find it, we compile it and return < span class = "extract" > < span class = "extract-syntax" > TRUE< / span > < / span > ; if not we do nothing and return
< span class = "extract" > < span class = "extract-syntax" > FALSE< / span > < / span > .
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" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::compile_property_value_inner< / span > < button class = "popup" onclick = "togglePopup('usagePopup8')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup8" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::compile_property_value_inner< / span > < / span > :< br / > < a href = "3-prp.html#SP16" > § 16< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > value_holster< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > inference_subject< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > inference< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > ;< / span >
2021-02-16 02:54:32 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > KNOWLEDGE_LOOP< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > infs< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > property_inf< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-16 21:21:06 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "5-inf.html#SP3" class = "function-link" > < span class = "function-syntax" > Inferences::get_inference_type< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > ) == < / span > < span class = "identifier-syntax" > property_inf< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > current_sentence< / span > < span class = "plain-syntax" > = < / span > < a href = "5-inf.html#SP3" class = "function-link" > < span class = "function-syntax" > Inferences::where_inferred< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / 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" > sense< / span > < span class = "plain-syntax" > = (< / span > < a href = "5-inf.html#SP3" class = "function-link" > < span class = "function-syntax" > Inferences::get_certainty< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > ) > < / span > < span class = "constant-syntax" > 0< / span > < span class = "plain-syntax" > )?< / span > < span class = "identifier-syntax" > TRUE:FALSE< / span > < span class = "plain-syntax" > ;< / span >
2021-02-20 17:45:46 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > inferred_property< / span > < span class = "plain-syntax" > = < / span > < a href = "5-pi.html#SP7" class = "function-link" > < span class = "function-syntax" > PropertyInferences::get_property< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / span > < span class = "plain-syntax" > );< / span >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < a href = "3-prp.html#SP13" class = "function-link" > < span class = "function-syntax" > Properties::is_either_or< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / 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" > inferred_property< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ) {< / span >
2022-01-22 18:44:52 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Holsters::value_pair_allowed< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > ))< / span >
2022-02-25 01:53:40 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Holsters::holster_pair< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > InterValuePairs::number< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > sense< / span > < span class = "plain-syntax" > )?1:0));< / 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 >
2021-02-19 02:21:55 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inferred_property< / span > < span class = "plain-syntax" > == < / span > < a href = "3-ep.html#SP6" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::get_negation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) {< / span >
2022-01-22 18:44:52 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Holsters::value_pair_allowed< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > ))< / span >
2022-02-25 01:53:40 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Holsters::holster_pair< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > InterValuePairs::number< / span > < span class = "plain-syntax" > ((< / span > < span class = "identifier-syntax" > sense< / span > < span class = "plain-syntax" > )?0:1));< / 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" > else< / 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" > inferred_property< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > prn< / 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" > sense< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-20 17:45:46 +02:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > = < / span > < a href = "5-pi.html#SP7" class = "function-link" > < span class = "function-syntax" > PropertyInferences::get_value< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inf< / 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" > val< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "malformed property inference"< / span > < span class = "plain-syntax" > );< / span >
2021-05-11 11:19:15 +03:00
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > CompileValues::constant_to_holster< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > VH< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > val< / span > < span class = "plain-syntax" > ,< / span >
< span class = "plain-syntax" > < / span > < a href = "3-vp.html#SP6" class = "function-link" > < span class = "function-syntax" > ValueProperties::kind< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > inferred_property< / 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 = "reserved-syntax" > else< / span > < span class = "plain-syntax" > {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "valued property with negative certainty"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > }< / 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" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2021-02-19 02:21:55 +02:00
< p class = "commentary firstcommentary" > < a id = "SP18" class = "paragraph-anchor" > < / a > < b > § 18. Coincidence. < / b > Coincidence of kinds and properties occurs where a kind has the same name
2021-02-18 01:32:04 +02:00
exactly as a property, allowing the same name to be used grammatically in
two different contexts. We say that the kind and the property "coincide".
In particular, this happens with conditions:
< / p >
2020-05-03 03:01:21 +03:00
2021-02-18 01:32:04 +02:00
< blockquote >
< p > Brightness is a kind of value. The brightnesses are guttering, weak, radiant and blazing. The lantern has a brightness. The lantern is blazing.< / p >
< / blockquote >
2020-05-03 03:01:21 +03:00
2021-02-18 01:32:04 +02:00
< p class = "commentary" > Here "brightness" becomes the name of a new kind, but "brightness" also
becomes the name of a property.
< / p >
2020-05-03 03:01:21 +03:00
2021-02-18 01:32:04 +02:00
< pre class = "displayed-code all-displayed-code code-font" >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::can_name_coincide_with_kind< / span > < button class = "popup" onclick = "togglePopup('usagePopup9')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup9" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::can_name_coincide_with_kind< / span > < / span > :< br / > Valued Properties - < a href = "3-vp.html#SP7" > § 7< / a > < br / > Comparative Relations - < a href = "3-cr.html#SP6_1" > § 6.1< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / 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" > K< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > construct< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > can_coincide_with_property< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2021-02-19 02:21:55 +02:00
< span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "function-syntax" > Properties::property_with_same_name_as< / span > < button class = "popup" onclick = "togglePopup('usagePopup10')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup10" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::property_with_same_name_as< / span > < / span > :< br / > Instances - < a href = "2-ins.html#SP4_3" > § 4.3< / a > , < a href = "2-ins.html#SP8" > § 8< / a > < br / > Instances as Adjectives - < a href = "2-iaa.html#SP3" > § 3< / a > < br / > Preform for Instances - < a href = "2-pfi.html#SP1" > § 1< / a > < br / > Comparative Relations - < a href = "3-cr.html#SP5" > § 5< / a > , < a href = "3-cr.html#SP6_1" > § 6.1< / a > < br / > Conditions of Subjects - < a href = "4-cos.html#SP3_2" > § 3.2< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > construct< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > coinciding_property< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
2021-02-18 12:26:57 +02:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::mark_kind_as_having_same_name_as< / span > < button class = "popup" onclick = "togglePopup('usagePopup11')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup11" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::mark_kind_as_having_same_name_as< / span > < / span > :< br / > Instances - < a href = "2-ins.html#SP7" > § 7< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > kind< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > , < / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > P< / span > < span class = "plain-syntax" > ) {< / span >
2021-02-18 01:32:04 +02:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > K< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > construct< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > coinciding_property< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > P< / span > < span class = "plain-syntax" > ;< / span >
2020-05-03 03:01:21 +03:00
< span class = "plain-syntax" > }< / span >
< / pre >
2021-05-11 01:09:06 +03:00
< p class = "commentary firstcommentary" > < a id = "SP19" class = "paragraph-anchor" > < / a > < b > § 19. Translated names of properties. < / b > Some properties named in new source text need to be the same as those
defined in a kit of Inter code, and "P translates into Inter as N" will
arrange for that. Such translations can be done with one of two functions:
< / p >
< pre class = "displayed-code all-displayed-code code-font" >
2021-05-11 11:19:15 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::set_translation< / span > < button class = "popup" onclick = "togglePopup('usagePopup12')" > < span class = "comment-syntax" > ?< / span > < span class = "popuptext" id = "usagePopup12" > Usage of < span class = "code-font" > < span class = "function-syntax" > Properties::set_translation< / span > < / span > :< br / > < a href = "3-prp.html#SP15" > § 15< / a > < / span > < / button > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / 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 >
2021-05-11 01:09:06 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "translation set for null property"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < a href = "3-prp.html#SP13" class = "function-link" > < span class = "function-syntax" > Properties::is_either_or< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) & & (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > compilation_data< / span > < span class = "plain-syntax" > .< / span > < span class = "identifier-syntax" > store_in_negation< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < a href = "3-prp.html#SP19" class = "function-link" > < span class = "function-syntax" > Properties::set_translation< / span > < / a > < span class = "plain-syntax" > (< / span > < a href = "3-ep.html#SP6" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::get_negation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TEMPORARY_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > for< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > =0; ((< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ]) & & (< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > < 31)); < / 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" > Characters::isalpha< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ])) || (< / span > < span class = "identifier-syntax" > Characters::isdigit< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ])) || (< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > [< / span > < span class = "identifier-syntax" > i< / span > < span class = "plain-syntax" > ] == < / span > < span class = "character-syntax" > '_'< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PUT_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > t< / 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" > else< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PUT_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "character-syntax" > '_'< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::set_translation_and_make_available< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DISCARD_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > }< / span >
2021-05-11 11:19:15 +03:00
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > Properties::set_translation_from_text< / span > < span class = "plain-syntax" > (< / span > < span class = "reserved-syntax" > property< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > text_stream< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) {< / span >
2021-05-11 01:09:06 +03:00
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > NULL< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > internal_error< / span > < span class = "plain-syntax" > (< / span > < span class = "string-syntax" > "translation set for null property"< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > ((< / span > < a href = "3-prp.html#SP13" class = "function-link" > < span class = "function-syntax" > Properties::is_either_or< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > )) & & (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > -> < / span > < span class = "element-syntax" > compilation_data< / span > < span class = "plain-syntax" > .< / span > < span class = "identifier-syntax" > store_in_negation< / span > < span class = "plain-syntax" > )) {< / span >
< span class = "plain-syntax" > < / span > < a href = "3-prp.html#SP19" class = "function-link" > < span class = "function-syntax" > Properties::set_translation_from_text< / span > < / a > < span class = "plain-syntax" > (< / span > < a href = "3-ep.html#SP6" class = "function-link" > < span class = "function-syntax" > EitherOrProperties::get_negation< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > ), < / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > return< / span > < span class = "plain-syntax" > ;< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::iname< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > TEMPORARY_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > LOOP_THROUGH_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pos< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > t< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > wchar_t< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > Str::get< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > pos< / 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" > isalpha< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > )) || (< / span > < span class = "identifier-syntax" > Characters::isdigit< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > )) || (< / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > == < / span > < span class = "character-syntax" > '_'< / span > < span class = "plain-syntax" > ))< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PUT_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , (< / span > < span class = "reserved-syntax" > int< / span > < span class = "plain-syntax" > ) < / span > < span class = "identifier-syntax" > c< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > else< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > PUT_TO< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "character-syntax" > '_'< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > Str::truncate< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > , < / span > < span class = "constant-syntax" > 31< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > RTProperties::set_translation< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > prn< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > DISCARD_TEXT< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > T< / span > < span class = "plain-syntax" > )< / span >
< span class = "plain-syntax" > }< / span >
< / pre >
2020-05-03 03:01:21 +03:00
< nav role = "progress" > < div class = "progresscontainer" >
2021-02-19 02:21:55 +02:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "2-nv.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-wtmd.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-km.html" > 1< / a > < / li > < li class = "progresschapter" > < a href = "2-ins.html" > 2< / a > < / li > < li class = "progresscurrentchapter" > 3< / li > < li class = "progresscurrent" > prp< / li > < li class = "progresssection" > < a href = "3-ep.html" > ep< / a > < / li > < li class = "progresssection" > < a href = "3-epa.html" > epa< / a > < / li > < li class = "progresssection" > < a href = "3-vp.html" > vp< / a > < / li > < li class = "progresssection" > < a href = "3-tpr.html" > tpr< / a > < / li > < li class = "progresssection" > < a href = "3-spr.html" > spr< / a > < / li > < li class = "progresssection" > < a href = "3-spr2.html" > spr2< / a > < / li > < li class = "progresssection" > < a href = "3-msr.html" > msr< / a > < / li > < li class = "progresssection" > < a href = "3-ma.html" > ma< / a > < / li > < li class = "progresssection" > < a href = "3-cr.html" > cr< / a > < / li > < li class = "progresschapter" > < a href = "4-is.html" > 4< / a > < / li > < li class = "progresschapter" > < a href = "5-inf.html" > 5< / a > < / li > < li class = "progressnext" > < a href = "3-ep.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 >