update XML IO pattern.
This commit is contained in:
@@ -2836,7 +2836,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.Common.XmlUtils.XFactory.XGeneratorDelegate",
|
||||
"Summary": "<p sourcefile=\"api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.yml\" sourcestartlinenumber=\"1\">Delegate for generating objects from XML elements with relative file path.</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.yml\" sourcestartlinenumber=\"1\">Delegate for generating an object from an XML element with relative\nfile path context.</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -2864,7 +2864,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.Common.XmlUtils.XFactory",
|
||||
"Summary": "<p sourcefile=\"api/Hi.Common.XmlUtils.XFactory.yml\" sourcestartlinenumber=\"1\">Factory class for generating objects from XML elements using registered generator functions.</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.Common.XmlUtils.XFactory.yml\" sourcestartlinenumber=\"1\">Factory for generating objects from XML elements using registered generator\nfunctions.</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -9962,7 +9962,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.yml\" sourcestartlinenumber=\"1\">Fanuc-side adapter that exposes a wrapped <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref>\n(resolved at call time from the dependency list) as an\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup\" data-throw-if-not-resolved=\"false\"></xref> following Fanuc Memory C tool\noffset addressing: <code>#2001+N → effective height of offset N</code>\n(geometry − wear).</p>\n<p>\nThe underlying <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref> stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Stateless: holds\nno reference of its own and resolves the table from the per-call\n<code>dependencies</code> list, so XML round-trip is trivial (an empty element).\n</p>\n<p>\nRegistered on a brand preset's\nVariableEvaluatorSyntax.RuntimeVariableLookups, not on\n<xref href=\"Hi.NcParsers.SoftNcRunner.NcDependencyList\" data-throw-if-not-resolved=\"false\"></xref> — the wrapper owns no\nlong-lived data, only the Fanuc-style id addressing scheme. The\nunderlying <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref> still lives in\n<code>NcDependencyList</code> as the data dependency.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.yml\" sourcestartlinenumber=\"1\">Fanuc-side adapter that exposes a wrapped <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref>\n(resolved at call time from the dependency list) as an\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup\" data-throw-if-not-resolved=\"false\"></xref> following Fanuc Memory C tool\noffset addressing: <code>#2001+N → effective height of offset N</code>\n(geometry − wear).</p>\n<p>\nThe underlying <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref> stays brand-neutral —\nHeidenhain / Siemens can use the same storage with different addressing\nby registering their own adapter alongside the table. Stateless: holds\nno reference of its own and resolves the table from the per-call\n<code>dependencies</code> list, so XML round-trip is trivial (an empty element).\n</p>\n<p>\nRegistered on a brand preset's\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.RuntimeVariableLookups\" data-throw-if-not-resolved=\"false\"></xref>, not on\n<xref href=\"Hi.NcParsers.SoftNcRunner.NcDependencyList\" data-throw-if-not-resolved=\"false\"></xref> — the wrapper owns no\nlong-lived data, only the Fanuc-style id addressing scheme. The\nunderlying <xref href=\"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable\" data-throw-if-not-resolved=\"false\"></xref> still lives in\n<code>NcDependencyList</code> as the data dependency.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -10760,7 +10760,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.yml\" sourcestartlinenumber=\"1\">Resolves Fanuc Custom Macro B GOTO control flow.\nTriggered by <code>Parsing.FanucGoto</code> (written by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref>); decides whether\nto fire, and on fire calls\n<xref href=\"Hi.Common.Collections.LazyLinkedList%601.ReplaceSource(System.Collections.Generic.IEnumerable%7b%600%7d)\" data-throw-if-not-resolved=\"false\"></xref> on <code>layers[0]</code> with\nthe re-segmented file content starting at the matching <code>N{target}</code>\nlabel. The host block stays materialised (so cache dumps still see the\nGOTO call site); execution naturally continues from the new source\nonce the pipeline pulls the next block.</p>\n<p>\nBoth unconditional <code>GOTO <n></code> and conditional\n<code>IF [<expr>] GOTO <n></code> are implemented. The conditional\nform leans on <xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref>'s pass-2 tree walk\nto substitute <code>Parsing.FanucGoto.Condition</code> with a numeric\n<xref href=\"System.Text.Json.Nodes.JsonValue\" data-throw-if-not-resolved=\"false\"></xref> when the expression\nevaluates successfully — <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.ReadCondition(System.Text.Json.Nodes.JsonNode)\" data-throw-if-not-resolved=\"false\"></xref> then reads the\nnode polymorphically. Truthy non-zero fires the redirect; zero falls\nthrough silently; a still-string (unresolved) Condition emits\n<code>FanucGoto--ConditionNotEvaluated</code> and falls through.\n</p>\n<p>\nPipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation\nbundle. Must run after <xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref> so any\n<code>#<var></code> in the target N (e.g. <code>GOTO #1</code>) has been\nsubstituted to a literal in <code>Parsing.FanucGoto.N</code>. Reader syntaxes\n(<xref href=\"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> etc.) are independent —\nthey touch <code>Parsing.Assignments</code>, not <code>Parsing.FanucGoto</code>.\n</p>\n<p>\nLabel scanning uses two hosted helper syntaxes —\nCommentSyntax and IndexSyntax — applied to\neach candidate block in turn so the predicate\n<code>IndexNote.Number == target</code> matches the same way the Parsing\nbundle would. Both are XML-IO-able so API customers can swap them\n(e.g. for a controller variant using <code>;</code>-style comments or a\ndifferent head symbol). Defaults match Fanuc: <xref href=\"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax\" data-throw-if-not-resolved=\"false\"></xref>\nand <xref href=\"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax\" data-throw-if-not-resolved=\"false\"></xref> with the <code>\"N\"</code> symbol.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.yml\" sourcestartlinenumber=\"1\">Resolves Fanuc Custom Macro B GOTO control flow.\nTriggered by <code>Parsing.FanucGoto</code> (written by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref>); decides whether\nto fire, and on fire calls\n<xref href=\"Hi.Common.Collections.LazyLinkedList%601.ReplaceSource(System.Collections.Generic.IEnumerable%7b%600%7d)\" data-throw-if-not-resolved=\"false\"></xref> on <code>layers[0]</code> with\nthe re-segmented file content starting at the matching <code>N{target}</code>\nlabel. The host block stays materialised (so cache dumps still see the\nGOTO call site); execution naturally continues from the new source\nonce the pipeline pulls the next block.</p>\n<p>\nBoth unconditional <code>GOTO <n></code> and conditional\n<code>IF [<expr>] GOTO <n></code> are implemented. The conditional\nform leans on <xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref>'s pass-2 tree walk\nto substitute <code>Parsing.FanucGoto.Condition</code> with a numeric\n<xref href=\"System.Text.Json.Nodes.JsonValue\" data-throw-if-not-resolved=\"false\"></xref> when the expression\nevaluates successfully — <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.ReadCondition(System.Text.Json.Nodes.JsonNode)\" data-throw-if-not-resolved=\"false\"></xref> then reads the\nnode polymorphically. Truthy non-zero fires the redirect; zero falls\nthrough silently; a still-string (unresolved) Condition emits\n<code>FanucGoto--ConditionNotEvaluated</code> and falls through.\n</p>\n<p>\nPipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation\nbundle. Must run after <xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref> so any\n<code>#<var></code> in the target N (e.g. <code>GOTO #1</code>) has been\nsubstituted to a literal in <code>Parsing.FanucGoto.N</code>. Reader syntaxes\n(<xref href=\"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> etc.) are independent —\nthey touch <code>Parsing.Assignments</code>, not <code>Parsing.FanucGoto</code>.\n</p>\n<p>\nLabel scanning uses two hosted helper syntaxes —\n<code>CommentSyntax</code> and <code>IndexSyntax</code> — applied to\neach candidate block in turn so the predicate\n<code>IndexNote.Number == target</code> matches the same way the Parsing\nbundle would. Both are XML-IO-able so API customers can swap them\n(e.g. for a controller variant using <code>;</code>-style comments or a\ndifferent head symbol). Defaults match Fanuc: <xref href=\"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax\" data-throw-if-not-resolved=\"false\"></xref>\nand <xref href=\"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax\" data-throw-if-not-resolved=\"false\"></xref> with the <code>\"N\"</code> symbol.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -10816,7 +10816,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.yml\" sourcestartlinenumber=\"1\">Inlines a Fanuc Custom Macro B one-shot call (<code>G65 P_ L_ [letter\nvalue …]</code>) into the source layer and binds the call-line argument\nletters to <code>Vars.Local</code> <code>#1-#26</code> per the Type-I map (see\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap\" data-throw-if-not-resolved=\"false\"></xref>). Every inlined block carries the\nbinding dict, a clone of the <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref> diagnostic\nrecord, and a <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> id stamp — so\nLocalVariableLookup resolves arg references in a\nsingle-block lookup, a cache dump landing on any block immediately\nshows which call it belongs to, and downstream\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> carries body-internal\n<code>#1-#33</code> writes forward only within the same frame. The host\nblock itself records <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref> but stays in the\ncaller's frame (no <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> stamp) and emits no\nmotion act; after the macro body's last inlined block the pipeline\ncontinues naturally into the caller's next block (the inlined pieces\nsit ahead of the host block's successor in <code>layers[0]</code>).</p>\n<p>\nFrame isolation works on two layers. Statically, caller blocks\nhave no <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> stamp (frame id 0 by\n<xref href=\"Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject)\" data-throw-if-not-resolved=\"false\"></xref>), so the inlined frame ids (allocated\nfresh per <code>L</code>-repetition) never collide with main. Dynamically,\nLocalVariableLookup and\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> compare frame ids\nbefore carrying any <code>Vars.Local</code> entry across a block boundary\n— a macro body's body-internal writes therefore stay inside the\nmacro and never leak back into the caller's frame.\n</p>\n<p>\nFilename lookup mirrors <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>:\n<code>O{P:D4}.NC</code>, <code>O{P}.NC</code>, <code>O{P:D4}</code>, <code>O{P}</code>,\n<code>{P:D4}.NC</code>, <code>{P}.NC</code> — first match wins. The lookup root\nis <xref href=\"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.InternalFolder\" data-throw-if-not-resolved=\"false\"></xref> (G65 has no\n\"external storage\" variant; M198's external root is M98/M198-only).\n</p>\n<p>\n<code>L > 1</code> inlines the same macro <code>L</code> times in series. Each\nrepetition is a fresh segmentation pass (so each block gets its own\n<xref href=\"Hi.NcParsers.Syntaxs.SyntaxPiece\" data-throw-if-not-resolved=\"false\"></xref> JSON object — the downstream pipeline\nmutates JSON in place and would clobber sibling repetitions if\ninstances were shared) and gets a fresh <code>FileIndex</code> (so\n<code>(FileIndex, LineIndex)</code> pairs stay unique across the\n<code>L</code>-copies of the same source lines).\n</p>\n<p>\nPipeline placement: ahead of <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax\" data-throw-if-not-resolved=\"false\"></xref> inside\nthe Fanuc <code>Evaluation</code> <xref href=\"Hi.NcParsers.Syntaxs.BundleSyntax\" data-throw-if-not-resolved=\"false\"></xref>\nso a hypothetical <code>G65 P_</code> + <code>M98 P_</code> on the same block\nexpands the G65 macro first (would be an unusual but legal\ncomposition). Detection is on the <code>Parsing.G65</code> sub-object\nwritten by <xref href=\"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.G65Syntax\" data-throw-if-not-resolved=\"false\"></xref>\n(a <xref href=\"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax\" data-throw-if-not-resolved=\"false\"></xref>) — the\nkeyword <code>\"G65\"</code> never reaches <code>Parsing.Flags</code> because the\nparameterized match has already consumed the text by the time\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax\" data-throw-if-not-resolved=\"false\"></xref> runs.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.yml\" sourcestartlinenumber=\"1\">Inlines a Fanuc Custom Macro B one-shot call (<code>G65 P_ L_ [letter\nvalue …]</code>) into the source layer and binds the call-line argument\nletters to <code>Vars.Local</code> <code>#1-#26</code> per the Type-I map (see\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap\" data-throw-if-not-resolved=\"false\"></xref>). Every inlined block carries the\nbinding dict, a clone of the <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref> diagnostic\nrecord, and a <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> id stamp — so\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup\" data-throw-if-not-resolved=\"false\"></xref> resolves arg references in a\nsingle-block lookup, a cache dump landing on any block immediately\nshows which call it belongs to, and downstream\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> carries body-internal\n<code>#1-#33</code> writes forward only within the same frame. The host\nblock itself records <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref> but stays in the\ncaller's frame (no <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> stamp) and emits no\nmotion act; after the macro body's last inlined block the pipeline\ncontinues naturally into the caller's next block (the inlined pieces\nsit ahead of the host block's successor in <code>layers[0]</code>).</p>\n<p>\nFrame isolation works on two layers. Statically, caller blocks\nhave no <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> stamp (frame id 0 by\n<xref href=\"Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject)\" data-throw-if-not-resolved=\"false\"></xref>), so the inlined frame ids (allocated\nfresh per <code>L</code>-repetition) never collide with main. Dynamically,\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup\" data-throw-if-not-resolved=\"false\"></xref> and\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax\" data-throw-if-not-resolved=\"false\"></xref> compare frame ids\nbefore carrying any <code>Vars.Local</code> entry across a block boundary\n— a macro body's body-internal writes therefore stay inside the\nmacro and never leak back into the caller's frame.\n</p>\n<p>\nFilename lookup mirrors <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>:\n<code>O{P:D4}.NC</code>, <code>O{P}.NC</code>, <code>O{P:D4}</code>, <code>O{P}</code>,\n<code>{P:D4}.NC</code>, <code>{P}.NC</code> — first match wins. The lookup root\nis <xref href=\"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.InternalFolder\" data-throw-if-not-resolved=\"false\"></xref> (G65 has no\n\"external storage\" variant; M198's external root is M98/M198-only).\n</p>\n<p>\n<code>L > 1</code> inlines the same macro <code>L</code> times in series. Each\nrepetition is a fresh segmentation pass (so each block gets its own\n<xref href=\"Hi.NcParsers.Syntaxs.SyntaxPiece\" data-throw-if-not-resolved=\"false\"></xref> JSON object — the downstream pipeline\nmutates JSON in place and would clobber sibling repetitions if\ninstances were shared) and gets a fresh <code>FileIndex</code> (so\n<code>(FileIndex, LineIndex)</code> pairs stay unique across the\n<code>L</code>-copies of the same source lines).\n</p>\n<p>\nPipeline placement: ahead of <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax\" data-throw-if-not-resolved=\"false\"></xref> inside\nthe Fanuc <code>Evaluation</code> <xref href=\"Hi.NcParsers.Syntaxs.BundleSyntax\" data-throw-if-not-resolved=\"false\"></xref>\nso a hypothetical <code>G65 P_</code> + <code>M98 P_</code> on the same block\nexpands the G65 macro first (would be an unusual but legal\ncomposition). Detection is on the <code>Parsing.G65</code> sub-object\nwritten by <xref href=\"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.G65Syntax\" data-throw-if-not-resolved=\"false\"></xref>\n(a <xref href=\"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax\" data-throw-if-not-resolved=\"false\"></xref>) — the\nkeyword <code>\"G65\"</code> never reaches <code>Parsing.Flags</code> because the\nparameterized match has already consumed the text by the time\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax\" data-throw-if-not-resolved=\"false\"></xref> runs.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -10886,7 +10886,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.yml\" sourcestartlinenumber=\"1\">Shared “re-segment a file and skip pieces until a label matches”\nscan, used by both\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> (unconditional GOTO redirect)\nand <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax\" data-throw-if-not-resolved=\"false\"></xref> (<code>M99 P{seq}</code> jump\ninto the caller file). Reads the file via\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(System.Int32%2cSystem.String%2cSystem.String)\" data-throw-if-not-resolved=\"false\"></xref>, segments through the\nprovided <xref href=\"Hi.NcParsers.Segmenters.ISegmenter\" data-throw-if-not-resolved=\"false\"></xref>, runs the\n<code class=\"paramref\">probeSyntaxes</code> on each candidate block to\nextract <code>IndexNote.Number</code>, and returns the slice from the\nfirst matching block to EOF.</p>\n<p>\nReturns <code>null</code> when no block matches — the caller's\nresponsibility to surface the appropriate diagnostic. The probes\nare idempotent because the downstream Parsing bundle re-runs the\nsame syntaxes on the yielded pieces with no-op effect (the regex\npatterns no longer match once the N-prefix is consumed and the\nparenthesised comment stripped).\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.yml\" sourcestartlinenumber=\"1\">Shared “re-segment a file and skip pieces until a label matches”\nscan, used by both\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> (unconditional GOTO redirect)\nand <xref href=\"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax\" data-throw-if-not-resolved=\"false\"></xref> (<code>M99 P{seq}</code> jump\ninto the caller file). Reads the file via\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ReadLines(System.Int32%2cSystem.String%2cSystem.String)\" data-throw-if-not-resolved=\"false\"></xref>, segments through the\nprovided <xref href=\"Hi.NcParsers.Segmenters.ISegmenter\" data-throw-if-not-resolved=\"false\"></xref>, runs the\ncaller-supplied probe syntaxes on each candidate block to\nextract <code>IndexNote.Number</code>, and returns the slice from the\nfirst matching block to EOF.</p>\n<p>\nReturns <code>null</code> when no block matches — the caller's\nresponsibility to surface the appropriate diagnostic. The probes\nare idempotent because the downstream Parsing bundle re-runs the\nsame syntaxes on the yielded pieces with no-op effect (the regex\npatterns no longer match once the N-prefix is consumed and the\nparenthesised comment stripped).\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -11376,7 +11376,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.Keywords.FanucGoto",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucGoto.yml\" sourcestartlinenumber=\"1\">Fanuc Custom Macro B GOTO record. Stamped on the host block by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> after the control-flow\ndecision has been made; produced earlier by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref> as a parsing-stage\nsub-section (<code>Parsing.FanucGoto</code>) carrying the raw captured fields.</p>\n<p>\nTwo source forms map to the same shape:\n<ul><li><code>GOTO <n></code> — unconditional jump. <xref href=\"Hi.NcParsers.Keywords.FanucGoto.Condition\" data-throw-if-not-resolved=\"false\"></xref> is null.</li><li><code>IF [<bool-expr>] GOTO <n></code> — conditional jump.\n <xref href=\"Hi.NcParsers.Keywords.FanucGoto.Condition\" data-throw-if-not-resolved=\"false\"></xref> holds the expression text from inside the\n brackets.</li></ul>\n\n<p>\nAt parsing time <xref href=\"Hi.NcParsers.Keywords.FanucGoto.N\" data-throw-if-not-resolved=\"false\"></xref> is a raw token from the source — it may\nbe a literal (<code>\"100\"</code>), a variable reference (<code>\"#1\"</code>), or a\nbracketed expression (<code>\"#[#2+5]\"</code>). VariableEvaluatorSyntax\nsubstitutes a resolved literal back into the same field in the\nEvaluation bundle; <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> then\n<code>int.TryParse</code>s the final string to produce an int target.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucGoto.yml\" sourcestartlinenumber=\"1\">Fanuc Custom Macro B GOTO record. Stamped on the host block by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> after the control-flow\ndecision has been made; produced earlier by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref> as a parsing-stage\nsub-section (<code>Parsing.FanucGoto</code>) carrying the raw captured fields.</p>\n<p>\nTwo source forms map to the same shape:\n<ul><li><code>GOTO <n></code> — unconditional jump. <xref href=\"Hi.NcParsers.Keywords.FanucGoto.Condition\" data-throw-if-not-resolved=\"false\"></xref> is null.</li><li><code>IF [<bool-expr>] GOTO <n></code> — conditional jump.\n <xref href=\"Hi.NcParsers.Keywords.FanucGoto.Condition\" data-throw-if-not-resolved=\"false\"></xref> holds the expression text from inside the\n brackets.</li></ul>\n\n<p>\nAt parsing time <xref href=\"Hi.NcParsers.Keywords.FanucGoto.N\" data-throw-if-not-resolved=\"false\"></xref> is a raw token from the source — it may\nbe a literal (<code>\"100\"</code>), a variable reference (<code>\"#1\"</code>), or a\nbracketed expression (<code>\"#[#2+5]\"</code>). <xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref>\nsubstitutes a resolved literal back into the same field in the\nEvaluation bundle; <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref> then\n<code>int.TryParse</code>s the final string to produce an int target.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -11390,7 +11390,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.Keywords.FanucIfThen",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucIfThen.yml\" sourcestartlinenumber=\"1\">Fanuc Custom Macro B <code>IF [<cond>] THEN <body></code>\nsingle-block conditional record. Stamped on the host block by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax\" data-throw-if-not-resolved=\"false\"></xref> after the gate\ndecision; produced earlier by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref> as a parsing-stage\nsub-section (<code>Parsing.FanucIfThen</code>) carrying the raw captured fields\nplus an internal <code>PendingAssignments</code> sub-object harvested from the\nbody text.</p>\n<p>\nSpec: <code>IF [bool-expr] THEN <stmt></code> executes <code><stmt></code>\nonly when the condition is truthy. Unlike <xref href=\"Hi.NcParsers.Keywords.FanucGoto\" data-throw-if-not-resolved=\"false\"></xref>'s\nconditional form there is no jump — the body affects the current block\nonly, no source splice, no label scan, no iteration watchdog. The most\ncommon body shape is a single Custom Macro B assignment\n(<code>#nnn = <expr></code>); multiple assignments in one body are also\naccepted and lifted together.\n</p>\n<p>\n<xref href=\"Hi.NcParsers.Keywords.FanucIfThen.Condition\" data-throw-if-not-resolved=\"false\"></xref> is held as a string at parsing time so\nVariableEvaluatorSyntax's pass-2 tree walk can substitute\nit to a numeric <xref href=\"System.Text.Json.Nodes.JsonValue\" data-throw-if-not-resolved=\"false\"></xref> in place;\nthe FanucIfThenSyntax tail then reads the resolved node polymorphically\nvia the same <code>ReadCondition</code> shape used by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref>.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucIfThen.yml\" sourcestartlinenumber=\"1\">Fanuc Custom Macro B <code>IF [<cond>] THEN <body></code>\nsingle-block conditional record. Stamped on the host block by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax\" data-throw-if-not-resolved=\"false\"></xref> after the gate\ndecision; produced earlier by\n<xref href=\"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax\" data-throw-if-not-resolved=\"false\"></xref> as a parsing-stage\nsub-section (<code>Parsing.FanucIfThen</code>) carrying the raw captured fields\nplus an internal <code>PendingAssignments</code> sub-object harvested from the\nbody text.</p>\n<p>\nSpec: <code>IF [bool-expr] THEN <stmt></code> executes <code><stmt></code>\nonly when the condition is truthy. Unlike <xref href=\"Hi.NcParsers.Keywords.FanucGoto\" data-throw-if-not-resolved=\"false\"></xref>'s\nconditional form there is no jump — the body affects the current block\nonly, no source splice, no label scan, no iteration watchdog. The most\ncommon body shape is a single Custom Macro B assignment\n(<code>#nnn = <expr></code>); multiple assignments in one body are also\naccepted and lifted together.\n</p>\n<p>\n<xref href=\"Hi.NcParsers.Keywords.FanucIfThen.Condition\" data-throw-if-not-resolved=\"false\"></xref> is held as a string at parsing time so\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax\" data-throw-if-not-resolved=\"false\"></xref>'s pass-2 tree walk can substitute\nit to a numeric <xref href=\"System.Text.Json.Nodes.JsonValue\" data-throw-if-not-resolved=\"false\"></xref> in place;\nthe FanucIfThenSyntax tail then reads the resolved node polymorphically\nvia the same <code>ReadCondition</code> shape used by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax\" data-throw-if-not-resolved=\"false\"></xref>.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -11404,7 +11404,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.Keywords.FanucMacroCall",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucMacroCall.yml\" sourcestartlinenumber=\"1\">One-shot custom-macro-call record written by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>. Lives on both the\n<code>G65</code> host block (the caller) and every inlined block of the\nmacro body — so a cache-dump reader can land on any block inside the\nmacro and immediately see “this block belongs to a G65 call of\nFile with these argument bindings” without back-walking\nto find the host.</p>\n<p>\nEach inlined block additionally carries the resolved\n<code>Vars.Local</code> <code>#1-#26</code> bindings derived from <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall.Args\" data-throw-if-not-resolved=\"false\"></xref>\n(see <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap\" data-throw-if-not-resolved=\"false\"></xref>), so\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup\" data-throw-if-not-resolved=\"false\"></xref>\nresolves macro args in a single-block lookup. Frame isolation is\nstructural: caller blocks never have <code>Vars.Local</code> written, so\nafter the macro body ends, the next caller block reads <code>null</code>\nfor any <code>#1-#26</code> without any explicit frame marker.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.FanucMacroCall.yml\" sourcestartlinenumber=\"1\">One-shot custom-macro-call record written by\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>. Lives on both the\n<code>G65</code> host block (the caller) and every inlined block of the\nmacro body — so a cache-dump reader can land on any block inside the\nmacro and immediately see “this block belongs to a G65 call of\n<xref href=\"Hi.NcParsers.Keywords.FanucMacroCall.FileName\" data-throw-if-not-resolved=\"false\"></xref> with these argument bindings” without back-walking\nto find the host.</p>\n<p>\nEach inlined block additionally carries the resolved\n<code>Vars.Local</code> <code>#1-#26</code> bindings derived from <xref href=\"Hi.NcParsers.Keywords.FanucMacroCall.Args\" data-throw-if-not-resolved=\"false\"></xref>\n(see <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap\" data-throw-if-not-resolved=\"false\"></xref>), so\n<xref href=\"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup\" data-throw-if-not-resolved=\"false\"></xref>\nresolves macro args in a single-block lookup. Frame isolation is\nstructural: caller blocks never have <code>Vars.Local</code> written, so\nafter the macro body ends, the next caller block reads <code>null</code>\nfor any <code>#1-#26</code> without any explicit frame marker.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -11964,7 +11964,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.Keywords.MacroFrame",
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.MacroFrame.yml\" sourcestartlinenumber=\"1\">Top-level integer marker stamped onto a SyntaxPiece's JSON\nto identify which call frame the block belongs to. Brand-agnostic by\ndesign — written by <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>\ntoday, reusable by any future call-inlining syntax (Fanuc <code>G66</code>\nmodal expansion, Heidenhain <code>LBL CALL</code>, …) that needs\nlocal-variable isolation across call boundaries.</p>\n<p>\nSemantics: the value is an opaque id; only equality matters. Two\nblocks with the same <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> id share a call frame\n(locals visible across them via single-step carry); two blocks with\ndifferent ids do not. The id <code>0</code> is reserved for the main\nprogram frame and is returned by <xref href=\"Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject)\" data-throw-if-not-resolved=\"false\"></xref> when the field is\nabsent — so a plain caller block needs no stamp and yet compares\ndistinct from any inlined frame.\n</p>\n<p>\nStored as a top-level JSON int (not an object section) so it stays\nlightweight on every inlined block. Decoupled from\n<xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref>: that section is a diagnostic record of\nthe call (what file, what args), while <code>MacroFrame</code> is the\npurely functional marker the local-variable I/O syntaxes consult.\n</p>\n"
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.Keywords.MacroFrame.yml\" sourcestartlinenumber=\"1\">Top-level integer marker stamped onto a <xref href=\"Hi.NcParsers.Syntaxs.SyntaxPiece\" data-throw-if-not-resolved=\"false\"></xref>'s JSON\nto identify which call frame the block belongs to. Brand-agnostic by\ndesign — written by <xref href=\"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax\" data-throw-if-not-resolved=\"false\"></xref>\ntoday, reusable by any future call-inlining syntax (Fanuc <code>G66</code>\nmodal expansion, Heidenhain <code>LBL CALL</code>, …) that needs\nlocal-variable isolation across call boundaries.</p>\n<p>\nSemantics: the value is an opaque id; only equality matters. Two\nblocks with the same <xref href=\"Hi.NcParsers.Keywords.MacroFrame\" data-throw-if-not-resolved=\"false\"></xref> id share a call frame\n(locals visible across them via single-step carry); two blocks with\ndifferent ids do not. The id <code>0</code> is reserved for the main\nprogram frame and is returned by <xref href=\"Hi.NcParsers.Keywords.MacroFrame.Get(System.Text.Json.Nodes.JsonObject)\" data-throw-if-not-resolved=\"false\"></xref> when the field is\nabsent — so a plain caller block needs no stamp and yet compares\ndistinct from any inlined frame.\n</p>\n<p>\nStored as a top-level JSON int (not an object section) so it stays\nlightweight on every inlined block. Decoupled from\n<xref href=\"Hi.NcParsers.Keywords.FanucMacroCall\" data-throw-if-not-resolved=\"false\"></xref>: that section is a diagnostic record of\nthe call (what file, what args), while <code>MacroFrame</code> is the\npurely functional marker the local-variable I/O syntaxes consult.\n</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
@@ -12776,7 +12776,7 @@
|
||||
"Uid": null,
|
||||
"IsMRef": true,
|
||||
"Title": "Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax",
|
||||
"Summary": null
|
||||
"Summary": "<p sourcefile=\"api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.yml\" sourcestartlinenumber=\"1\">G28 reference point return syntax. Behaviour is documented in detail\non the example attached to <xref href=\"Hi.NcParsers.LogicSyntaxs.BareG28Behavior\" data-throw-if-not-resolved=\"false\"></xref>; this class\nis the <xref href=\"Hi.NcParsers.Syntaxs.ISituNcSyntax\" data-throw-if-not-resolved=\"false\"></xref> implementation that the\n<xref href=\"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.BareG28\" data-throw-if-not-resolved=\"false\"></xref> property configures.</p>\n"
|
||||
},
|
||||
{
|
||||
"type": "ManagedReference",
|
||||
|
||||
Reference in New Issue
Block a user