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
@@ -238,6 +238,40 @@ to store typed values at parse time.
</h2>
<a id="Hi_NcParsers_Syntaxs_SyntaxPiece_IsFrozen_" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.IsFrozen*"></a>
<h3 id="Hi_NcParsers_Syntaxs_SyntaxPiece_IsFrozen" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.IsFrozen">
IsFrozen
</h3>
<div class="markdown level1 summary"><p>True when the parse result is held as a frozen UTF-8 snapshot instead
of a live <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> graph — see
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze">Freeze()</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsFrozen { 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.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject_" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.JsonObject*"></a>
<h3 id="Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.JsonObject">
@@ -246,6 +280,19 @@ to store typed values at parse time.
</h3>
<div class="markdown level1 summary"><p>Structured parse result built by syntax passes.</p>
<p>
While the piece is live (the default), this is the one mutable
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> every pipeline stage
reads and writes. After <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze">Freeze()</a>, the getter re-parses the
frozen UTF-8 snapshot and returns a FRESH object on every call — treat
it as a read-only snapshot: mutations land on the transient copy and
are lost, and two calls return different object references. All
mutating consumers run before the freeze boundary (see
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze">Freeze()</a>), so downstream readers (NC optimization,
writeback composition, GUI JSON panels) see identical content either
way. Setting this property replaces the live object and discards any
frozen snapshot.
</p>
</div>
<div class="markdown level1 conceptual"></div>
@@ -309,14 +356,27 @@ to store typed values at parse time.
</h3>
<div class="markdown level1 summary"><p>0-based ordinal in NC execution order. Stamped at piece construction
time by <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> from the destination
<code>layers[0]</code>'s running count, so subprogram pieces inlined by
<code>SubProgramCallSyntax</code> get sequential indices that interleave
correctly between host blocks. Useful as a cross-process alignment
key (messages, ClStripPos, MachiningStep) — unlike
<code>FileLineUtil.MixedIndex()</code>, it reflects execution order rather
than (FileIndex, LineIndex) source order.</p>
<div class="markdown level1 summary"><p>0-based, session-globally unique ordinal in NC execution order.
Stamped at piece construction time by
<a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> from the session's
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html">SentenceIndexCounterDependency</a>:
each piece allocates the next counter value as the lazy pipeline
materializes it, so values are strictly increasing along the executed
stream — subprogram / macro bodies inlined by
<code>SubProgramCallSyntax</code> and friends interleave correctly between
host blocks, including nested calls. Useful as a cross-process
alignment key (messages, ClStripPos, MachiningStep) — unlike the
<code>(FileIndex, LineIndex)</code> source order, it reflects execution order.</p>
<p>
Values are NOT contiguous per file: eager label scans
(<code>LabelScanUtil</code> / <code>RewindToLine</code>) number the whole
re-segmented file and discard the pre-label prefix, leaving gaps.
Never negative — <code>-1</code> stays reserved as the "not in pipeline"
sentinel on downstream carriers. When the counter dependency is
absent (legacy XML preset), numbering falls back to the caller's
contiguous begin-index sequence, which can double-book across
inline boundaries.
</p>
<p>
Required at construction: the index is identity, not optional metadata.
Read-only after construction; the pipeline guarantees one stamping per
@@ -350,6 +410,49 @@ piece at the wrapping chokepoint.
</h2>
<a id="Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze_" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.Freeze*"></a>
<h3 id="Hi_NcParsers_Syntaxs_SyntaxPiece_Freeze" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.Freeze">
Freeze()
</h3>
<div class="markdown level1 summary"><p>Replaces the live <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> graph with its compact
UTF-8 serialization (~13× smaller live-memory footprint per retained
piece), keeping the piece readable through the <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a>
getter via on-demand re-parse. Uses
<a class="xref" href="Hi.Common.JsonUtil.html#Hi_Common_JsonUtil_CompactNanOptions">CompactNanOptions</a> — the exact leaf encoding of
<a class="xref" href="Hi.Common.JsonUtil.html#Hi_Common_JsonUtil_ToLeafCompactJsonString_System_Text_Json_Nodes_JsonNode_System_Text_Json_JsonSerializerOptions_">ToLeafCompactJsonString(JsonNode, JsonSerializerOptions)</a> — so the JSON projection
of a frozen piece is byte-identical to the live one (NaN / Infinity
serialize as quoted literal strings; explicit nulls survive).</p>
<p>
Call only after every mutating consumer of this piece has run — the
session pipeline freezes a piece once it left the executing window
(its semantics completed plus a lag margin; see
<code>MachiningProcs.NcRunnerSessionState</code>). Idempotent; a piece with a
null <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> stays null. Thread-safe against
concurrent readers: they observe either the live graph or the frozen
snapshot, never a torn state.
</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Freeze()</code></pre>
</div>
<a id="Hi_NcParsers_Syntaxs_SyntaxPiece_GetSentence_" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.GetSentence*"></a>
<h3 id="Hi_NcParsers_Syntaxs_SyntaxPiece_GetSentence" data-uid="Hi.NcParsers.Syntaxs.SyntaxPiece.GetSentence">