This reference contains 101 owner topics: 98 owners with current ReadFromXML and SaveToXML implementations, TBtnEditProperty with an inherited writer, the TScript document wrapper, and the retained legacy TFontAttr _XXX pair. It is derived from the original 44 curated Pascal units, supplemented by the v2 helpers/defaults and v3 GenTokens UI sources and is intended for advanced users and assistants editing scripts.
The file names are unique topic IDs. The property class cpSaintsSets.TSaintsSets and the record TypeDefinitions.TSaintsSets are intentionally separate. Supplemental topics document shared encodings and the package index.
The composition section links to structures used directly by the supplied XML routines: delegated serializers, records whose fields are read or written, and records used in XML conversion/default logic. Inheritance has its own link. Supporting records without separate topics link to their member details within the current topic. The list does not expand unused members of generic property records or recursively include every child type of a linked structure.
Read the introductory notes for identity, activation gates and implementation questions.
Use the exact field reference for names, values, conditions and read/write asymmetry. All element and attribute spelling is literal.
Check both the initialization defaults and any value explicitly set immediately before a read. Omission, an empty node and an explicit default_vals profile are distinct cases.
Follow child and inherited links to compose the complete schema. A descendant can add fields around a nested record.
Expand Implementation for exact statement order, conversions, loops, compatibility branches and setter effects. It contains the relevant supplied Pascal routines, including local helper procedures.
Notation |
Meaning |
. |
The current node passed to a record/property method. |
../property |
A property node created under the parent scriptline; field paths normalize this envelope where possible. |
@name |
An XML attribute. |
{expression} |
A symbolic string/slot expression, not literal curly braces to insert in XML. |
FOR / WHILE / REPEAT conditions |
Collection traversal and its bounds/termination, not additional XML syntax. |
'' |
An empty Pascal string; the XML value is empty text, not two quote characters. |
Default(T) |
Zero/default record state (numeric and ordinal zero, booleans false, empty managed strings/sets, nil references). This is separate from calling T.Initialize. |
FillChar(..., 0) |
Clears storage; later explicit assignments or initializers can override it. |
ord(enumValue) |
Zero-based declared ordinal (unless explicitly assigned otherwise). The value tables give the namespace. |
Round(value × factor) |
Export scales then rounds. Use the exact factor and the reader’s inverse; runtime tie handling was not tested. |
Trunc(value × factor) |
Export scales then removes the fractional part toward zero. It is not the same as Round. |
StrToInt / StrToFloat |
Explicit string-to-number conversion; invalid values can raise. Locale/format helpers must be considered where used. |
StrToIntDef / StrToFloatDef |
Conversion with the supplied fallback argument. |
pred(x) / succ(x) |
x−1 / x+1 for the ordinal or index in that expression. |
low(T) / high(T) |
First/last declared array index or enum member. Named external bounds are not guessed. |
Include / Exclude |
Add/remove a member of an in-memory set. Its XML encoding is still determined by the writer. |
ReadNodeValue contract (fn_XML supplied in v2)
Situation |
Behavior at the helper boundary |
Parent node is nil, or no matching child |
Leave the destination unchanged. A caller may already have initialized or overwritten it. |
Child exists: string |
Assign node.Text, including an empty string. |
Child exists: Char |
Use its first character, or a space when text is empty. |
Child exists: Boolean |
Call System.SysUtils.StrToBool; conversion errors propagate from the helper. This is not the custom StringToBool function. |
Integer types |
Call StrToInt, then assign to the destination. The Int64 overload also calls StrToInt, not StrToInt64. |
Enum types |
Convert with StrToInt then cast to the enum. No explicit legal-value check is implemented here. |
TmcTextStyle |
Call the supplied StringToTextStyle converter. |
Attribute filter supplied |
Find the first matching named child with the requested attribute and value. |
A missing element is not a universal instruction to reset or preserve a script setting. First inspect the enclosing reader: it may initialize the whole record, seed a temporary, retain existing values, or dereference a required child directly. Empty numeric text and malformed numeric text are conversion attempts, not missing-element defaults. Range-check behavior depends on the compiled application; use documented valid values.
XML library lookup and text behavior
TXmlNode.Find searches direct children, returning the first matching node. Matching is case-sensitive by default; doCaseInsensitive changes document comparisons, including attribute-value filtering. AddPairToXmlNode always creates a child, sets an optional attribute, and assigns text: it does not update an existing child or omit an empty string. Avoid introducing duplicate elements.
Xml.VerySimple starts without doPreserveWhiteSpace. Its simple element-text parser discards whitespace-only content in that mode, while retaining the whole text if any non-whitespace character occurs. Preserve spelling and existing text encodings, especially fields where a single space is meaningful. Document options can change this behavior; this is not a blanket claim about all call sites.
Q++Studio control-character escaping
In-memory character |
Text emitted in the XML file |
NUL (#0) |
� |
BEL (#7) |
 |
Tab (#9) |
	 |
Line feed (#10) |

 |
Carriage return (#13) |

 |
Escape first replaces these control characters with zero-padded numeric-looking strings, then escapes ampersands. Unescape resolves named entities, including ampersands, then replaces the five special strings above. It is not a general numeric-character-reference decoder. A generic XML parser sees 	 as the literal text 	; Q++Studio performs the additional conversion. Do not blindly unescape twice or normalize these markers while editing.
The clone helpers preserve node text and attributes and optionally recurse. CloneNodeChildren declares cnoDeleteChildrenFirst but does not test or implement it in the supplied body; it appends children. ResetSLSequence numbers direct scriptline children consecutively from 1. These helpers do not by themselves validate scriptline nesting or establish the complete Update from XML workflow.
The supplied BoolToString returns lowercase true or false. The supplied StringToBool accepts case-insensitive true/false, 1 and -1 for true, and 0 for false; other strings raise EConvertError. This establishes those specific helpers. The supplied Boolean ReadNodeValue overload instead uses System.SysUtils.StrToBool. StringToBoolDef has a separate defaulting implementation in Values and encodings.
Resource references and indices
A child id attribute often identifies an array position, while element text identifies a database resource. Other id attributes use vowel letters or local option ordinals. Never treat all id values as one namespace. Templates, languages, holidays sets, astronomical/religious sources, macros and SARA sets can require resources already present in the target installation.
Dense collections stop at the first gap; macro slots and GenTokens special cases are searched independently. Check each topic. Do not change a count without supplying the matching indexed payload or assume document order replaces explicit IDs.
Known limits of the supplied source set
Remaining gaps include date XML conversion helpers, fixed-buffer string helpers, several property DataValue setters, script line constructors/registration, and generator/evaluator code. The v2 package supplies fn_XML, Xml.VerySimple, the holiday property defaults and the legacy mini-calendar reader; v3 adds GenTokens editor mappings. These omissions prevent a universal guarantee that every arbitrary partial XML script can be created/imported solely from these topics. The supplied serialization and initialization behavior is preserved here, and the missing semantics are marked explicitly.
The extractor records static branches. It does not compile Delphi conditional symbols or execute the program. The record serializers under IFNDEF STAND_ALONE are documented for the full application. AQTEST diagnostics in the script loader are not a separate supported XML format.
Displayed code omits commented-out Pascal statements and obsolete declarations while retaining explanatory comments and compiler directives. Active tokens and directives are checked against the supplied excerpts. The structured audit data retains the original source text.
All 101 owner declarations were found. The 440 selected owner methods and 30 supporting methods parsed without a structural parser failure. A separate lexical check accounts for every one of the 1,815 ReadNodeValue, AddPairToXmlNode, AddChild and SetAttribute call tokens in the selected owner methods. This is coverage evidence, not a proof of Delphi runtime equivalence or a validation of every accepted input.
Source names and implementation line numbers provide provenance. There are no separate PAS files in the archive. The authorized serialization and initialization excerpts appear inside expandable Implementation sections. The machine-readable data also retains the extracted events and original routine text.
Topics/*.xml contains standalone UTF-8 Help & Manual topic files using the project styles demonstrated in the supplied TDateConditionsRec-Values.xml: Normal for body and table-cell text, Heading1 for the topic title, Intopic Header_atoc_ for section headings, and Frame+10pt inset for native tables. Smaller subheadings use the Intopic Subheader_atocs_ project style. Implementation uses the supplied dropdown toggle, a one-cell Default table and Code Example paragraphs with Object Pascal highlighting; it starts collapsed in help and expands for printing. Paragraph spacing follows the blank Normal paragraphs in the reference topic. The installed project supplies the actual font, spacing and table-style definitions. This package is not an .hmxp project; revised native H&M rendering has not been run here.
Format reference: Generating H&M XML.
Import procedure reference: Loading and saving topic content.
Topic 189305, last updated on 03-Oct-2026