HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html

630 lines
25 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FanucWhileDoSyntax | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucWhileDoSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Resolves Fanuc Custom Macro B WHILE [..] DO m ... END m bounded loops. Two phrases dispatched by : WHILE [..] DO m — entry: reads the resolved condition via , manages the per-LoopId frame in the top-level WhileFrames dict, and either falls through (truthy) or forward-jumps past the matching END m (falsy / unresolved).END m — terminator: unconditionally reverse-jumps to the WHILE block recorded in WhileFrames[LoopId].BeginLineNo so the next iteration re-evaluates the entry condition. Increments the per-loop iteration counter on ; suppresses the redirect above . WhileFrames carrier. The top-level WhileFrames JSON section is a keyed by LoopId-as-string whose values are { BeginLineNo: int }. Frames are pushed when a WHILE block first encounters a truthy condition with no existing frame for that LoopId; popped when the condition becomes falsy or unresolved; otherwise carried forward unchanged by &#39;s tracked-key list. Nested loops with distinct LoopIds coexist in the same dict; same-LoopId nesting (spec-undefined) overwrites and is not given special handling. Pipeline placement. Evaluation bundle, after the variable readers (defensive — WHILE/END blocks per spec do not carry assignments, but the placement is consistent with GOTO). Must run after so the condition string has been substituted to numeric. Forward scan to matching END m uses the predicate overload — probe runs the brand-default on each candidate, predicate matches on Parsing.FanucWhileDo.Term == &quot;END&quot; &amp;amp;&amp;amp; LoopId == target. Reverse scan to WHILE BeginLineNo does not need a label predicate — the BeginLineNo is a known file-line index recorded in the active frame, so the END side re-segments the file from the top and returns the slice starting at the first piece whose .Begin.LineIndex matches.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax">
<h1 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax" class="text-break">
Class FanucWhileDoSyntax
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.NcParsers.html">NcParsers</a>.<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.html">EvaluationSyntaxs</a>.<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.html">Fanuc</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Resolves Fanuc Custom Macro B <code>WHILE [..] DO m ... END m</code>
bounded loops. Two phrases dispatched by
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Term">Term</a>:</p>
<ul><li><code>WHILE [..] DO m</code> — entry: reads the resolved condition
via <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a>, manages the per-LoopId
frame in the top-level <code>WhileFrames</code> dict, and either falls
through (truthy) or forward-jumps past the matching END m
(falsy / unresolved).</li><li><code>END m</code> — terminator: unconditionally reverse-jumps to
the WHILE block recorded in <code>WhileFrames[LoopId].BeginLineNo</code>
so the next iteration re-evaluates the entry condition. Increments
the per-loop iteration counter on
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html">FanucWhileDoIterationDependency</a>; suppresses the
redirect above <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>.</li></ul>
<p>
<b>WhileFrames carrier.</b> The top-level <code>WhileFrames</code> JSON
section is a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> keyed by LoopId-as-string
whose values are <code>{ BeginLineNo: int }</code>. Frames are pushed when
a WHILE block first encounters a truthy condition with no existing
frame for that LoopId; popped when the condition becomes falsy or
unresolved; otherwise carried forward unchanged by
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>'s
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Logic">Logic</a> tracked-key
list. Nested loops with distinct LoopIds coexist in the same dict;
same-LoopId nesting (spec-undefined) overwrites and is not given
special handling.
</p>
<p>
<b>Pipeline placement.</b> Evaluation bundle, after the variable
readers (defensive — WHILE/END blocks per spec do not carry
assignments, but the placement is consistent with GOTO). Must run
after <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> so the condition string
has been substituted to numeric.
</p>
<p>
<b>Forward scan to matching END m</b> uses the
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a> predicate overload — probe runs the
brand-default <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a> on each
candidate, predicate matches on
<code>Parsing.FanucWhileDo.Term == "END" &amp;&amp; LoopId == target</code>.
</p>
<p>
<b>Reverse scan to WHILE BeginLineNo</b> does not need a label
predicate — the BeginLineNo is a known file-line index recorded in
the active frame, so the END side re-segments the file from the top
and returns the slice starting at the first piece whose
<a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_CharIndexSegment">CharIndexSegment</a>.<code>Begin.LineIndex</code>
matches.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucWhileDoSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">FanucWhileDoSyntax</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__1___0_System_Action___0__">InvokeUtil.SelfInvoke&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><h2 id="worked-example--three-iteration-while--do-m--end-m">Worked Example — Three-iteration <code>WHILE [..] DO m ... END m</code></h2>
<p>Given this Custom Macro B source:</p>
<pre><code class="lang-nc">#100 = 0
WHILE [#100 LT 3] DO 1
#100 = #100 + 1
END 1
X5
</code></pre>
<p>Each block flows through the runtime as below. The <code>WhileFrames</code> lifeline
represents the per-block active-loop state carried block-to-block by the
modal-carry pipeline; the <code>END</code> block consults it to find the WHILE line
to reverse-jump to. The runaway-loop counter ticks on every successful
<code>END</code> reverse-jump and suppresses further jumps above the configured
iteration limit.</p>
<pre><code class="lang-mermaid">sequenceDiagram
participant W as WHILE block
participant B as body
participant E as END block
participant X as X5
participant F as WhileFrames
Note over F: empty
Note over W: iter 1: cond=true (0 LT 3)
W-&gt;&gt;F: push {LoopId 1, BeginLineNo}
W-&gt;&gt;B: fall through
B-&gt;&gt;E:
Note over E: counter 0 to 1 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 2: cond=true (1 LT 3)
Note over W,F: frame exists, skip push
W-&gt;&gt;B: fall through
B-&gt;&gt;E:
Note over E: counter 1 to 2 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 3: cond=true (2 LT 3)
W-&gt;&gt;B:
B-&gt;&gt;E:
Note over E: counter 2 to 3 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 4: cond=false (3 LT 3)
W-&gt;&gt;F: pop LoopId 1
Note over W: forward jump past END
W-&gt;&gt;X:
</code></pre>
<p>After the loop exits, <code>X5</code> executes with <code>#100 = 3</code> in <code>Vars.Volatile</code>.</p>
</div>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor">
FanucWhileDoSyntax()
</h3>
<div class="markdown level1 summary"><p>Parameterless instance.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoSyntax()</code></pre>
</div>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor(System.Xml.Linq.XElement)">
FanucWhileDoSyntax(XElement)
</h3>
<div class="markdown level1 summary"><p>XML ctor (no child elements; reserved for forward compatibility).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoSyntax(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_BeginLineNoKey" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.BeginLineNoKey">
BeginLineNoKey
</h3>
<div class="markdown level1 summary"><p>Schema field inside each WhileFrames entry: the WHILE block's file-line index.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string BeginLineNoKey = &quot;BeginLineNo&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_WhileFramesKey" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.WhileFramesKey">
WhileFramesKey
</h3>
<div class="markdown level1 summary"><p>Top-level JSON key for the active-loop frame dict.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string WhileFramesKey = &quot;WhileFrames&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Name_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Name*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Name" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Syntax kind name (typically the concrete type name).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Name { 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.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_XName_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.XName*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_XName" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this syntax with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { 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.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Build_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Build*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Build(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Build syntax arrangement into the
<code class="paramref">syntaxPieceNode</code> in-place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Build(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></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></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Reg_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Reg*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>