fix SoftNcRunner GM code normalization.

This commit is contained in:
2026-05-16 18:08:13 +08:00
parent e026da61b3
commit 8b285cc863
765 changed files with 18689 additions and 9785 deletions
@@ -169,6 +169,14 @@ Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.FanucPathSmoothing.html">FanucPathSmoothing</a></dt>
<dd><p>Section data holder for <a class="xref" href="Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html">IFanucPathSmoothingDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html">FanucProgramNumber</a></dt>
<dd><p>Fanuc-family program identifier header that follows a
<a class="xref" href="Hi.NcParsers.Keywords.TapeBoundary.html">TapeBoundary</a> line — e.g. <code>O1234</code> or
<code>&lt;O1234&gt;</code>. <a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html#Hi_NcParsers_Keywords_FanucProgramNumber_Wrapper">Wrapper</a> records the surface form
so a parsed block can be emitted back to the original notation.</p>
</dd>
</dl>
<dl class="jumplist">
@@ -232,13 +240,6 @@ do not share this key, because their data shapes are richer.
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html">IPositioningDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ProgramBoundary.html">ProgramBoundary</a></dt>
<dd><p>Program start/end delimiter line (e.g., <code>%</code> in Fanuc/Mazak/Syntec,
<code>%_N_xxx_MPF</code> in Siemens).
Not a comment — the controller uses it as a tape/file boundary marker.</p>
</dd>
</dl>
<dl class="jumplist">
@@ -269,6 +270,33 @@ Not a comment — the controller uses it as a tape/file boundary marker.</p>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SpindleSpeed.html">SpindleSpeed</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SubProgramCall.html">SubProgramCall</a></dt>
<dd><p>Subprogram call record left on the M98 / M198 host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html">SubProgramCallSyntax</a> after the subprogram
file has been inlined into the source layer. The call itself emits no
motion act; this section is bookkeeping so cache dumps and diagnostic
readers can see &quot;this block triggered an inline of file <code>File</code>&quot;.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SubProgramReturn.html">SubProgramReturn</a></dt>
<dd><p>Subprogram return record left on the M99 host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html">SubProgramReturnSyntax</a>. Return blocks
produce no motion acts; this section makes the consumed M99 visible
in cache dumps and reserves a slot for future <code>M99 P{seq}</code>
(return-to-sequence-number) support.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.TapeBoundary.html">TapeBoundary</a></dt>
<dd><p>Tape leader / trailer line — the literal <code>%</code> that historically
marked the start and end of a punched paper-tape program. ISO-style
controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a
file-level boundary marker. Distinct from a comment: the controller
uses it as a tape/file delimiter, not as embedded operator text.</p>
</dd>
</dl>
<dl class="jumplist">
@@ -284,6 +312,30 @@ Not a comment — the controller uses it as a tape/file boundary marker.</p>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Unit.html">Unit</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IUnitDef.html">IUnitDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Vars.html">Vars</a></dt>
<dd><p>JSON section schema for per-block variable storage. Each sub-property
names a sub-section that holds a <code>{ &ldquo;#nnn&rdquo;: value }</code> dictionary
keyed by Fanuc-style variable id.</p>
<p>
The sub-sections partition the variable space by lifetime:
</p>
<ul><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_Local">Local</a><code>#1-#33</code>, scope: macro call frame
(pushed/popped by G65 / G66 / M99).</li><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_Volatile">Volatile</a><code>#100-#499</code>, non-retained common;
carries block-to-block, cleared by <code>ProgramEndCleanSyntax</code> on M02 / M30.</li><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_SystemControl">SystemControl</a><code>#3000-#3999</code>, controller-side
system variables; offline-only round-trip record (real controller
effects such as clock reset / alarm trigger / message pause are not
simulated).</li></ul>
<p>
The property types are <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> rather than strongly-typed
dictionaries because each sub-section's keys are dynamic Fanuc variable
ids (<code>#100</code>, <code>#5001</code>, …) discovered at parse time, not a fixed
schema. This class exists solely to give the section name and sub-keys
stable <code>nameof()</code> targets — instances are never constructed at
runtime.
</p>
</dd>
</dl>
<h3 id="interfaces">