deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.

This commit is contained in:
2026-08-27 14:51:37 +08:00
parent 1fc510af5e
commit 2a98ae7556
1468 changed files with 182837 additions and 18888 deletions
@@ -170,6 +170,120 @@ parenthesised comment stripped).
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_CanReadSource_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.CanReadSource*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_CanReadSource_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.CanReadSource(System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String)">
CanReadSource(List&lt;INcDependency&gt;, string, string)
</h3>
<div class="markdown level1 summary"><p>Whether a re-segmentation scan can obtain line content for
<code class="paramref">labelPath</code> — either an in-memory registration on
the pipeline's <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html">NcLineSourceDependency</a> (inline NC-code
plays, whose pseudo-path never exists on disk) or an existing file
at <code class="paramref">absPath</code>. Jump syntaxes use this as the
pre-scan guard in place of a bare <code>File.Exists(absPath)</code>, so
control flow inside inline plays is not misreported as a missing
host file.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool CanReadSource(List&lt;INcDependency&gt; ncDependencyList, string labelPath, string absPath)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>labelPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>absPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndRewindToLine_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndRewindToLine*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndRewindToLine_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Int32_Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndRewindToLine(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Int32,Hi.NcParsers.NcDiagnosticProgress)">
SegmentAndRewindToLine(ISegmenter, List&lt;INcDependency&gt;, string, string, int, int, int, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Re-segments <code class="paramref">absPath</code> and returns the slice
starting at the first piece whose file line index equals
<code class="paramref">beginLineIndex</code> — the loop back-jump primitive
(no label predicate, no probes). Extracted from the Fanuc WHILE/END
reverse jump so the Siemens loop family shares the same engine;
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a> delegates here unchanged.
Returns <code>null</code> when the line did not materialise as a segment
start.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;SyntaxPiece&gt; SegmentAndRewindToLine(ISegmenter segmenter, List&lt;INcDependency&gt; ncDependencyList, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int beginLineIndex, NcDiagnosticProgress diag)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>segmenter</code> <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd><p>Segmenter used to slice the file into <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> blocks.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>NC dependency list forwarded to <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> while re-segmenting the file.</p>
</dd>
<dt><code>absPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Absolute path to read line content from.</p>
</dd>
<dt><code>labelPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Project-relative path to stamp on each line's <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> label.</p>
</dd>
<dt><code>fileIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Fresh file index to stamp on each line, allocated by the caller from <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>.</p>
</dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Legacy fallback starting index — ignored when the pipeline carries a <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>.</p>
</dd>
<dt><code>beginLineIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>0-based file line index of the block to rewind to (the loop-entry line).</p>
</dd>
<dt><code>diag</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic sink for the re-segmentation.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__System_Func_System_Text_Json_Nodes_JsonObject_System_Boolean__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},System.Func{System.Text.Json.Nodes.JsonObject,System.Boolean},Hi.NcParsers.NcDiagnosticProgress)">
@@ -215,7 +329,7 @@ callers (Fanuc unconditional GOTO, M99 P{seq} jump) are unchanged.
<dd><p>Fresh file index to stamp on each scanned line, allocated by the caller from <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>.</p>
</dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Starting execution-order index for the produced pieces.</p>
<dd><p>Legacy fallback starting index for the produced pieces — ignored when the pipeline carries a <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>.</p>
</dd>
<dt><code>probeSyntaxes</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a>&gt;</dt>
<dd><p>Ordered list of helper syntaxes to run on each candidate block before the predicate check. May be null.</p>
@@ -244,6 +358,94 @@ callers (Fanuc unconditional GOTO, M99 P{seq} jump) are unchanged.
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__System_Func_System_Text_Json_Nodes_JsonObject_System_Boolean__System_Int32_Hi_NcParsers_EvaluationSyntaxs_LabelScanDirection_Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},System.Func{System.Text.Json.Nodes.JsonObject,System.Boolean},System.Int32,Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection,Hi.NcParsers.NcDiagnosticProgress)">
SegmentAndSkipUntilLabel(ISegmenter, List&lt;INcDependency&gt;, string, string, int, int, List&lt;ISituNcSyntax&gt;, Func&lt;JsonObject, bool&gt;, int, LabelScanDirection, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Anchored, direction-aware overload for the Siemens
<code>GOTOF</code>/<code>GOTOB</code> family (and any other scan that must not
see the whole file). The two legacy overloads above always scan the
whole file top-down and take the first match — that cannot express
&ldquo;forward only, from the jump site&rdquo; (<code>GOTOF</code>) or &ldquo;nearest label
above the jump site&rdquo; (<code>GOTOB</code>), and it silently mis-targets
when the same label text appears both before and after the host
line. Semantics here:</p>
<ul><li><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanDirection_ForwardFromAnchor">ForwardFromAnchor</a> — only
candidates whose file line index is strictly greater than
<code class="paramref">anchorLineIndex</code> are probed and matched; the
first match wins.</li><li><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanDirection_BackwardNearestToAnchor">BackwardNearestToAnchor</a> —
only candidates strictly above <code class="paramref">anchorLineIndex</code>
are probed and matched; the <em>last</em> match (largest line
index — nearest to the anchor) wins.</li></ul>
Candidates without a resolvable line index are skipped. The
returned slice runs from the matched block (inclusive — a label
line may carry trailing code) to EOF, exactly like the legacy
overloads; a backward jump is still "replace the source with the
slice from the target down", the same shape the WHILE reverse jump
uses. Returns <code>null</code> when no candidate matches.
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;SyntaxPiece&gt; SegmentAndSkipUntilLabel(ISegmenter segmenter, List&lt;INcDependency&gt; ncDependencyList, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, List&lt;ISituNcSyntax&gt; probeSyntaxes, Func&lt;JsonObject, bool&gt; match, int anchorLineIndex, LabelScanDirection direction, NcDiagnosticProgress diag)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>segmenter</code> <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd><p>Segmenter used to slice the file into <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> blocks.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>NC dependency list forwarded to <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> while re-segmenting the scanned file.</p>
</dd>
<dt><code>absPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Absolute path to read line content from.</p>
</dd>
<dt><code>labelPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Project-relative path to stamp on each line's <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> label.</p>
</dd>
<dt><code>fileIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Fresh file index to stamp on each scanned line, allocated by the caller from <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>.</p>
</dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Legacy fallback starting index for the produced pieces — ignored when the pipeline carries a <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>.</p>
</dd>
<dt><code>probeSyntaxes</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a>&gt;</dt>
<dd><p>Ordered list of helper syntaxes to run on each in-region candidate before the predicate check. May be null.</p>
</dd>
<dt><code>match</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
<dd><p>Per-candidate predicate on the probed block's JSON.</p>
</dd>
<dt><code>anchorLineIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>0-based file line index of the jump host block; the scan region excludes this line itself.</p>
</dd>
<dt><code>direction</code> <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html">LabelScanDirection</a></dt>
<dd><p>Scan region and match policy relative to the anchor.</p>
</dd>
<dt><code>diag</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Sink for any diagnostics produced by the probe syntaxes.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},Hi.NcParsers.NcDiagnosticProgress)">
@@ -257,10 +459,14 @@ a block whose <a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html#Hi_NcPa
<code class="paramref">probeSyntaxes</code> have stamped it in-place), and
returns the sub-list of pieces from that block to EOF.
Pieces are produced via
<a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> with
<code>SentenceIndex</code> stamped starting at
<code class="paramref">sentenceIndexBegin</code>. Returns <code>null</code> when
no match is found; the caller emits its own brand-specific
<a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a>, which stamps
<code>SentenceIndex</code> from the session's
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>
when present (the whole re-segmented file is numbered eagerly, so the
discarded pre-label prefix leaves a gap in the sequence) and falls
back to contiguous numbering from
<code class="paramref">sentenceIndexBegin</code> otherwise. Returns <code>null</code>
when no match is found; the caller emits its own brand-specific
&ldquo;label not found&rdquo; diagnostic.</p>
<p>
The predicate is fixed at the
@@ -298,7 +504,7 @@ participating in this scan.
<dd><p>Fresh file index to stamp on each scanned line, allocated by the caller from <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>.</p>
</dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Starting execution-order index for the produced pieces.</p>
<dd><p>Legacy fallback starting index for the produced pieces — ignored when the pipeline carries a <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>.</p>
</dd>
<dt><code>targetN</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Integer label target to match against <a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html#Hi_NcParsers_Keywords_IndexNote_Number">Number</a>.</p>