Šķîþ ţö ḿàîñ çöñţéñţ

Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ

Šüḿḿàŕý

Đöçüḿéñţš àŕé à šţŕéàḿ öƒ Part ṽàļüéš, éàçĥ çàŕŕýîñĝ à PartType đîšçŕîḿîñàţöŕ àñđ à Resource. Ḿöđîƒîàƃļé çöñţéñţ îš à Block, àñđ à Ƃļöçķ'š çöñţéñţ îš à ƒļàţ []Run þéŕ šîđé: à đîšçŕîḿîñàţéđ üñîöñ öƒ Text, Ph, PcOpen, PcClose, Sub, Plural, àñđ Select. Éàçĥ îñļîñé-çöđé ŕüñ çàŕŕîéš îţš öŵñ ḿéţàđàţà (ñàţîṽé ḿàŕķüþ, àƃšţŕàçţ îđéñţîţý, šéḿàñţîç ţýþé, đîšþļàý ţéẋţ, ţéẋţ éǫüîṽàļéñţ, çàñöñîçàļ àţţŕîƃüţéš, éđîţîñĝ çöñšţŕàîñţš), šö ţööļš þŕöçéšš çöñţéñţ šéḿàñţîçàļļý ŵĥîļé ŵŕîţéŕš ŕéþļàý ñàţîṽé ḿàŕķüþ éẋàçţļý.

Îñţéŕþŕéţàţîöñš öƒ ţĥàţ çöñţéñţ (šéñţéñçé šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, ƒîñđîñĝš, àļîĝñḿéñţ) àŕé šţàñđ-öƒƒ öṽéŕļàýš: ţýþéđ, ŕüñ-àñçĥöŕéđ šþàñ šéţš ļàýéŕéđ öṽéŕ ţĥé ŕüñš, ñéṽéŕ ŕéŵŕîţîñĝ ţĥéḿ. Ţĥéŕé îš ñö Segment ţýþé; à šéĝḿéñţ îš à šþàñ îñ à šéĝḿéñţàţîöñ öṽéŕļàý. Ŵĥéŕé à Ƃļöçķ îš àñçĥöŕéđ îñ îţš šöüŕçé ƒöļļöŵš ţĥé ḿéđîüḿ: à ŕüñ ŕàñĝé îñ ţéẋţ, à ƃöẋ öñ à ŕéñđéŕéđ þàĝé, à ţîḿé šþàñ îñ ţîḿéđ ḿéđîà. Çöñţéñţ ţĥàţ ŵàš ŕéçöĝñîžéđ ŕàţĥéŕ ţĥàñ þàŕšéđ ŕéçöŕđš ţĥé éẋţŕàçţîñĝ éñĝîñé àñđ à çöñƒîđéñçé îñ ţĥé šàḿé Origin à ţŕàñšļàţîöñ çàŕŕîéš. Ţàŕĝéţš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš ķéýéđ ƃý à ṽàŕîàñţ (ļöçàļé þļüš öþţîöñàļ ţöñé öŕ çĥàññéļ).

Çöñţéẋţ

Ţĥé çöñţéñţ ḿöđéļ ĥàš ţö ŕéþŕéšéñţ đöçüḿéñţš îñ à ŵàý ţĥàţ îš ƒöŕḿàţ-îñđéþéñđéñţ, ţýþé-šàƒé, éẋţéñšîƃļé, àñđ àƃļé ţö éẋþŕéšš ŕéçüŕšîṽé éḿƃéđđéđ çöñţéñţ ñàţüŕàļļý. Ĝö'š çöḿþöšîţîöñ àñđ îñţéŕƒàçé šýšţéḿ šĥàþéš ţĥé đéšîĝñ ţöŵàŕđ đîšçŕîḿîñàţéđ üñîöñš àñđ éẋþļîçîţ ŕéšöüŕçé ţýþéš ŕàţĥéŕ ţĥàñ đééþ ţýþé ĥîéŕàŕçĥîéš. Ƃöţĥ ţĥé Þàŕţ šţŕéàḿ àñđ ţĥé îñļîñé-çöñţéñţ ḿöđéļ àŕé đîšçŕîḿîñàţéđ üñîöñš: öñé ķéýéđ ƃý PartType, ţĥé öţĥéŕ ƃý ŵĥîçĥ Run ƒîéļđ îš šéţ.

Ƃéýöñđ šţŕüçţüŕàļ ŕéþŕéšéñţàţîöñ, ŕéàļ ŵöŕķƒļöŵš đéḿàñđ šţàƃļé çöñţéñţ îđéñţîţý àçŕöšš éẋţŕàçţîöñ çýçļéš, éẋţéñšîƃļé ḿéţàđàţà, đîšþļàý ĥîñţš ţĥàţ ĝüîđé ŕéñđéŕîñĝ ŵîţĥöüţ çöüþļîñĝ ţĥé ḿöđéļ ţö à ƒŕöñţéñđ, àñđ à ƒöŕḿàţ-îñđéþéñđéñţ îñļîñé-çöđé ḿöđéļ ţĥàţ šéŕṽéš ḿéḿöŕý ḿàţçĥîñĝ, ḿöđéļ-ƃàçķéđ ţŕàñšļàţîöñ, àñđ éđîţöŕ ŕéñđéŕîñĝ àļîķé.

Ţĥé îñļîñé-çöđé çĥàļļéñĝé

Đöçüḿéñţš çöñţàîñ îñļîñé ƒöŕḿàţţîñĝ (ƃöļđ, ļîñķš, îḿàĝéš, ṽàŕîàƃļéš, þļàçéĥöļđéŕš) éḿƃéđđéđ îñ ţĥé ţéẋţ, àñđ éṽéŕý šöüŕçé ƒöŕḿàţ šþéļļš ţĥéšé đéŕéñţļý:

ÇöñçéþţĤŢḾĻḾàŕķđöŵñĐÖÇẊ (ÖþéñẊḾĻ)ẊĻÎƑƑ 2.0
Ƃöļđ<b>**<w:b/><pc type="fmt" subType="xlf:b">
Ļîñķ<a href="…">[text](url)<w:hyperlink><pc type="link">
Ļîñé ƃŕéàķ<br/>ţŵö šþàçéš + ñéŵļîñé<w:br/><ph type="fmt" subType="xlf:lb"/>
Þļàçéĥöļđéŕñöñéñöñéñöñé<ph>

Ḿéḿöŕý ḿàţçĥîñĝ, ţŕàñšļàţîöñ, ṽéŕîƒîçàţîöñ, àñđ ţéŕḿ ļööķüþ ḿüšţ ñöţ ñééđ ţö ķñöŵ ŵĥéţĥéŕ ţĥé ƃöļđ çàḿé ƒŕöḿ ĤŢḾĻ öŕ Ḿàŕķđöŵñ. Àţ ţĥé šàḿé ţîḿé ŕöüñđ-ţŕîþ ƒîđéļîţý îš ñöñ-ñéĝöţîàƃļé: <b class="emphasis"> ḿüšţ ŕöüñđ-ţŕîþ àš éẋàçţļý ţĥàţ, ñöţ àš à ĝéñéŕîç ƃöļđ ţàĝ.

Ţĥé éḿƃéđđéđ-çöñţéñţ çĥàļļéñĝé

Đöçüḿéñţš ƒŕéǫüéñţļý çöñţàîñ çöñţéñţ îñ à đéŕéñţ ƒöŕḿàţ: ĤŢḾĻ îñšîđé ĴŠÖÑ ṽàļüéš, ĤŢḾĻ îñ ẊḾĻ ÇĐÀŢÀ, Ḿàŕķđöŵñ îñ šþŕéàđšĥééţ çöļüḿñš. À ŕéàđéŕ ţĥàţ šééš öñļý "<p>Hello <b>world</b></p>" àš à ƒļàţ šţŕîñĝ ḿîššéš ţĥé îñļîñé ƒöŕḿàţţîñĝ àñđ þŕöđüçéš ŵöŕšé ŕéšüļţš đöŵñšţŕéàḿ.

Đéçîšîöñ

Þàŕţ àñđ Ŕéšöüŕçé

Öñé Part šţŕüçţ çàŕŕîéš à PartType éñüḿ àñđ à Resource:

type Part struct {
Type PartType
Resource Resource // Block, Layer, Group, Data, or Media
}

type Resource interface {
ResourceID() string
}

PartType ṽàļüéš àŕé PartUnknown (ţĥé žéŕö ṽàļüé), PartLayerStart, PartLayerEnd, PartGroupStart, PartGroupEnd, PartBlock, PartData, PartMedia, PartRawDocument, àñđ PartCustom. Çöñšţàñţš çàŕŕý éẋþļîçîţ îñţéĝéŕ ṽàļüéš ƒöŕ ŵîŕé çöḿþàţîƃîļîţý: ñüḿƃéŕš àŕé ñéṽéŕ ŕéñüḿƃéŕéđ, àñđ ŕéţîŕéđ šļöţš šţàý ŕéšéŕṽéđ.

containsflat sequenceanchored to runsnests, embedded contentLayerFormatstringParentIDstringBlockSource[]RunTargetsmap[VariantKey]*TargetOverlays[]OverlayAnnotationsmap[string]PayloadRunText | Ph | PcOpen | …Overlaytyped span setSpans[]Span

À đöçüḿéñţ îš à šţŕéàḿ öƒ Þàŕţš. Ļàýéŕš ñéšţ; à Ƃļöçķ ĥöļđš à ƒļàţ Ŕüñ šéǫüéñçé þéŕ šîđé þļüš šţàñđ-öƒƒ öṽéŕļàýš.

Ŕéšöüŕçé ţýþéš:

  • Ļàýéŕ: šţŕüçţüŕàļ ĝŕöüþîñĝ (đöçüḿéñţ, šéçţîöñ, éḿƃéđđéđ çöñţéñţ), đéļîḿîţéđ ƃý PartLayerStart / PartLayerEnd.
  • Ĝŕöüþ: à ñéšţéđ šţŕüçţüŕàļ ĝŕöüþ ŵîţĥîñ à ļàýéŕ, šüçĥ àš à ţàƃļé, đéļîḿîţéđ ƃý PartGroupStart / PartGroupEnd.
  • Ƃļöçķ: ḿöđîƒîàƃļé çöñţéñţ: à šöüŕçé ŕüñ šéǫüéñçé, þéŕ-ṽàŕîàñţ ţàŕĝéţ ŕüñ šéǫüéñçéš, àñđ öþţîöñàļ šţàñđ-öƒƒ öṽéŕļàýš.
  • Đàţà: ñöñ-çöñţéñţ šţŕüçţüŕé (šķéļéţöñ, ḿéţàđàţà).
  • Ḿéđîà: ƃîñàŕý çöñţéñţ. À Media îš à ƃîñàŕý ŕéƒéŕéñçé, ñéṽéŕ îñļîñéđ ƃýţéš: ŕéšöļüţîöñ þŕéçéđéñçé îš BlobKey (à çöñţéñţ-àđđŕéššéđ ķéý îñ à ƃļöƃ šţöŕé) > URI (àñ éẋţéŕñàļ ŕéƒéŕéñçé) > Data (îñļîñé, ƒöŕ šḿàļļ þîþéļîñé-îñţéŕñàļ àššéţš öñļý). À ļàŕĝé ŕàšţéŕ öŕ ḿéđîà ţŕàçķ ţĥéŕéƒöŕé ñéṽéŕ šţŕéàḿš ţĥŕöüĝĥ ţĥé Þàŕţ çĥàññéļ öŕ ţĥé þļüĝîñ ƃöüñđàŕý; à šîñĝļé ĥéļþéŕ àţ ţĥé çöñšüḿîñĝ ƃöüñđàŕý ḿàţéŕîàļîžéš ţĥé ƃýţéš. Ţĥîš îš ţĥé öñé ƃîñàŕý îđîöḿ šĥàŕéđ ƃý ţĥé çöñţéñţ ḿöđéļ, þàţĥ-ƃàšéđ þļüĝîñ ÎÖ, àñđ ḿöđéļ-þŕöṽîđéŕ þàŕţš (É-07).

PartResult{Part, Error} çàŕŕîéš çöñţéñţ àñđ éŕŕöŕš öñ ţĥé šàḿé çĥàññéļ, ļéţţîñĝ à ţööļ đéçîđé ĥöŵ ţö ĥàñđļé àñ éŕŕöŕ (šķîþ, ŕéţŕý, ƒàîļ) ŵîţĥöüţ à šéçöñđ çĥàññéļ.

Ƃļöçķ

type Block struct {
ID string
Name string
Unit string // durable identity, resolved by reconciliation (F-03)
Type string
MimeType string
Translatable bool // eligible for modification or extraction
SourceLocale LocaleID
SourceStatus SourceStatus // authoring lifecycle: authored → checked → approved
Source []Run // whole source content
Targets map[VariantKey]*Target // first-class targets, keyed by variant
Overlays []Overlay // positional, run-anchored stand-off layers
Annotations map[string]Payload // block-scoped typed metadata, keyed by type
Identity *BlockIdentity // content-addressable hashes
Properties map[string]string // opaque pass-through metadata only
// …skeleton link, content ref, display hint, whitespace flag
}

À Ƃļöçķ ĥöļđš öñé šöüŕçé ŕüñ šéǫüéñçé àñđ öñé ţàŕĝéţ ŕüñ šéǫüéñçé þéŕ ṽàŕîàñţ: ţĥé ŵĥöļé çöñţéñţ, üñšéĝḿéñţéđ. Ţĥéŕé îš ñö Segment çöñţàîñéŕ: ḿöšţ ƃļöçķš àŕé à šîñĝļé šţŕîñĝ àñđ îţš ţŕàñšļàţîöñš, àñđ ţĥé ḿöđéļ šàýš éẋàçţļý ţĥàţ. Ŵĥéñ à ŵöŕķƒļöŵ ñééđš šéñţéñçé ƃöüñđàŕîéš (à ŕéṽîéŵ šüŕƒàçé, éẋàçţ-ḿàţçĥ ḿéḿöŕý ķéýš, ẊĻÎƑƑ öŕ ŢḾẊ éẋþöŕţ), à ţööļ çöḿþüţéš ţĥéḿ àñđ àţţàçĥéš à šéĝḿéñţàţîöñ öṽéŕļàý. Ţĥé öṽéŕļàý ļàýéŕš öṽéŕ ţĥé ŕüñš; ţĥé ŕüñš àŕé ñéṽéŕ ŕéþàŕţîţîöñéđ, šö šéĝḿéñţàţîöñ îš ŕéṽéŕšîƃļé ƃý çöñšţŕüçţîöñ.

Translatable îš à þàŕšé-ţîḿé çļàššîƒîçàţîöñ, ñöţ à þöļîçý: à ŕéàđéŕ ḿàŕķš ŵĥîçĥ Þàŕţš àŕé àüţĥöŕéđ çöñţéñţ àñđ ŵĥîçĥ àŕé šüŕŕöüñđîñĝ šţŕüçţüŕé. Ƃļöçķš ļéƒţ üñḿàŕķéđ šţàý îñ ţĥé šķéļéţöñ, üñţöüçĥéđ ƃý ţööļš ţĥàţ éđîţ, çĥéçķ, öŕ ţŕàñšļàţé.

SourceStatus îš ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ öƒ à ţàŕĝéţ'š šţàţüš. Ñéŵ ("") ŕéàđš àš ţĥé àüţĥöŕéđ ƃàšéļîñé; à šöüŕçé éđîţ ŕéšéţš îţ, à çļéàñ šöüŕçé çĥéçķ šţàḿþš checked, àñđ àñ éẋþļîçîţ àþþŕöṽàļ šţàḿþš approved.

Ţàŕĝéţš àñđ ṽàŕîàñţš

À ţàŕĝéţ îš à ƒîŕšţ-çļàšš ŕéçöŕđ çàŕŕýîñĝ šţàţüš àñđ þŕöṽéñàñçé, ķéýéđ ƃý à ṽàŕîàñţ ŕàţĥéŕ ţĥàñ ƃý ļöçàļé àļöñé:

// Locale is the only required dimension; tone and channel are optional and
// zero-valued by default, so the common case carries no extra ceremony.
type VariantKey struct {
Locale LocaleID
Tone string
Channel string
}

// Target is the committed translation for one variant: content plus its
// lifecycle and provenance. Candidate translations (memory hits, machine
// output, model proposals) stay as alt-translation annotations.
type Target struct {
Runs []Run
Status TargetStatus // "" (new) | draft | translated | reviewed | signed-off
Origin Origin // how the content was produced, and what governed it
Score float64
}

Éŕĝöñöḿîç àççéššöŕš ķééþ ţĥé ļöçàļé-öñļý þàţĥ à öñé-ļîñéŕ: block.Target("fr") ŕéšöļṽéš VariantKey{Locale: "fr"}, ŵĥîļé block.TargetVariant(key) ŕéàçĥéš ţĥé ĝéñéŕàļ çàšé. Çöđé ţĥàţ öñļý ķñöŵš àƃöüţ ļöçàļéš ñéṽéŕ ĥàš ţö ḿéñţîöñ ţöñé öŕ çĥàññéļ: ŕîçĥéŕ ṽàŕîàñţš àŕé šţŕîçţļý öþţ-îñ. À Target'š ŕüñš çàŕŕý ţĥéîŕ öŵñ öṽéŕļàýš, šçöþéđ ţö ţĥàţ ṽàŕîàñţ.

Ţĥîš šéþàŕàţéš ţŵö ţĥîñĝš à ƃàŕé map[LocaleID][]Run çöñƒļàţéš: ţĥé çöḿḿîţţéđ ţŕàñšļàţîöñ þéŕ ṽàŕîàñţ, ŵîţĥ šţàţüš àñđ þŕöṽéñàñçé, ƒŕöḿ çàñđîđàţé þŕöþöšàļš, öƒ ŵĥîçĥ ţĥéŕé ḿàý ƃé ḿàñý þéŕ ṽàŕîàñţ, éàçĥ šçöŕéđ. Àççüḿüļàţéđ ĥîšţöŕý àçŕöšš ŕüñš àñđ ŕéṽîéŵ ţŕàîļš àŕé à þéŕšîšţéñçé çöñçéŕñ, öüţšîđé ţĥé çöñţéñţ ḿöđéļ.

Çöñţéñţ-àđđŕéššàƃļé îđéñţîţý

type BlockIdentity struct {
ContentHash string // SHA-256 of the whitespace-trimmed source text
ContextHash string // SHA-256 of name, type, and identifying properties
}

Ţĥé šàḿé çöñţéñţ àļŵàýš þŕöđüçéš ţĥé šàḿé îđéñţîţý, šö öñļý ƃļöçķš ŵĥöšé îđéñţîţý ĥàš çĥàñĝéđ ñééđ ŕéþŕöçéššîñĝ, àñđ îđéñţîçàļ ƃļöçķš àçŕöšš đöçüḿéñţš šĥàŕé à çöñţéñţ ĥàšĥ. Unit îš ţĥé đüŕàƃļé ķéý ţĥàţ ĝŕàđîñĝ ţĥé þàîŕ àĝàîñšţ ţĥé þŕéṽîöüš ŕéàđ þŕöđüçéš: à đéçîšîöñ, à ţŕàñšļàţîöñ àñđ à ĥîšţöŕý éñţŕý àŕé ƒîļéđ üñđéŕ îţ, àñđ à ṽéñüé šţöŕéš îţ àš ţĥé ƃļöçķ'š šöüŕçé îđ. À ŕéàđéŕ ļéàṽéš îţ éḿþţý; ŕéçöñçîļîàţîöñ ƒîļļš îţ, àñđ Name šţàñđš îñ üñţîļ îţ đöéš. Ĥöŵ ţĥé þàîŕ îš ĝŕàđéđ, àñđ ĥöŵ ţĥé šţöŕé ķéý îš đéŕîṽéđ, îš Ƒ-03: Îđéñţîţý.

Þŕöþéŕţîéš

Properties çàŕŕîéš àŕƃîţŕàŕý ķéý-ṽàļüé ḿéţàđàţà ţĥàţ ŕéàđéŕš, ţööļš, àñđ çöññéçţöŕš àţţàçĥ àš ƃļöçķš ƒļöŵ ţĥŕöüĝĥ ţĥé þîþéļîñé: à šöüŕçé þàţĥ îñ àñ üþšţŕéàḿ šýšţéḿ, à ƒöŕḿàţ ĥîñţ, à šţŕüçţüŕàļ çööŕđîñàţé. Îţ îš öþàǫüé þàšš-ţĥŕöüĝĥ ḿéţàđàţà öñļý. Àñàļýţîç àñđ îñţéŕþŕéţîṽé ŕéšüļţš à ţööļ þŕöđüçéš (ḿàţçĥ šçöŕéš, ŵöŕđ çöüñţš, ƒîñđîñĝš) àŕé öṽéŕļàýš öŕ àññöţàţîöñš, ñöţ þŕöþéŕţîéš, àñđ ţĥé ţööļ ÎÖ çöñţŕàçţ (É-03) đéçļàŕéš ŵĥîçĥ à ţööļ çöñšüḿéš àñđ þŕöđüçéš.

À þŕöþéŕţý ŵĥöšé ķéý ƃéĝîñš ŵîţĥ @ îš àđṽîšöŕý: çàŕŕîéđ öñ ţĥé ƃļöçķ ƃüţ šķîþþéđ ŵĥéñ ĥàšĥîñĝ. Ŕéàđéŕš üšé îţ ƒöŕ đéŕîṽéđ ļöçàţöŕš (ţĥé ļîñé à ƃļöçķ šţàŕţš öñ, à ƃýţé öƒƒšéţ): àñýţĥîñĝ ţĥàţ šàýš ŵĥéŕé ţö ƒîñđ ţĥîš ŕàţĥéŕ ţĥàñ ŵĥàţ ţĥîš îš. À ļöçàţöŕ ḿöṽéš ŵĥéñéṽéŕ àñýţĥîñĝ àƃöṽé îţ ḿöṽéš, šö ƒöļđîñĝ öñé îñţö ţĥé çöñţéẋţ ĥàšĥ ŵöüļđ ḿàķé àñ üñţöüçĥéđ ƃļöçķ ŕéþöŕţ àš çĥàñĝéđ éṽéŕý ţîḿé à ƃļàñķ ļîñé ŵàš àđđéđ éàŕļîéŕ îñ ţĥé ƒîļé.

Öṽéŕļàýš àñđ àññöţàţîöñš: ţŵö šţàñđ-öƒƒ çàŕŕîéŕš

Ţýþéđ šţàñđ-öƒƒ îñţéŕþŕéţàţîöñš öƒ à Ƃļöçķ çöḿé îñ ţŵö ķîñđš, ķéþţ îñ ţŵö ƒîéļđš ƃéçàüšé ţĥéý đéŕ îñ šĥàþé àñđ ļîƒéçýçļé:

  • Öṽéŕļàýš àŕé þöšîţîöñàļ: ŕüñ-àñçĥöŕéđ šþàñ šéţš ţĥàţ þöîñţ îñţö ţĥé çöñţéñţ: šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, ţéŕḿ çàñđîđàţéš, ƒîñđîñĝš, šöüŕçé-ţö-ţàŕĝéţ àļîĝñḿéñţ. Éàçĥ Span çàŕŕîéš à ŕüñ Range (îţš þöšîţîöñ), öþţîöñàļ šţŕîñĝ Props, àñđ àñ öþţîöñàļ ţýþéđ þàýļöàđ Value. Ƃéçàüšé ŕàñĝéš àñçĥöŕ ţö ŕüñš, à šöüŕçé ŕéŵŕîţé šĥîƒţš ţĥéḿ. À ţŕàñšƒöŕḿîñĝ ţööļ'š éđîţ þļàñ îš à šţŕüçţüŕéđ šþàñ-ţö-ŕéþļàçéḿéñţ ḿàþ, šö ţĥé ƒŕàḿéŵöŕķ àþþļîéŕ ŕéƃàšéš ţĥé šüŕṽîṽöŕš öñţö ţĥé ñéŵ ŕüñš ŵîţĥ model.RemapOverlays: šþàñš öṽéŕļàþþîñĝ àñ éđîţ àŕé đŕöþþéđ, ţĥé ŕéšţ šĥîƒţ ţö ƒöļļöŵ îţ. Àñ öþàǫüé ŵĥöļé-ƃļöçķ ŕéŵŕîţé ĥàš ñö ḿàþþîñĝ àñđ đŕöþš ţĥéḿ.
  • Àññöţàţîöñš àŕé ƃļöçķ-šçöþéđ: à ķéýéđ ḿàþ öƒ ţýþéđ þàýļöàđš đéšçŕîƃîñĝ ţĥé ƃļöçķ àš à ŵĥöļé: àļţ-ţŕàñšļàţîöñš, ñöţéš, àñàļýšîš ŕéšüļţš, ƒöŕḿàţ ŕöüñđ-ţŕîþ šţàţé, àñđ ţĥé ƃļöçķ'š àñçĥöŕ àñđ ŕöļé ƒàçéţš. À šöüŕçé ŕéŵŕîţé đöéš ñöţ îñṽàļîđàţé ţĥéḿ.
type Overlay struct {
Type OverlayType // segmentation | term | entity | qa | alignment | term-candidate | editor-anchor
Variant *VariantKey // nil = source side
Layer string // segmentation granularity; LayerPrimary ("") = primary
Spans []Span // each with a run Range, string Props, and a typed Value
}

Ŵĥéţĥéŕ àñ îñţéŕþŕéţàţîöñ îš þöšîţîöñàļ îš šţŕüçţüŕàļ (îţ îš àñ Overlay) ŕàţĥéŕ ţĥàñ à ŕüñţîḿé ƒļàĝ. Àññöţàţîöñš àŕé ŕéàçĥéđ ţĥŕöüĝĥ ţĥé Anno/SetAnno/DelAnno/AnnoMap ĥéļþéŕš, ķéýéđ ƃý ţýþé; öṽéŕļàýš ţĥŕöüĝĥ OverlayOf/AddOverlaySpan/OverlaySpan/RemoveOverlay.

ÎñţéŕþŕéţàţîöñÇàŕŕîéŕÞüŕþöšé
Šéĝḿéñţàţîöñöṽéŕļàý segmentationŠéñţéñçé öŕ çĥüñķ ƃöüñđàŕîéš öṽéŕ ŕüñš
Ţéŕḿšöṽéŕļàý termḾàţçĥéđ ţéŕḿš ŵîţĥ ţĥéîŕ ţàŕĝéţ ƒöŕḿš
Ţéŕḿ çàñđîđàţéšöṽéŕļàý term-candidateÉẋţŕàçţîöñ çàñđîđàţéš àŵàîţîñĝ à đéçîšîöñ
Éñţîţîéšöṽéŕļàý entityÑàḿéđ éñţîţîéš (þéöþļé, þļàçéš, đàţéš)
Ƒîñđîñĝšöṽéŕļàý qaṼéŕîƒîçàţîöñ ƒîñđîñĝš ŵîţĥ šéṽéŕîţý
Àļîĝñḿéñţöṽéŕļàý alignmentŠöüŕçé-šþàñ ţö ţàŕĝéţ-šþàñ ļîñķš
Àļţ-ţŕàñšļàţîöñšàññöţàţîöñ alt-translationÇàñđîđàţé ţŕàñšļàţîöñš ŵîţĥ šçöŕéš
Éđîţöŕ àñçĥöŕšöṽéŕļàý editor-anchorÀñ îñţéĝŕàţîöñ ƃîñđîñĝ îñţö ţĥé ñàţîṽé éđîţöŕ ţĥàţ öŵñš ţĥé ƒöŕḿàţ (à Ŵöŕđ çöñţéñţ çöñţŕöļ, à Ƒîĝḿà ñöđé), šéţ ƃý à çöññéçţöŕ ŕàţĥéŕ ţĥàñ à ţööļ

Ƃöţĥ öṽéŕļàý šþàñ ṽàļüéš àñđ àññöţàţîöñ ṽàļüéš àŕé ţýþéđ þàýļöàđš ŕéĝîšţéŕéđ ŵîţĥ öñé þàýļöàđ ŕéĝîšţŕý (RegisterPayload / NewPayload), šö ţĥé ŵîŕé àñđ šţöŕé ļàýéŕš ŕéĥýđŕàţé ţĥé ţýþéđ ṽàļüé ƒŕöḿ îţš ţýþé ñàḿé.

Ţööļš çöḿḿüñîçàţé ƃý ŕéàđîñĝ ţĥé öṽéŕļàýš àñđ àññöţàţîöñš þŕöđüçéđ üþšţŕéàḿ àñđ ŵŕîţîñĝ ţĥéîŕ öŵñ đöŵñšţŕéàḿ, šţàýîñĝ ļööšéļý çöüþļéđ ţĥŕöüĝĥ ţĥé šĥàŕéđ đàţà ḿöđéļ ŕàţĥéŕ ţĥàñ ţĥŕöüĝĥ đîŕéçţ đéþéñđéñçîéš.

Ţŵö àññöţàţîöñš, structure àñđ geometry, àŕé ĥéļđ îñ þŕîṽàţé Ƃļöçķ ƒîéļđš ŕàţĥéŕ ţĥàñ îñ ţĥé ḿàþ, ŵĥîļé éṽéŕý àççéššöŕ þŕéšéñţš ţĥéḿ éẋàçţļý àš îƒ ţĥéý šàţ îñ Annotations, šö ţĥé ŵîŕé, ţĥé šţöŕéš, àñđ éṽéŕý çöñšüḿéŕ šéé ñö đéŕéñçé. Ţĥéý àŕé ţĥé ţŵö šéţ öñ ñéàŕļý éṽéŕý šţŕüçţüŕéđ ƃļöçķ ŕàţĥéŕ ţĥàñ öççàšîöñàļļý: à ŕöļé öñ àñý ƃļöçķ à ƒöŕḿàţ ĝîṽéš šţŕüçţüŕé ţö, à þöšîţîöñ öñ àñý ƃļöçķ ţĥàţ çöḿéš ƒŕöḿ à ĝŕîđ öŕ à þàĝé. À ḿàþ éñţŕý çöšţš àŕöüñđ 285 ƃýţéš, šö à šþŕéàđšĥééţ öƒ à ḿîļļîöñ çéļļš ŵàš þàýîñĝ à ǫüàŕţéŕ öƒ à ĝîĝàƃýţé ţö ĥöļđ öñé éñüḿ àñđ ƒöüŕ šḿàļļ îñţéĝéŕš þéŕ çéļļ. Ñöţĥîñĝ éļšé îñ ţĥé ṽöçàƃüļàŕý îš çöḿḿöñ éñöüĝĥ ţö ƃé ŵöŕţĥ ţàķîñĝ öüţ öƒ ţĥé ḿàþ, àñđ ţĥé ḿàþ šţàýš ƒöŕ àļļ öƒ îţ.

Àñçĥöŕîñĝ àçŕöšš ḿéđîà, àñđ šöüŕçé þŕöṽéñàñçé

Ţŵö ţĥîñĝš àƃöüţ à Ƃļöçķ đéþéñđ öñ ŵĥéŕé îţš çöñţéñţ çàḿé ƒŕöḿ: ŵĥéŕé îţ šîţš îñ îţš šöüŕçé, àñđ ĥöŵ îţš šöüŕçé ţéẋţ ŵàš þŕöđüçéđ. Ƃöţĥ àŕé ƃļöçķ-šçöþéđ ţýþéđ àññöţàţîöñš, ŕîđîñĝ ţĥé šàḿé çàŕŕîéŕ àš ţĥé àñàļýţîç ŕéšüļţš àƃöṽé.

Àñçĥöŕ. À Ƃļöçķ'š þöšîţîöñ îñ îţš šöüŕçé îš à çööŕđîñàţé, àñđ ţĥé çööŕđîñàţé šýšţéḿ ƒöļļöŵš ţĥé ḿéđîüḿ:

  • Ţéẋţ àñçĥöŕš ƃý ŕüñ þöšîţîöñ: ţĥé Anchor éṽéŕý öṽéŕļàý, ƒîñđîñĝ àñđ šţàñđ-öƒƒ àññöţàţîöñ àļŕéàđý üšéš. Ŕüñ àñçĥöŕîñĝ îš ţĥé ţéẋţ ƒàçéţ öƒ öñé ĝéñéŕàļ îđéà ŕàţĥéŕ ţĥàñ à šéþàŕàţé çöñçéþţ.
  • Ŕéñđéŕéđ ḿéđîà (àñ îḿàĝé, à þàĝé) àñçĥöŕš šþàţîàļļý: à geometry àññöţàţîöñ ĥöļđîñĝ à þàĝé àñđ à ƃöüñđîñĝ ƃöẋ.
  • Ţîḿéđ ḿéđîà (àüđîö, ṽîđéö) àñçĥöŕš ţéḿþöŕàļļý: à timing àññöţàţîöñ ŕéçöŕđîñĝ ţĥé ţîḿé šþàñ îñ ḿîļļîšéçöñđš.

À Ƃļöçķ çàŕŕîéš ŵĥîçĥéṽéŕ ƒàçéţš îţš ḿéđîüḿ đéƒîñéš, àñđ ţĥéý çöḿþöšé: ţéẋţ ƃüŕñéđ îñţö à ṽîđéö ƒŕàḿé çàŕŕîéš ƃöţĥ à geometry ƃöẋ àñđ à timing šþàñ. Àļöñĝšîđé àñçĥöŕ, à structure àññöţàţîöñ ŕéçöŕđš ţĥé ƃļöçķ'š ļöĝîçàļ ŕöļé àñđ þļàñé îñđéþéñđéñţ öƒ ḿéđîüḿ. Ţĥé ŕöļé ṽöçàƃüļàŕý (core/model/structure.go) îš ƃŕöàđ àñđ àļîĝñéđ ŵîţĥ đöçüḿéñţ-šţŕüçţüŕé šţàñđàŕđš: þàŕàĝŕàþĥ, ţîţļé, ĥéàđîñĝ, çàþţîöñ, ţàƃļé çéļļ, çöđé, ƒöŕḿüļà, þîçţüŕé, ļîšţ, ƒööţñöţé, šéçţîöñ ŕöļéš, àñđ ţĥé ƒöŕḿ-ƒîéļđ ƒàḿîļý. Ŵĥéŕé à ƃļöçķ'š ñàḿé éḿƃéđš ţĥé ţéẋţ öƒ îţš àñçéšţöŕš, ţĥé structure àññöţàţîöñ àļšö çàŕŕîéš Address, ţĥé šàḿé šţŕüçţüŕàļ þàţĥ ŵîţĥ éàçĥ šüçĥ šéĝḿéñţ ŕéþļàçéđ ƃý ţĥàţ àñçéšţöŕ'š öŵñ îđéñţîţý, šö ţĥé ƃļöçķ ŕéàđš ţĥé šàḿé îñ éṽéŕý ļàñĝüàĝé (Ƒ-03). À ţööļ ŕéàđš öñļý ţĥé ƒàçéţ îţ ñééđš; à Ƃļöçķ ŵîţĥ ñö ḿéđîà ƒàçéţ îš þļàîñ àñçĥöŕéđ-ƃý-ŕüñš ţéẋţ.

Ţĥé ŕöļé àļšö đîšàḿƃîĝüàţéš ñöñ-ḿöđîƒîàƃļé çöñţéñţ šüŕƒàçéđ ƒöŕ çöñţéẋţ. À ƃļöçķ îš ñöţ àļŵàýš ḿöđîƒîàƃļé: à ŕéàđéŕ ḿàý éḿîţ Block{Translatable: false} çàŕŕýîñĝ à ŕöļé šüçĥ àš çöđé öŕ ƒöŕḿüļà šö à ļîšţîñĝ öŕ àñ éǫüàţîöñ îš ṽîšîƃļé ţö ḿöđéļ àñđ ŕéţŕîéṽàļ îñĝéšţîöñ ŵĥîļé ţŕàñšļàţîöñ šķîþš îţ. Ţĥàţ šüŕƒàçîñĝ îš à đéƒàüļţ-öñ, þéŕ-ƒöŕḿàţ öþţ-öüţ đéšçŕîƃéđ îñ É-02: Ţĥé ƒöŕḿàţ šýšţéḿ.

Šöüŕçé þŕöṽéñàñçé. À Target ŕéçöŕđš îţš Origin: ĥöŵ ţĥé ţŕàñšļàţîöñ ŵàš þŕöđüçéđ (human, memory, mt, ai), ţĥé éñĝîñé, à ŕéƒéŕéñçé, à ţîḿéšţàḿþ. À Ƃļöçķ'š šöüŕçé çàŕŕîéš ţĥé šàḿé Origin ŵĥéñ îţ ŵàš ŕéçöĝñîžéđ ŕàţĥéŕ ţĥàñ þàŕšéđ: àñ ÖÇŔ öŕ šþééçĥ éñĝîñé, öŕ à ḿöđéļ, þŕöđüçéđ ţĥé ţéẋţ, šö ţĥé Origin ñàḿéš ţĥàţ éñĝîñé (ocr, asr, öŕ llm-refined ƒöŕ à ŕéçöĝñîţîöñ à ḿüļţîḿöđàļ ḿöđéļ ŕé-ŕéàđ) àñđ çàŕŕîéš à çöñƒîđéñçé îñ [0,1]. À ƃļöçķ ŕéàđ ļöššļéššļý ƒŕöḿ à ţéẋţ ƒöŕḿàţ ĥàš ñö šöüŕçé Origin; öñé þŕöđüçéđ ƃý ŕéçöĝñîţîöñ đöéš, àñđ à çöñƒîđéñçé-ĝàţéđ ŕéƒîñéḿéñţ šţéþ ŕéàđš îţ ţö đéçîđé ŵĥàţ ţö ŕé-éẋàḿîñé (Ḿ-03). Šöüŕçé àñđ ţàŕĝéţ þŕöṽéñàñçé àŕé öñé ŕéçöŕđ öñ ţŵö šîđéš öƒ ţĥé Ƃļöçķ.

Ŵĥàţ ĝöṽéŕñéđ îţ. Origin ŕéçöŕđš ñöţ öñļý ĥöŵ à ţàŕĝéţ ŵàš þŕöđüçéđ ƃüţ ŵĥàţ ĝöṽéŕñéđ îţ: ţĥé Profile àñđ ProfileVersion îñ ƒöŕçé, àñđ à ContextFingerprint, à ĥàšĥ öƒ ţĥé ŕéñđéŕéđ ṽöîçé ĝüîđàñçé àñđ ţĥé ţéŕḿš àš ţĥéý àçţüàļļý ŕéàçĥéđ ţĥé þŕöđüçéŕ. Ţĥàţ šéçöñđ ĥàļƒ çàññöţ ƃé ŕéçöñšţŕüçţéđ àƒţéŕ ţĥé ƒàçţ, ƃéçàüšé à þŕöƒîļé îš éđîţéđ îñ þļàçé àñđ ţéŕḿš çàŕŕý ñö ṽéŕšîöñ öƒ ţĥéîŕ öŵñ, šö îţ îš šţàḿþéđ àţ þŕöđüçţîöñ ţîḿé öŕ ļöšţ. Ţĥé ƒîñĝéŕþŕîñţ îš à çĥàñĝé đéţéçţöŕ, ñöţ à šñàþšĥöţ: îţ àñšŵéŕš "ĥàṽé ţĥé ĝöṽéŕñîñĝ îñþüţš ḿöṽéđ šîñçé ţĥîš ŵàš þŕöđüçéđ?" àñđ ñöţĥîñĝ ḿöŕé. Îţ îš ñàŕŕöŵéŕ ţĥàñ àñ éñĝîñé'š çöñƒîĝ ƒîñĝéŕþŕîñţ, ŵĥîçĥ àļšö ḿöṽéš öñ à ḿöđéļ öŕ þŕöḿþţ çĥàñĝé àñđ ŵöüļđ ḿàķé à ḿöđéļ šŵàþ ŕéàđ àš à ĝöṽéŕñàñçé çĥàñĝé.

Éṽéŕý ñöñ-þšéüđö þŕöđüçéŕ (ḿöđéļ, ḿàçĥîñé ţŕàñšļàţîöñ, àñđ ŕéçýçļéđ çöñţéñţ ḿéḿöŕý) šţàḿþš îţ, çöḿþüţéđ öñé ŵàý (profile.GovernanceContext), šö ţàŕĝéţš ŵŕîţţéñ üñđéŕ öñé çöñţéẋţ šĥàŕé à ƒîñĝéŕþŕîñţ ŵĥîçĥéṽéŕ éñĝîñé þŕöđüçéđ ţĥéḿ àñđ ƒàļļ šţàļé ţöĝéţĥéŕ ŵĥéñ ţĥé çöñţéẋţ ḿöṽéš. À ŕéçýçļéđ ḿéḿöŕý ĥîţ ŕéšöļṽéš îţš öŵñ ƒîñĝéŕþŕîñţ ƒŕöḿ ţĥé çöñţéẋţ ĝöṽéŕñîñĝ ţĥé çöļļéçţîöñ àţ ƒîļļ ţîḿé ŕàţĥéŕ ţĥàñ îñĥéŕîţîñĝ ţĥé ḿàţçĥéđ éñţŕý'š àþþŕöṽîñĝ öñé: à ƒîļļ àššéŕţš ţĥé éñţŕý àš ṽàļîđ üñđéŕ ţĥé ĝöṽéŕñàñçé îñ ƒöŕçé ñöŵ, šö îţ ḿüšţ ƒàļļ šţàļé ŵĥéñ ţĥàţ ĝöṽéŕñàñçé ḿöṽéš. Þšéüđö-ţŕàñšļàţîöñ ţàķéš ñö ĝöṽéŕñîñĝ çöñţéẋţ àñđ šţàḿþš ñöñé. Šéé Ç-05: Ƒŕéšĥñéšš àñđ ţĥé çöḿþöšîţé ŕéƒ.

Ţĥé Ŕüñ šéǫüéñçé

À Ƃļöçķ'š çöñţéñţ îš à ƒļàţ šéǫüéñçé öƒ Run ṽàļüéš ĥéļđ đîŕéçţļý öñ ţĥé Ƃļöçķ, ŵîţĥ ñö éḿƃéđđéđ ḿàŕķéŕ çĥàŕàçţéŕš:

type Run struct {
Text *TextRun // plain text chunk
Ph *PlaceholderRun // self-closing: variable, icon, <br>, redaction
PcOpen *PcOpenRun // opening half of a paired code
PcClose *PcCloseRun // closing half of a paired code
Sub *SubRun // reference to a nested Block (subfilter output)
Plural *PluralRun // ICU plural with per-form Runs
Select *SelectRun // ICU select with per-case Runs
}

Éẋàçţļý öñé þöîñţéŕ ƒîéļđ îš šéţ, ŵĥîçĥ îš ţĥé ŕüñ'š ķîñđ; Run.Kind() ŕéţüŕñš ţĥé đîšçŕîḿîñàţöŕ àñđ Run.RunID() ţĥé îđ ƒöŕ ţĥé ķîñđš ţĥàţ çàŕŕý öñé. Îñţéñţîöñ-ŕéṽéàļîñĝ çöñšţŕüçţöŕš (TextR, PhR, àñđ šîƃļîñĝš) ƃüîļđ éàçĥ ķîñđ ŵîţĥöüţ ĥàñđ-ŵŕîţîñĝ ţĥé üñîöñ. Ţéẋţ àñđ îñļîñé çöđéš îñţéŕļéàṽé þöšîţîöñàļļý; ţĥéŕé îš ñö þàŕàļļéļ šîđé-ţàƃļé àñđ ñö ḿàŕķéŕ çĥàŕàçţéŕš.

À TextRun ḿàŕķéđ NoTranslate îš ţéẋţ ţĥé ŕéàđéŕ çļàššîƒîéđ àš çöđé ŕàţĥéŕ ţĥàñ þŕöšé: ţĥé çöñţéñţš öƒ à çöđé šþàñ, à <kbd>, à <samp>. Îţ šţàýš à ŕüñ, šö þöšîţîöñš àñđ ŕöüñđ-ţŕîþ àŕé üñàƒƒéçţéđ, àñđ éṽéŕý ţŕàñšļàţîöñ þàţĥ ļéàṽéš îţ àš îţ îš (É-02).

Šţàñđ-öƒƒ öṽéŕļàýš àŕé ţĥé öñé îñţéŕþŕéţàţîöñ ḿéçĥàñîšḿ

Ţĥé ŕüñš àŕé ţĥé çöñţéñţ. Éṽéŕýţĥîñĝ ţĥàţ îñţéŕþŕéţš ţĥé çöñţéñţ (ŵĥéŕé ţĥé šéñţéñçé ƃöüñđàŕîéš ƒàļļ, ŵĥîçĥ šþàñš àŕé ţéŕḿš öŕ éñţîţîéš, ŵĥàţ à çĥéçķ ƒļàĝĝéđ, ĥöŵ à šöüŕçé šþàñ àļîĝñš ţö à ţàŕĝéţ šþàñ) îš à šţàñđ-öƒƒ öṽéŕļàý ļàýéŕéđ öṽéŕ ţĥé ŕüñ šéǫüéñçé ŵîţĥöüţ ŕéŵŕîţîñĝ îţ.

Ţĥé šþļîţ îš ƃý öŕîĝîñ. À ŕüñ ŕéçöŕđš ŵĥàţ ţĥé šöüŕçé đöçüḿéñţ šţŕüçţüŕàļļý çöñţàîñéđ; àñ öṽéŕļàý ŕéçöŕđš ŵĥàţ šöḿéţĥîñĝ çöñçļüđéđ àƃöüţ îţ. Šö à çöñçļüšîöñ ñéṽéŕ ƃéçöḿéš à ŕüñ, ĥöŵéṽéŕ à ƒöŕḿàţ ĥàþþéñš ţö šþéļļ îţ: àñ ẊĻÎƑƑ <mrk type="term"> àŕŕîṽéš àš à ţéŕḿ öṽéŕļàý šþàñ ŕàţĥéŕ ţĥàñ àš à ŕüñ ķîñđ, àñđ à ţéŕḿ ţĥîš éñĝîñé ļöçàţéš ļéàṽéš àš à <mrk> ţĥé ŵŕîţéŕ đŕàŵš àŕöüñđ ŕüñš îţ đöéš ñöţ àļţéŕ. Ƃéçàüšé ḿàŕķîñĝ îš à þŕöĵéçţîöñ àţ ŵŕîţé ţîḿé àñđ à ŕéàđîñĝ àţ þàŕšé ţîḿé, ţĥé šàḿé çöñţéñţ ŕöüñđ-ţŕîþš ţĥŕöüĝĥ à ƒöŕḿàţ ţĥàţ çàŕŕîéš ḿàŕķš àñđ öñé ţĥàţ çàŕŕîéš ñöñé. Ŵĥàţ à ŵŕîţéŕ ŵîļļ đŕàŵ îš à đéçļàŕéđ çàþàƃîļîţý (É-02).

type Span struct {
ID string // overlay-local id (e.g. a segment id "s1")
Range Anchor // run-anchored, never a flattened-string offset
Props map[string]string // type-specific, e.g. the "ignorable" marker
Value Payload // typed payload from the payload registry
}

Anchor îš ţĥé öñé ţýþé ţĥàţ šàýš ŵĥéŕé îñšîđé à ƃļöçķ šöḿéţĥîñĝ îš, àñđ éṽéŕý þŕöđüçéŕ ŕéçöŕđš þöšîţîöñš ŵîţĥ îţ: öṽéŕļàýš, çĥéçķ ƒîñđîñĝš, àñđ ţĥé šţàñđ-öƒƒ àññöţàţîöñš àñ öṽéŕļàý šîđéçàŕ çàŕŕîéš. Îţ àđđŕéššéš öñé öƒ ƒöüŕ ţĥîñĝš, đîšçŕîḿîñàţéđ ƃý Kind: ţĥé ŵĥöļé ƃļöçķ, öñé ŕüñ ƃý îđ, à ĥàļƒ-öþéñ šþàñ öƒ çĥàŕàçţéŕš, öŕ öñé ƃŕàñçĥ öƒ à þļüŕàļ öŕ šéļéçţ ŕüñ.

type Anchor struct {
Kind AnchorKind // block | run | range | form
Path RunPath // the run sequence addressed; empty is the block's own runs
RunID string // for kind run
Start RunPos // for kind range, half-open [Start, End)
End RunPos
Key string // for kind form: a plural form or a select case
}

// RunPos is a character boundary: an index into a run sequence and a rune
// offset into that run's text.
type RunPos struct{ Run, Offset int }

Ţŵö þŕöþéŕţîéš ḿàķé îţ ĥöļđ üþ. Þöšîţîöñš àŕé ŕüñ-ŕéļàţîṽé, šö à ƃöüñđàŕý šţàýš ŵĥéŕé îţ ŵàš þüţ ŵĥéñ à ñéîĝĥƃöüŕîñĝ ŕüñ îš ŕéŵŕîţţéñ àñđ çàñ šîţ éîţĥéŕ šîđé öƒ à þļàçéĥöļđéŕ, ŵĥîçĥ à ƒļàţ çĥàŕàçţéŕ öƒƒšéţ çàñ đö ñéîţĥéŕ öƒ. Àñđ ţĥéý àŕé þàţĥéđ: à ƃļöçķ'š çöñţéñţ îš à ţŕéé, šö Path ŵàļķš ţö ţĥé šéǫüéñçé ƃéîñĝ àđđŕéššéđ àñđ à ţéŕḿ îñšîđé ţĥé other ƒöŕḿ öƒ à þļüŕàļ îš àđđŕéššàƃļé ŕàţĥéŕ ţĥàñ àþþŕöẋîḿàţéđ ƃý à þöšîţîöñ îñ ţĥé ƒļàţţéñîñĝ.

Ƒöüŕ þŕöþéŕţîéš ƒöļļöŵ ƒŕöḿ àñçĥöŕîñĝ îñţéŕþŕéţàţîöñš ţö ŕüñš ŕàţĥéŕ ţĥàñ ƃàķîñĝ ţĥéḿ îñţö šţŕüçţüŕé:

  • Šéĝḿéñţàţîöñ îš öþţ-îñ àñđ đýñàḿîç. Ñöţĥîñĝ šéĝḿéñţš ƃý đéƒàüļţ; à ţööļ çöḿþüţéš ƃöüñđàŕîéš àñđ ŵŕîţéš à segmentation öṽéŕļàý. Ŵĥöļé-ƃļöçķ çöñţéñţ îš ţĥé ñöŕḿ, ŵĥîçĥ îš àļšö ŵĥàţ đöçüḿéñţ-ļéṽéļ ţŕàñšļàţîöñ ŵàñţš ƒöŕ çöĥéŕéñçé. Ţĥé éñĝîñé îš þļüĝĝàƃļé àñđ šéļéçţéđ þéŕ ŕüñ; šéé Ḿ-02: Šéĝḿéñţàţîöñ.
  • Îţ îš ŕéṽéŕšîƃļé ƃý çöñšţŕüçţîöñ. Đéšéĝḿéñţàţîöñ îš "đŕöþ ţĥé öṽéŕļàý." Ţĥéŕé îš ñö îñṽéŕšé öþéŕàţîöñ ţö ĝéţ ŵŕöñĝ àñđ ñö îñţéŕ-šéĝḿéñţ ḿàţéŕîàļ ţö ļöšé: ţĥé ĝàþš ƃéţŵééñ šéĝḿéñţ šþàñš àŕé ŕüñš ţĥàţ ñö šþàñ çöṽéŕš.
  • Îţ îš üñîƒöŕḿ. Ţéŕḿš, éñţîţîéš, àñđ ƒîñđîñĝš àŕé ţĥé šàḿé ķîñđ öƒ öṽéŕļàý, àñçĥöŕéđ ţĥé šàḿé ŕüñ-àŵàŕé ŵàý, ŕàţĥéŕ ţĥàñ éàçĥ ŕé-đéţéçţîñĝ ƃöüñđàŕîéš àţ ŕéñđéŕ ţîḿé.
  • Šéṽéŕàļ ļàýéŕš çöéẋîšţ. À þŕîḿàŕý šéñţéñçé šéĝḿéñţàţîöñ (LayerPrimary, ţĥé žéŕö ṽàļüé, ţĥé öñé ƃîļîñĝüàļ ƒöŕḿàţš þŕöĵéçţ ţö àñđ ƒŕöḿ) çàñ šîţ àļöñĝšîđé à ţöķéñ-ƃüđĝéţéđ çĥüñķîñĝ ļàýéŕ, éàçĥ îţš öŵñ öṽéŕļàý đîšţîñĝüîšĥéđ ƃý Layer.

À šþàñ ḿàŕķéđ ignorable îñ îţš Props îš ñöñ-çöñţéñţ šţŕüçţüŕàļ ḿàţéŕîàļ: àñ ẊĻÎƑƑ <ignorable>, îñţéŕ-šéĝḿéñţ ŵĥîţéšþàçé, àñ ÎÇÜ þļüŕàļ šéļéçţöŕ. Ţööļš þŕéšéŕṽé šüçĥ à šþàñ'š ţàŕĝéţ ṽéŕƃàţîḿ îñšţéàđ öƒ ţŕàñšļàţîñĝ îţ, àñđ ţĥé šþàñ šţîļļ öççüþîéš îţš ŕüñ ŕàñĝé šö ñéîĝĥƃöüŕîñĝ šéĝḿéñţ þöšîţîöñš šţàý àļîĝñéđ. Îţ îš ţĥé ƒöŕḿàţ-àĝñöšţîç ḿàŕķéŕ šĥàŕéđ ƃý ñàţîṽé ŕéàđéŕš àñđ ƃý þļüĝîñ-ƃàçķéđ öñéš.

Îñļîñé-çöđé ŕüñš çàŕŕý ţĥéîŕ öŵñ ḿéţàđàţà

PlaceholderRun àñđ PcOpenRun çàŕŕý ţĥé ƒüļļ šéţ öƒ îñļîñé-çöđé çöñçéŕñš đîŕéçţļý öñ ţĥéîŕ ƒîéļđš:

type PcOpenRun struct {
ID string // abstract identity; shared with the matching PcClose
Type string // semantic type from the vocabulary ("fmt:bold")
SubType string // format-specific refinement ("html:b", "xlf:b")
Data string // native markup, replayed verbatim by writers
Equiv string // plain-text equivalent ("" for bold, "\n" for <br>)
Disp string // translator-facing label ("[B]")
Attrs map[string]string // canonical, format-neutral attributes
Constraints *RunConstraints // Deletable, Cloneable, Reorderable
}

PlaceholderRun ĥàš ţĥé šàḿé šĥàþé; îţ îš šéļƒ-çļöšîñĝ, šö îţ ĥàš ñö þàîŕîñĝ þàŕţñéŕ. PcCloseRun îš ļéàñéŕ: îţ šĥàŕéš ID ŵîţĥ îţš öþéñéŕ àñđ ŕéþļàýš îţš öŵñ Data, àñđ îţ çàŕŕîéš ñö Constraints, ƃéçàüšé ţĥé çļöšîñĝ ĥàļƒ îñĥéŕîţš îţš öþéñéŕ'š ƃéĥàṽîöŕ. SubRun ŕéƒéŕéñçéš à šüƃƃļöçķ þŕöđüçéđ ƃý à šüƃƒîļţéŕ; PluralRun àñđ SelectRun àŕé šţŕüçţüŕéđ ÎÇÜ çöñšţŕüçţš ŵĥöšé ƃŕàñçĥéš àŕé ţĥéḿšéļṽéš []Run.

Ţĥŕéé ƒîéļđš đöüƃļé àš þöŕţàƃļé çŕöšš-ƒöŕḿàţ çàŕŕîéŕš, šö à ŵŕîţéŕ ƒöŕ à ƒöŕḿàţ ţĥàţ ķñöŵš ñöţĥîñĝ àƃöüţ ţĥé šöüŕçé ḿàŕķüþ çàñ šţîļļ ŕé-šýñţĥéšîžé ţĥé çöñšţŕüçţ ñàţîṽéļý:

  • Attrs ĥöļđš çàñöñîçàļ, ƒöŕḿàţ-ñéüţŕàļ àţţŕîƃüţéš: href, src, alt, title. À ŕéàđéŕ þöþüļàţéš ţĥéḿ ƒŕöḿ ţĥé šöüŕçé ḿàŕķüþ; à ƒöŕéîĝñ ŵŕîţéŕ éḿîţš à Ḿàŕķđöŵñ [text](href "title") öŕ àñ ĤŢḾĻ <a href title> ƒŕöḿ ţĥé šàḿé ṽàļüéš ŵîţĥöüţ þàŕšîñĝ ţĥé šöüŕçé ƒöŕḿàţ'š ļîţéŕàļ Data. Ţĥé šéţ îš öþéñ; ţĥöšé ƒöüŕ àŕé ţĥé çàñöñîçàļ ķéýš.
  • Equiv àñđ Disp çàŕŕý à þļàîñ-ţéẋţ éǫüîṽàļéñţ àñđ à ţŕàñšļàţöŕ ļàƃéļ, àñđ ƃéýöñđ ţĥàţ à ƒöŕḿàţ-îñđéþéñđéñţ ŕéñđéŕîñĝ öƒ àñ öþàǫüé þàýļöàđ. Éǫüàţîöñš üšé ţĥîš: ţĥé ÖþéñẊḾĻ ŕéàđéŕ ķééþš ţĥé ÖḾḾĻ öñ Data, ŕéþļàýéđ ṽéŕƃàţîḿ ƒöŕ à ƃýţé-éẋàçţ ŕöüñđ-ţŕîþ, àñđ þļàçéš þöŕţàƃļé ĻàŢéẊ öñ Equiv àñđ Disp, šö ţĥé Ḿàŕķđöŵñ ŵŕîţéŕ ŕéñđéŕš ţĥé ƒöŕḿüļà ƒŕöḿ ţĥé çàŕŕîéŕ (Ḿ-04).

Equiv àñđ Disp àŕé éẋçļüđéđ ƒŕöḿ ţĥé þàŕîţý çàñöñîçàļ þŕöĵéçţîöñ, šö çàŕŕýîñĝ ţĥéḿ ñéṽéŕ đîšţüŕƃš þàŕîţý ŵîţĥ ţĥé ŕéƒéŕéñçé îḿþļéḿéñţàţîöñ (À-02).

Šéḿàñţîç ţýþéš àñđ ƒöŕḿàţ-šþéçîƒîç ŕéƒîñéḿéñţ

Ţĥé Type ƒîéļđ đŕàŵš öñ à ṽöçàƃüļàŕý: à ŕéĝîšţéŕéđ, đàţà-đéƒîñéđ ţýþé šýšţéḿ ţĥàţ ḿàþš ƒöŕḿàţ-šþéçîƒîç ḿàŕķüþ ţö ƒöŕḿàţ-îñđéþéñđéñţ šéḿàñţîç ţýþéš ĝŕöüþéđ ƃý ñàḿéšþàçé þŕéƒîẋ: fmt: ƒöŕ ƒöŕḿàţţîñĝ, link: ƒöŕ ļîñķîñĝ, media: ƒöŕ ḿéđîà, struct: ƒöŕ šţŕüçţüŕàļ çöñšţŕüçţš, code: ƒöŕ ñöñ-ḿöđîƒîàƃļé îñļîñé ţöķéñš, entity: ƒöŕ ñàḿéđ éñţîţîéš. À ṽöçàƃüļàŕý éñţŕý šàýš ŵĥàţ à ţýþé ḿéàñš, ĥöŵ îţ ŕéñđéŕš àñđ îš ļàƃéļéđ, àñđ ŵĥàţ à ţŕàñšļàţöŕ ḿàý đö ŵîţĥ îţ. Ţĥé àüţĥöŕîţàţîṽé çàţàļöĝ öƒ ţýþéš, àñđ ţĥé ƒîļé ƒöŕḿàţ ƒöŕ đéƒîñîñĝ ñéŵ öñéš, àŕé ţĥé Ṽöçàƃüļàŕîéš çöñçéþţ þàĝé àñđ ţĥé Àüţĥöŕîñĝ ṽöçàƃüļàŕîéš ĝüîđé.

SubType ŕéƒîñéš à ţýþé ƒöŕ öñé ƒöŕḿàţ üšîñĝ à þŕéƒîẋ çöñṽéñţîöñ: xlf: ƒöŕ ẊĻÎƑƑ 2.0 šüƃţýþéš, html: ƒöŕ éļéḿéñţ ñàḿéš, md: ƒöŕ Ḿàŕķđöŵñ çöñšţŕüçţš, docx: ƒöŕ ÖþéñẊḾĻ ŕüñ þŕöþéŕţîéš. Çüšţöḿ šüƃţýþéš üšé à ŕéṽéŕšé-đöḿàîñ þŕéƒîẋ (com.acme:custom-tag).

Ŕüñ ÎĐ àššîĝñḿéñţ àñđ þàîŕîñĝ

Ŕéàđéŕš àššîĝñ šéǫüéñţîàļ ñüḿéŕîç ÎĐš ţö îñļîñé-çöđé ŕüñš ŵîţĥîñ éàçĥ ŕüñ šéǫüéñçé. À PcOpenRun àñđ ţĥé PcCloseRun ţĥàţ çļöšéš îţ šĥàŕé ţĥé šàḿé ID; à PlaceholderRun ĝéţš îţš öŵñ. ÎĐš šţàŕţ àţ "1", þàîŕš ñéšţ ļàšţ-îñ-ƒîŕšţ-öüţ, àñđ ŕüñš îñšîđé à Plural öŕ Select ƃŕàñçĥ ƒöŕḿ ţĥéîŕ öŵñ šçöþé. Ƒŕöḿ Click <b>here</b> for <a href="x">info</a>. à ŕéàđéŕ þŕöđüçéš ţĥé ţéẋţ ŕüñ Click , à PcOpen{ID:"1", Type:"fmt:bold"} àŕöüñđ here, îţš ḿàţçĥîñĝ PcClose{ID:"1"}, ţĥéñ for, à PcOpen{ID:"2", Type:"link:hyperlink"} àŕöüñđ info, îţš PcClose{ID:"2"}, àñđ à ƒîñàļ ..

Ţĥîš þŕöđüçéš šţàƃļé šţŕüçţüŕàļ ķéýš ƒöŕ ḿéḿöŕý ḿàţçĥîñĝ: ĤŢḾĻ <b>Click</b> àñđ Ḿàŕķđöŵñ **Click** ƃöţĥ ýîéļđ {1}Click{/1}, šö àñ éñţŕý çŕéàţéđ ƒŕöḿ ĤŢḾĻ ḿàţçĥéš à Ḿàŕķđöŵñ šöüŕçé àţ ţĥé šţŕüçţüŕàļ ţîéŕ.

Ŕüñ ţéẋţ þŕöĵéçţîöñš

À Ŕüñ šéǫüéñçé îš ţĥé šîñĝļé šöüŕçé öƒ ţŕüţĥ; éṽéŕý ţéẋţüàļ ƒöŕḿ ţĥàţ çŕöššéš à ƃöüñđàŕý îš à þŕöĵéçţîöñ çöḿþüţéđ ƒŕöḿ []Run öñ đéḿàñđ. Ţĥé ƒŕàḿéŵöŕķ þŕöṽîđéš, îñ core/model:

// Plain flattening: TextRun content verbatim, placeholders contribute {equiv},
// paired codes contribute their inner content, plural/select take the 'other'
// branch. Use: word count, search, text comparison.
func FlattenRuns(runs []Run) string

// Structural text: inline-code runs become numbered placeholders ({1}, {/1},
// {2/}). Use: memory exact matching at the structural tier.
func RunsStructuralText(runs []Run) string

// Generalized text: entity placeholder runs become typed placeholders
// ({PERSON}), other inline codes numbered. Use: generalized memory matching.
func RunsGeneralizedText(runs []Run) string

// Markup-preserving render: re-emits each run's captured Data verbatim.
// Use: writers splicing opaque markup back into a string.
func RenderRunsWithData(runs []Run) string

// Placeholder and semantic-HTML forms for prompt and provider boundaries.
func RunsPlaceholderText(runs []Run) string
func RunsSemanticHTML(runs []Run, reg *VocabularyRegistry) string

Ƒöŕ ţĥé ŕüñ šéǫüéñçé Click , PcOpen{ID:"1", Type:"fmt:bold", Data:"<b class='x'>"}, here, PcClose{ID:"1", Data:"</b>"}, for info:

FlattenRuns(): Click here for info
RunsStructuralText(): Click {1}here{/1} for info
RenderRunsWithData(): Click <b class='x'>here</b> for info

Ƃöüñđàŕîéš: šţŕüçţüŕàļ îñšîđé, ţéẋţüàļ àţ ţĥé éđĝéš

Ţĥé îñļîñé-çöđé ḿöđéļ îš šţŕüçţüŕàļ-çàñöñîçàļ. []Run îš ţĥé šîñĝļé šöüŕçé öƒ ţŕüţĥ ƒöŕ à Ƃļöçķ'š çöñţéñţ. Éṽéŕý ŕéþŕéšéñţàţîöñ ţĥàţ çŕöššéš à ƃöüñđàŕý (ţö à ţŕàñšļàţöŕ, à ḿöđéļ, à ţŕàñšļàţîöñ þŕöṽîđéŕ, àñ éẋţéŕñàļ éđîţîñĝ ţööļ, à ŕüñţîḿé, à ḿéḿöŕý îñđéẋ) îš à þŕöĵéçţîöñ çöḿþüţéđ öñ đéḿàñđ.

ÞŕöĵéçţîöñŠüŕƒàçéÇöñšüḿéŕ
[]Run (ñö þŕöĵéçţîöñ)Block.Source / Targets, KBF ŵîŕéÞîþéļîñé ţööļš, šţöŕéš, ŕéàđéŕš àñđ ŵŕîţéŕš
RenderRunsWithDatañàţîṽé šöüŕçé ḿàŕķüþƑöŕḿàţ ŵŕîţéŕš; ŕéþļàýš Data ṽéŕƃàţîḿ
RunsStructuralTextClick {1}here{/1} for infoḾéḿöŕý ḿàţçĥîñĝ, šţŕüçţüŕàļ ţîéŕ
RunsGeneralizedTextšţŕüçţüŕàļ + éñţîţý þļàçéĥöļđéŕšḾéḿöŕý ḿàţçĥîñĝ, ĝéñéŕàļîžéđ ţîéŕ
RunsPlaceholderText<x id="1"/>here<x id="/1"/>Þŕöḿþţš ŵĥéŕé ţàĝ þŕéšéŕṽàţîöñ îš çŕîţîçàļ
RunsSemanticHTML<a href="…">here</a>Þŕöṽîđéŕš àñđ þŕöḿþţš ţĥàţ éẋþéçţ ĤŢḾĻ
flattenRuns (ŢýþéŠçŕîþţ)Click {=m1}here{/=m1}ÎÇÜ ŕüñţîḿé àñđ ţĥé Ŕéàçţ î18ñ ŕé-àţţàçĥ
runsToCoded (ŢýþéŠçŕîþţ)þŕîṽàţé-üšé-àŕéà ḿàŕķéŕ ţéẋţ + šþàñ îñƒöŢĥé ṽîšüàļ éđîţöŕ'š šţýļéđ çĥîþš

Ţŵö çöñšéǫüéñçéš ƒàļļ öüţ öƒ ţĥé çöñṽéñţîöñ:

  1. Ţĥéŕé îš ñö šîñĝļé "ţŕàñšļàţöŕ ƒöŕḿàţ." À üšéŕ éđîţîñĝ îñ ţĥé ṽîšüàļ éđîţöŕ šééš ñéšţéđ çĥîþš ŵîţĥ šéḿàñţîç ƒöŕḿàţţîñĝ; ţĥé šàḿé Ƃļöçķ îñ àñ éẋţéŕñàļ éđîţîñĝ ţööļ àŕŕîṽéš àš ẊĻÎƑƑ <pc>; ţĥé šàḿé Ƃļöçķ šéñţ ţö à ḿöđéļ ĝöéš àš à þļàçéĥöļđéŕ öŕ šéḿàñţîç-ĤŢḾĻ þŕöĵéçţîöñ. Ţĥé šţŕüçţüŕàļ Ƃļöçķ îš îđéñţîçàļ.
  2. Éẋţéñšîöñš ƒöļļöŵ ţĥé šàḿé ŕüļé. À ñéŵ ŕéàđéŕ, à ñéŵ éẋţŕàçţöŕ, à ñéŵ ţŕàñšļàţöŕ šüŕƒàçé: éàçĥ éḿîţš []Run àñđ ļéţš ţĥé éẋîšţîñĝ þŕöĵéçţîöñš šéŕṽé éṽéŕý çöñšüḿéŕ. À ñéŵ ţéẋţüàļ çöñṽéñţîöñ îš îñţŕöđüçéđ öñļý ŵĥéñ àñ éẋîšţîñĝ þŕöĵéçţîöñ îš ĝéñüîñéļý îñšüƒƒîçîéñţ.

Ŕéàđéŕ àñđ ŵŕîţéŕ çöñţŕàçţš

Ŕéàđéŕš þöþüļàţé éṽéŕý ƒîéļđ öñ éàçĥ îñļîñé-çöđé ŕüñ ţĥéý éḿîţ: à šéǫüéñţîàļ ID šĥàŕéđ ƃý à þàîŕ; Type àñđ SubType ƒŕöḿ ţĥé ṽöçàƃüļàŕý þļüš à ƒöŕḿàţ-šþéçîƒîç ŕéƒîñéḿéñţ; Data àš ṽéŕƃàţîḿ ñàţîṽé ḿàŕķüþ; Disp àš à šĥöŕţ ĥüḿàñ-ŕéàđàƃļé ļàƃéļ; Equiv àš à þļàîñ-ţéẋţ éǫüîṽàļéñţ ŵĥéŕé öñé àþþļîéš; Attrs ƒöŕ ţĥé çàñöñîçàļ àţţŕîƃüţéš ţĥé çöñšţŕüçţ çàŕŕîéš; àñđ Constraints đéŕîṽéđ ƒŕöḿ ƒöŕḿàţ šéḿàñţîçš.

Ŵŕîţéŕš ŕéçöñšţŕüçţ öüţþüţ ƒŕöḿ Run.Data, ţĥé ñàţîṽé ḿàŕķüþ, ñöţ ƒŕöḿ ţĥé šéḿàñţîç ţýþé. Ţĥàţ îš ŵĥàţ ḿàķéš ŕöüñđ-ţŕîþ ƒîđéļîţý à þŕöþéŕţý öƒ ţĥé ḿöđéļ ŕàţĥéŕ ţĥàñ öƒ éàçĥ ƒöŕḿàţ'š îḿþļéḿéñţàţîöñ: ţĥé ŵŕîţéŕ ŕéþļàýš éẋàçţļý ŵĥàţ ţĥé ŕéàđéŕ çàþţüŕéđ. À ŵŕîţéŕ ƒöŕ à đéŕéñţ ƒöŕḿàţ ţĥàñ ţĥé šöüŕçé îñšţéàđ šýñţĥéšîžéš ƒŕöḿ Type þļüš Attrs.

Ļàýéŕš àñđ éḿƃéđđéđ çöñţéñţ

Éḿƃéđđéđ çöñţéñţ îš ḿöđéļéđ àš ñéšţéđ Ļàýéŕš. À Ļàýéŕ çàŕŕîéš îţš öŵñ ƒöŕḿàţ îđéñţîƒîéŕ àñđ à ParentID ļîñķîñĝ îţ ţö ţĥé éñçļöšîñĝ ļàýéŕ. Ŵĥéñ à ŕéàđéŕ éñçöüñţéŕš éḿƃéđđéđ çöñţéñţ (àñ ĤŢḾĻ šţŕîñĝ îñšîđé à ĴŠÖÑ ṽàļüé), îţ éḿîţš à çĥîļđ Ļàýéŕ ŵîţĥ ţĥàţ ƒöŕḿàţ çöñţàîñîñĝ ţĥé þàŕšéđ Ƃļöçķš, ñéšţéđ ƃéţŵééñ ţĥé þàŕéñţ Ļàýéŕ'š Þàŕţš:

PartLayerStart (format="json", id="doc1")
PartBlock (key: "title", text: "Hello")
PartLayerStart (format="html", id="sf1", parentID="doc1")
PartBlock ("Welcome to <b>our site</b>")
PartLayerEnd (id="sf1")
PartData (structural JSON)
PartLayerEnd (id="doc1")

Éàçĥ Ļàýéŕ îš îñđéþéñđéñţļý þŕöçéššàƃļé. Ļàýéŕš ñéšţ ŕéçüŕšîṽéļý: ĤŢḾĻ îñ ĴŠÖÑ îñ ÝÀḾĻ îš ţĥŕéé ļéṽéļš đééþ ŵîţĥ ñö šþéçîàļ çàšéš.

Šüƃƒîļţéŕ ŕéšöļüţîöñ

Ƒöŕḿàţ-ţö-ƒöŕḿàţ éḿƃéđđîñĝ îš çööŕđîñàţéđ ƃý à šḿàļļ îñţéŕƒàçé:

type SubfilterResolver interface {
ResolveReader(formatName string) (DataFormatReader, error)
ResolveWriter(formatName string) (DataFormatWriter, error)
}

FormatRegistry îḿþļéḿéñţš îţ ţĥŕöüĝĥ îţš NewReader àñđ NewWriter ḿéţĥöđš. Ţĥé îñţéŕƒàçé đéçöüþļéš ŕéàđéŕš ƒŕöḿ ţĥé ŕéĝîšţŕý, þŕéṽéñţš çîŕçüļàŕ îḿþöŕţš, àñđ àļļöŵš ţéšţ đöüƃļéš. Ŕéàđéŕš àñđ ŵŕîţéŕš ţĥàţ šüþþöŕţ šüƃƒîļţéŕîñĝ îḿþļéḿéñţ à ḿàŕķéŕ îñţéŕƒàçé, SubfilterAware, àñđ ţĥé ŕéšöļṽéŕ îš îñĵéçţéđ ƃéƒöŕé Open öŕ Write îš çàļļéđ. Àñý ŕéĝîšţéŕéđ ƒöŕḿàţ (ñàţîṽé, þļüĝîñ, öŕ ƃŕîđĝéđ) çàñ šéŕṽé àš à šüƃƒîļţéŕ.

Ƒöŕḿàţ çöñƒîĝš đéçļàŕé šüƃƒîļţéŕ ḿàþþîñĝš ţĥàţ ƃîñđ çöñţéñţ ļöçàţîöñš ţö à ƒöŕḿàţ:

subfilters:
- pattern: "*.body"
format: html
- pattern: "*.description"
format: markdown

Þàţţéŕñš üšé filepath.Match šéḿàñţîçš ŵîţĥ . àš ţĥé šéþàŕàţöŕ; ĴŠÖÑ ŕéàđéŕš üšé ķéý-þàţĥ ĝļöƃš, ẊḾĻ ŕéàđéŕš üšé éļéḿéñţ-þàţĥ þàţţéŕñš. Ŵĥéñ à ŕéàđéŕ ḿàţçĥéš à þàţţéŕñ îţ éḿîţš PartLayerStart, đéļéĝàţéš ţö ţĥé ŕéšöļṽéđ šüƃ-ŕéàđéŕ, àñđ éḿîţš PartLayerEnd ŵĥéñ ţĥé šüƃ-ŕéàđéŕ ƒîñîšĥéš. Ŵŕîţéŕš ƃüƒƒéŕ ţĥé þàŕţš ƃéţŵééñ ḿàţçĥîñĝ Ļàýéŕ ƃöüñđàŕîéš, đéļéĝàţé ţö ţĥé šüƃ-ŵŕîţéŕ, àñđ šþļîçé ţĥé ŕéñđéŕéđ šţŕîñĝ îñţö ţĥé þàŕéñţ ƒöŕḿàţ.

Çöñšéǫüéñçéš

  • Ţýþé đîšþàţçĥ ṽîà switch part.Type ŕéþļàçéš ŕüñ-ţîḿé ţýþé îñšþéçţîöñ, àñđ ļîñţéŕš þŕöṽîđé éẋĥàüšţîṽéñéšš çĥéçķîñĝ.
  • Àđđîñĝ à ŕéšöüŕçé ţýþé ñééđš öñļý à ñéŵ PartType çöñšţàñţ àñđ à šţŕüçţ îḿþļéḿéñţîñĝ Resource.
  • Ţööļš ţĥàţ öñļý ĥàñđļé Ƃļöçķš îĝñöŕé éṽéŕý öţĥéŕ Þàŕţ ţýþé ţĥŕöüĝĥ ţĥé ƃàšé ţööļ þàšš-ţĥŕöüĝĥ ƃéĥàṽîöŕ (É-03).
  • Ţĥé Þàŕţ šţŕéàḿ šţàýš à šîñĝļé öŕđéŕéđ çĥàññéļ; ñö ƒàñ-öüţ çöḿþļéẋîţý îñ ţĥé ƃàšé þîþéļîñé.
  • Çöñţéñţ-àđđŕéššàƃļé îđéñţîţý éñàƃļéš îñçŕéḿéñţàļ éẋţŕàçţîöñ àñđ đéđüþļîçàţîöñ àçŕöšš đöçüḿéñţš.
  • Þŕöþéŕţîéš, öṽéŕļàýš, àñđ àññöţàţîöñš ļéţ ţööļš çàŕŕý ḿéţàđàţà ŵîţĥöüţ çöñţéñţ-ḿöđéļ çĥàñĝéš.
  • Ţĥé šéḿàñţîç-ţýþé àƃšţŕàçţîöñ ļéţš ḿéḿöŕý ḿàţçĥ àçŕöšš ƒöŕḿàţš àñđ ļéţš þŕöḿþţš ŕéçéîṽé à çöñšîšţéñţ îñļîñé-çöđé ŕéþŕéšéñţàţîöñ.
  • Ŵŕîţéŕš ŕéþļàý Run.Data ṽéŕƃàţîḿ, šö ŕöüñđ-ţŕîþ ƒîđéļîţý îš à þŕöþéŕţý öƒ ţĥé ḿöđéļ ŕàţĥéŕ ţĥàñ öƒ éàçĥ ƒöŕḿàţ.
  • Ļàýéŕš ñéšţ ŕéçüŕšîṽéļý ŵîţĥ ñö šþéçîàļ çàšéš; éḿƃéđđéđ çöñţéñţ îš à ƒîŕšţ-çļàšš þîþéļîñé çîţîžéñ.
  • Ţĥé Ŕüñ üñîöñ (þàîŕéđ PcOpen/PcClose, šéļƒ-çļöšîñĝ Ph, šţŕüçţüŕéđ Plural/Select) ḿàþš ñàţüŕàļļý öñţö ẊĻÎƑƑ 2.0'š <pc>/<ph> ḿöđéļ, ḿàķîñĝ ẊĻÎƑƑ šéŕîàļîžàţîöñ à ḿàþþîñĝ ŕàţĥéŕ ţĥàñ à ļöššý çöñṽéŕšîöñ.
  • Šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, àñđ ƒîñđîñĝš šĥàŕé öñé ŕüñ-àñçĥöŕéđ šţàñđ-öƒƒ ḿéçĥàñîšḿ; šéĝḿéñţàţîöñ ñéṽéŕ ḿüţàţéš çöñţéñţ, šö îţ îš öþţ-îñ, ḿüļţî-ļàýéŕéđ, àñđ ļöššļéššļý ŕéṽéŕšîƃļé.
  • Àñçĥöŕîñĝ îš öñé îđéà ŵîţĥ þéŕ-ḿéđîüḿ ƒàçéţš (ŕüñ ŕàñĝé, ĝéöḿéţŕý, ţîḿîñĝ), šö îḿàĝé, àüđîö, àñđ ṽîđéö çöñţéñţ šîţš îñ ţĥé šàḿé Ƃļöçķ ḿöđéļ àš ţéẋţ, àñđ à ŕéçöĝñîžéđ šöüŕçé çàŕŕîéš ţĥé šàḿé Origin à ţŕàñšļàţîöñ đöéš. Ḿüļţîḿöđàļ ŵöŕķ àđđš ñö ñéŵ þöšîţîöñàļ þŕîḿîţîṽé.
  • Ƃîļîñĝüàļ îñţéŕçĥàñĝé ƒöŕḿàţš ţĥàţ çàŕŕý šéñţéñçé šéĝḿéñţš þŕöĵéçţ ţö àñđ ƒŕöḿ šéĝḿéñţàţîöñ þļüš àļîĝñḿéñţ öṽéŕļàýš àţ ţĥé ŕéàđéŕ àñđ ŵŕîţéŕ ƃöüñđàŕý, ŵîţĥöüţ ƒöŕçîñĝ šéĝḿéñţ šţŕüçţüŕé îñţö ţĥé çöñţéñţ ḿöđéļ.
  • Ţàŕĝéţš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš ķéýéđ ƃý à ṽàŕîàñţ, šö ţĥé ṽàŕîàñţ àẋîš éẋţéñđš ƃéýöñđ ļöçàļé ŵîţĥöüţ àđđîñĝ çéŕéḿöñý àţ ļöçàļé-öñļý çàļļ šîţéš.

Šéé àļšö