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
@@ -181,19 +181,33 @@ rather than {prefix}{digits}.</p>
</dd></dl>
<h2 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_examples">Examples</h2>
<p>#BeforeBuild.UnparsedText: <code>_X_HOME=500.0</code>
#AfterBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "Assignments": { "_X_HOME": "500.0" } }
}</code></pre>
<p>#BeforeBuild.UnparsedText: <code>_A=5 X=100</code> (the RHS stops at the next assignment-looking token; single-letter <code>X=</code> is not an identifier here and is left for the tag-value syntaxes)
#AfterBuild:</p>
<pre><code class="lang-csharp">{
"UnparsedText": "X=100",
"Parsing": { "Assignments": { "_A": "5" } }
}</code></pre>
<h2 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><ul><li>Siemens GUD: _X_HOME = 100, _MY_VAR = R1 + R2</li><li>Siemens LUD: DEF REAL MY_LOCAL; MY_LOCAL = 50</li></ul>
Unlike <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a> which handles
{prefix}{digits} variables (e.g., #1, R1, Q5),
this class handles multi-character identifier variables.
Identifiers must be at least 2 characters to avoid overlap with
single-letter axis tags (X, Y, Z, etc.).
<p>
<b>Ordering:</b> Must be placed before <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a>
in syntax lists so that multi-char identifiers (e.g., _X_HOME) are consumed
before {prefix}{digits} patterns (e.g., R1) attempt to match.
</p>
Unlike <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a> which captures only the numbered
{prefix}{digits} family (#1, R1, Q5), this identifier grammar is broader
and also matches letter+digits tokens such as <code>R1</code>. The overlap is
benign by construction: both assignment syntaxes route to the same
<code>Parsing.Assignments</code> subtree with the same JSON shape, and a preset
must give both the same <code>TerminateWords</code>; their RHS boundary rules are
likewise aligned (any following <code>token=</code> stops the expression). A
token captured by either therefore lands as the exact same JSON, so the
relative ordering of the two syntaxes does not affect output.
Identifiers must be at least 2 characters so single-letter axis addresses
(<code>X=100</code>) stay with the tag-value syntaxes.
</div>
@@ -220,7 +234,9 @@ keywords, and an identifier regex pattern.</p>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>categoryPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd><p>JSON path under <code>Parsing</code> where assignments are written.</p>
<dd><p>JSON path under <code>Parsing</code> where assignments are written.
Pass <code>null</code> to use <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_DefaultCategoryPath">DefaultCategoryPath</a> (<code>Parsing.Assignments</code>).
Pass an empty collection only if assignments should land at the <code>Parsing</code> root.</p>
</dd>
<dt><code>terminateWords</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd><p>Optional keywords that end the right-hand expression.</p>
@@ -284,7 +300,11 @@ keywords, and an identifier regex pattern.</p>
</h3>
<div class="markdown level1 summary"><p>Default identifier regex (at least 2 characters; first char letter or underscore).
<div class="markdown level1 summary"><p>Default identifier regex (at least 2 characters; first char letter or
underscore). The 2-character minimum keeps single-letter axis addresses
(<code>X=100</code>) with the tag-value syntaxes. Letter+digits tokens (R1)
also match — that overlap with <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a> is
benign by construction (see the class remarks).
Used when <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_IdentPattern">IdentPattern</a> is not overridden.</p>
</div>
<div class="markdown level1 conceptual"></div>
@@ -346,6 +366,42 @@ Used when <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSy
<a id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_DefaultCategoryPath_" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.DefaultCategoryPath*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_DefaultCategoryPath" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.DefaultCategoryPath">
DefaultCategoryPath
</h3>
<div class="markdown level1 summary"><p>Default <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_CategoryPath">CategoryPath</a> assigned when the caller passes <code>null</code>
(or omits the <code>&lt;CategoryPath&gt;</code> element in saved XML).
Routes assignment outputs into <code>Parsing.Assignments</code> — the same subtree
as <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagAssignmentSyntax_DefaultCategoryPath">DefaultCategoryPath</a> — so variable-reading
syntaxes can target a single well-defined location.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static IReadOnlyList&lt;string&gt; DefaultCategoryPath { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ireadonlylist-1">IReadOnlyList</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_IdentPattern_" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.IdentPattern*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_IdentPattern" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.IdentPattern">
@@ -411,6 +467,44 @@ Default: <code>[A-Za-z_]\w+</code> (at least 2 characters).</p>
<a id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_RhsDialect_" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.RhsDialect*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_RhsDialect" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.RhsDialect">
RhsDialect
</h3>
<div class="markdown level1 summary"><p>Expression grammar delimiting the RHS (parser-delimited capture):
when set, the longest valid expression prefix ends the RHS —
superseding <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_TerminateWords">TerminateWords</a> on matches where a prefix
parses. Default <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_NcExpressionDialect_None">None</a> keeps the
legacy lexical boundary. Must stay in sync with the value on
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html#Hi_NcParsers_ParsingSyntaxs_TagAssignmentSyntax_RhsDialect">RhsDialect</a> in the same preset
(the P0 behavior-alignment contract).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public NcExpressionDialect RhsDialect { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html">NcExpressionDialect</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_TerminateWords_" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.TerminateWords*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_NamedVarAssignmentSyntax_TerminateWords" data-uid="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.TerminateWords">