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

Ƒ-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. Çöñšţàñţš çàŕŕý éẋþļîçîţ îñţéĝéŕ ṽàļüéš ƒöŕ ŵîŕé çöḿþàţîƃîļîţý: ñüḿƃéŕš àŕé ñéṽéŕ ŕéñüḿƃéŕéđ, àñđ ŕéţîŕéđ šļöţš šţàý ŕéšéŕṽéđ.

containsone flat sequence per editionanchored to runsnests, embedded contentLayerFormatstringParentIDstringBlockEditionsmap[EditionKey]*EditionNative[]EditionKeyOverlays[]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
Key string // durable identity, resolved by reconciliation (F-03)
Type string
MimeType string
Translatable bool // eligible for modification or extraction
SourceLocale LocaleID
Editions map[EditionKey]*Edition // every edition, as peers
Native []EditionKey // the editions the document's bytes hold
Overlays []Overlay // positional stand-off layers, each on one edition
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 îš à þàŕšé-ţîḿé çļàššîƒîçàţîöñ, ñöţ à þöļîçý: à ŕéàđéŕ ḿàŕķš ŵĥîçĥ Þàŕţš àŕé àüţĥöŕéđ çöñţéñţ àñđ ŵĥîçĥ àŕé šüŕŕöüñđîñĝ šţŕüçţüŕé. Ƃļöçķš ļéƒţ üñḿàŕķéđ šţàý îñ ţĥé šķéļéţöñ, üñţöüçĥéđ ƃý ţööļš ţĥàţ éđîţ, çĥéçķ, öŕ ţŕàñšļàţé.

Éđîţîöñš àñđ ţĥéîŕ ķéýš​

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

// Locale is the only required dimension; tone and channel are optional and
// zero-valued by default, so the common case carries no extra ceremony. The
// zero key names the edition the block was read in.
type EditionKey struct {
Locale LocaleID
Tone string
Channel string
}

// Edition is one edition's content with its lifecycle, provenance and
// derivation. Candidate translations (memory hits, machine output, model
// proposals) stay as alt-translation annotations.
type Edition struct {
Runs []Run
Status Status // its role's ladder; "" (new) is no committed status
Origin Origin // how the content was produced, and what governed it
Score float64
Derived *Derivation // the edition it was made from, and that edition's revision then
}

Éàçĥ éđîţîöñ çļîḿƃš ţĥé ļàđđéŕ öƒ îţš ŕöļé. Ţĥé àüţĥöŕîţàţîṽé éđîţîöñ ĝöéš ƒŕöḿ written ţö established (SourceStatus): à šöüŕçé éđîţ ŕéšéţš îţ, à çļéàñ šöüŕçé çĥéçķ šţàḿþš written, àñđ à þéŕšöñ'š àþþŕöṽàļ šţàḿþš established. À đéŕîṽéđ éđîţîöñ ĝöéš ƒŕöḿ draft ţĥŕöüĝĥ translated ţö established (TargetStatus).

Ţĥé éđîţîöñ à ƃļöçķ ŵàš ŕéàđ îñ îš ƒîļéđ üñđéŕ ţĥé žéŕö ķéý, ŵĥàţéṽéŕ ļàñĝüàĝé SourceLocale ñàḿéš, àñđ éṽéŕý öţĥéŕ éđîţîöñ üñđéŕ îţš çàñöñîçàļ ķéý, šö nb_NO àñđ nb-NO ñàḿé öñé. Native ļîšţš ţĥé éđîţîöñš ţĥé đöçüḿéñţ'š ƃýţéš ĥöļđ: ţĥé éđîţîöñ ţĥé ƃļöçķ ŵàš ŕéàđ îñ ƒîŕšţ, üñđéŕ ţĥé žéŕö ķéý, ţĥéñ éàçĥ éđîţîöñ à ƃîļîñĝüàļ ŕéàđéŕ ƒîļéš ƒŕöḿ ţĥé đöçüḿéñţ, šüçĥ àš ţĥé ţàŕĝéţ öƒ àñ ẊĻÎƑƑ üñîţ öŕ éàçĥ ļàñĝüàĝé öƒ àñ ẋçšţŕîñĝš éñţŕý. Àñ éḿþţý ļîšţ ḿéàñš ţĥé đöçüḿéñţ ĥöļđš ţĥé éđîţîöñ îţ ŵàš ŕéàđ îñ àļöñé. À ţŕàñšļàţîöñ à ŕéàđéŕ ƒîļéš üñđéŕ ñö ļàñĝüàĝé (à ĶƂƑ ƃüñđļé'š unlabelled éđîţîöñ) šîţš àþàŕţ ƒŕöḿ ţĥé éđîţîöñš: TargetEdition("") ŕéàđš îţ àñđ EachTargetEdition ýîéļđš îţ üñđéŕ ţĥé žéŕö ķéý. Îţš öṽéŕļàýš šîţ àþàŕţ ŵîţĥ îţ, ƃéçàüšé àñ öṽéŕļàý ñàḿîñĝ ţĥé žéŕö ķéý îš öñ ţĥé éđîţîöñ ţĥé ƃļöçķ ŵàš ŕéàđ îñ: TargetSegmentation(locale) àñđ SetTargetSegmentation(locale, spans) ŕéàçĥ à ţŕàñšļàţîöñ'š šéĝḿéñţàţîöñ ƃý ţĥé ļöçàļé ţĥé ţàŕĝéţ àççéššöŕš ţàķé, ţĥé éḿþţý ļöçàļé îñçļüđéđ.

Öñé šéţ öƒ àççéššöŕš ŕéàçĥéš éṽéŕý éđîţîöñ ƃý îţš ķéý: Edition(k), SetEdition(k, e), SetEditionStatus(k, s), RemoveEdition(k), EditionKeys(), EachEdition, NativeEditions() àñđ Authoritative(policy), ţĥé éđîţîöñ éṽéŕý öţĥéŕ öñé îš đéŕîṽéđ ƒŕöḿ. Ŵîţĥ ñö þöļîçý ţĥàţ îš ţĥé ƒîŕšţ ñàţîṽé éđîţîöñ, ţĥé öñé ţĥé ƃļöçķ ŵàš ŕéàđ îñ; à þŕöĵéçţ'š þöļîçý ñàḿéš ţĥé šöüŕçé ļàñĝüàĝé îţš ŕéçîþé đéçļàŕéš. Ţĥé žéŕö ķéý àñđ ţĥé šöüŕçé ļàñĝüàĝé ñàḿé ţĥé éđîţîöñ ţĥé ƃļöçķ ŵàš ŕéàđ îñ, àñđ à šàḿé-ļàñĝüàĝé éđîţîöñ ŵîţĥ à ţöñé öŕ à çĥàññéļ (en;channel=short) îš àñ éđîţîöñ öƒ îţš öŵñ. À ƃîļîñĝüàļ ƒîļé ŵĥöšé ţŵö ļàñĝüàĝéš àŕé öñé (àñ ẊĻÎƑƑ ƒîļé ƒŕöḿ éñ-ÜŠ ţö éñ-ÜŠ) ĥöļđš àñ éđîţîöñ üñđéŕ ţĥé šöüŕçé ļàñĝüàĝé; ţĥàţ ķéý ţĥéñ ŕéàçĥéš îţ, àñđ ţĥé žéŕö ķéý àļöñé ŕéàçĥéš ţĥé šöüŕçé. SetEdition öñ ţĥé éđîţîöñ à ƃļöçķ ŵàš ŕéàđ îñ îš àñ éđîţ, àñđ ţĥé ƃļöçķ ķééþš ţĥé šöüŕçé àš ŕéàđ (SourceAsRead); à šţàţüš šţàḿþ ĝöéš ţĥŕöüĝĥ SetEditionStatus, ŵĥîçĥ çĥàñĝéš ţĥé šţàţüš àļöñé. EditionKeys() ļîšţš ţĥé ķéýš îñ à šţàƃļé öŕđéŕ, àñđ EachEdition ṽîšîţš éṽéŕý éđîţîöñ öñçé ŵîţĥöüţ šöŕţîñĝ, ţĥé öñé ţĥé ƃļöçķ ŵàš ŕéàđ îñ ƒîŕšţ, ƒöŕ ļööþš öṽéŕ ḿàñý ƃļöçķš. TargetEdition(locale), SetTargetEdition(k, e) àñđ ţĥé ļöçàļé àççéššöŕš (TargetText, SetTargetRuns, …) àđđŕéšš ţĥé éđîţîöñš öţĥéŕ ţĥàñ ţĥé öñé ţĥé ƃļöçķ ŵàš ŕéàđ îñ; ţĥéŕé ţĥé šöüŕçé ļàñĝüàĝé ŕéàçĥéš àñ éđîţîöñ öñļý ŵĥéñ ţĥé ƃļöçķ ĥöļđš öñé öƒ îţš öŵñ, àñđ EachTargetEdition ṽîšîţš éàçĥ üñđéŕ ţĥé ķéý îţ îš ƒîļéđ üñđéŕ.

À đéŕîṽéđ éđîţîöñ'š đéŕîṽàţîöñ îš ŕéàđ àñđ ĝŕàđéđ ƒŕöḿ ţĥé çöñţéñţ: Derivation(k) àñđ SetDerivation(k, d) ŕéàçĥ îţ, àñđ DerivationStanding(k) ŕéàđš îţ çüŕŕéñţ ŵĥîļé ţĥé éđîţîöñ îţ ñàḿéš šţîļļ ĥàš ţĥé ŕéṽîšîöñ îţ ŕéçöŕđš, šţàļé öñçé ţĥàţ éđîţîöñ ḿöṽéš (BasisStanding(d) ĝŕàđéš à đéŕîṽàţîöñ ĥéļđ éļšéŵĥéŕé, šüçĥ àš ţĥé ƃàšîš öƒ à ŕéçöŕđéđ ŵŕîţé). À ŕéṽîšîöñ çöṽéŕš ţĥé ķéý îţš éđîţîöñ îš ƒîļéđ üñđéŕ, àñđ ŕéàđéŕš öƒ öñé đöçüḿéñţ ƒîļé îţš šöüŕçé üñđéŕ đéŕéñţ ķéýš: ñöñé, ţĥé ļàñĝüàĝé ţĥé ƒîļé đéçļàŕéš, öŕ à þŕöĵéçţ'š šöüŕçé ļàñĝüàĝé. SourceRevisions(source) ļîšţš ţĥé ŕéṽîšîöñ öƒ ţĥé šöüŕçé üñđéŕ éàçĥ, ţĥé þŕöþéŕţý PropReadSourceLocale ķééþîñĝ à đéçļàŕéđ ļàñĝüàĝé öñ à ƃļöçķ à þŕöĵéçţ ŕéàđ ƒîļéš üñđéŕ ţĥé þŕöĵéçţ'š, šö à ƃàšîš àñý ŕéàđéŕ ţööķ îš ḿàţçĥéđ ƃý çöñţéñţ. BasisStanding ḿàţçĥéš à đéŕîṽàţîöñ ƒŕöḿ ţĥé šöüŕçé ţĥé šàḿé ŵàý: ŵĥéŕé ţĥé éđîţîöñ îţ ñàḿéš îš ţĥé öñé ţĥé ƃļöçķ ŵàš ŕéàđ îñ, öŕ à ļàñĝüàĝé ţĥé ƃļöçķ ĥöļđš ñö éđîţîöñ îñ, îţ ŕéàđš çüŕŕéñţ ŵĥîļé àñý öƒ ţĥöšé ŕéṽîšîöñš îš ţĥé ƃàšîš. TranslateAfterLevel.AdmitsDerivation(b, from) îš ţĥé đéŕîṽàţîöñ ĝàţé: àñ éđîţîöñ îš đéŕîṽéđ ƒŕöḿ from öñļý öñçé from ŕéàçĥéš ţĥé ļéṽéļ öñ ţĥé ļàđđéŕ öƒ îţš ŕöļé.

Çöđé öüţšîđé core/model ŕéàđš àñđ ŵŕîţéš éđîţîöñš ţĥŕöüĝĥ ţĥéšé àççéššöŕš, šö ţĥé šţöŕàĝé çàñ çĥàñĝé îñšîđé core/model àļöñé; make fieldguard ƒàîļš öñ à üšé öƒ Editions öŕ Native àñýŵĥéŕé éļšé öüţšîđé à ţéšţ.

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

CopyEditionSet() çöþîéš à ƃļöçķ ŵîţĥ à šéţ öƒ éđîţîöñš öƒ îţš öŵñ, îţš öŵñ éñţŕý ƒöŕ ţĥé éđîţîöñ îţ ŵàš ŕéàđ îñ, àñđ éàçĥ đéŕîṽéđ éđîţîöñ šĥàŕéđ, šö àđđîñĝ öŕ ŕéḿöṽîñĝ àñ éđîţîöñ öñ éîţĥéŕ ƃļöçķ ļéàṽéš ţĥé öţĥéŕ'š šéţ àš îţ ŵàš. CopyEditions(copyRuns) àļšö çöþîéš ţĥé ŕüñš öƒ éṽéŕý éđîţîöñ àñđ ţĥé šöüŕçé àš ŕéàđ.

model.EditionRevision(block, k) ñàḿéš àñ éđîţîöñ'š çöñţéñţ: r: àñđ 16 ĥéẋ đîĝîţš öƒ ţĥé ŠĤÀ-256 öƒ ţĥé éđîţîöñ ķéý àñđ îţš ŕüñš àš çàñöñîçàļ ĴŠÖÑ. Šţàţüš, öŕîĝîñ àñđ ţĥé öţĥéŕ éđîţîöñš àŕé ļéƒţ öüţ, šö à ŕéṽîéŵ đéçîšîöñ ḿöṽéš ñö ŕéṽîšîöñ. À çĥàñĝé ḿàđé àĝàîñšţ à ŕéàđ ñàḿéš ţĥé ŕéṽîšîöñ îţ ŕéàđ àñđ ļàñđš öñļý ŵĥîļé ţĥé éđîţîöñ šţîļļ ĥàš îţ.

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

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

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

Þŕöþéŕţîéš​

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

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

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

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

  • Öṽéŕļàýš àŕé þöšîţîöñàļ: ŕüñ-àñçĥöŕéđ šþàñ šéţš ţĥàţ þöîñţ îñţö ţĥé çöñţéñţ: šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, ţéŕḿ çàñđîđàţéš, ƒîñđîñĝš, šöüŕçé-ţö-ţàŕĝéţ àļîĝñḿéñţ. Éàçĥ Span çàŕŕîéš à ŕüñ Range (îţš þöšîţîöñ), öþţîöñàļ šţŕîñĝ Props, àñđ àñ öþţîöñàļ ţýþéđ þàýļöàđ Value. Ƃéçàüšé ŕàñĝéš àñçĥöŕ ţö ŕüñš, à ŕéŵŕîţé öƒ àñ éđîţîöñ šĥîƒţš ţĥé šþàñš öñ ţĥàţ éđîţîöñ, ţĥé šöüŕçé'š àñđ éàçĥ ţàŕĝéţ'š àļîķé. Éṽéŕý çöñţéñţ ŵŕîţé ĝöéš ţĥŕöüĝĥ ţĥé öñé àþþļîéŕ (change.ApplyBlock, É-03), ŵĥîçĥ ŕéƃàšéš ţĥé šþàñš öñ ţĥé éđîţîöñ îţ ŕéŵŕîţéš ŵîţĥ model.RemapOverlays. À šþàñ ƒöļļöŵš ţĥé ţéẋţ îţ çöṽéŕš: àñ éđîţ îñšîđé îţ ĝŕöŵš öŕ šĥŕîñķš îţ, àñ éđîţ ţĥàţ ŕéþļàçéš àļļ öƒ îţš ţéẋţ ļéàṽéš îţ öṽéŕ ţĥé ŕéþļàçéḿéñţ, àñ éđîţ àçŕöšš öñé öƒ îţš ƃöüñđàŕîéš ļéàṽéš îţ öṽéŕ ţĥé ţéẋţ ţĥé éđîţ ķéþţ, àñđ îţ îš đŕöþþéđ öñļý ŵĥéñ ţĥé éđîţš đéļéţé éṽéŕýţĥîñĝ îţ çöṽéŕéđ. À ƒîñđîñĝ šţàţéš šöḿéţĥîñĝ àƃöüţ ţĥé éẋàçţ ţéẋţ üñđéŕ îţ, šö àñ éđîţ ţĥéŕé đŕöþš îţ. Éṽéŕý šþàñ ļéƒţ ḿüšţ ŕéšöļṽé îñ ţĥé ñéŵ ŕüñš. À šéĝḿéñţàţîöñ ļàýéŕ îš ţĥé éđîţîöñ'š ŵĥöļé šéĝḿéñţ ļîšţ, ŵĥîçĥ ƃîļîñĝüàļ ŵŕîţéŕš ŕéàđ àš šüçĥ, šö îţ îš ķéþţ öŕ đŕöþþéđ ŵĥöļé: ţĥé šéĝḿéñţ ĥöļđîñĝ àñ éđîţ ĝŕöŵš öŕ šĥŕîñķš ŵîţĥ îţ, àñđ àñ éđîţ àçŕöšš à šéĝḿéñţ ƃöüñđàŕý đŕöþš ţĥé ļàýéŕ. Àñ îñļîñé çöđé ĥàš ñö ŵîđţĥ îñ ţĥé ţéẋţ, šö à çàŕŕîéđ ƃöüñđàŕý ķééþš îţš þļàçé àḿöñĝ ţĥé çöđéš ƃéšîđé îţ, àñđ à çöđé ţĥàţ éñđéđ à šéĝḿéñţ šţîļļ éñđš îţ. À ţŕàñšƒöŕḿîñĝ ţööļ'š éđîţ þļàñ šüþþļîéš ţĥé éđîţš; ŵîţĥöüţ ţĥéḿ ţĥé àþþļîéŕ üšéš ţĥé öñé ŕéĝîöñ ţĥé öļđ àñđ ñéŵ ţéẋţ đéŕ îñ, àñđ àñ öþàǫüé ŵĥöļé-ƃļöçķ ŕéŵŕîţé đŕöþš ţĥé éđîţîöñ'š öṽéŕļàýš.
  • Àññöţàţîöñš àŕé ƃļöçķ-šçöþéđ: à ķéýéđ ḿàþ öƒ ţýþéđ þàýļöàđš đéšçŕîƃîñĝ ţĥé ƃļöçķ àš à ŵĥöļé: àļţ-ţŕàñšļàţîöñš, ñöţéš, àñàļýšîš ŕéšüļţš, ƒöŕḿàţ ŕöüñđ-ţŕîþ šţàţé, àñđ ţĥé ƃļöçķ'š àñçĥöŕ àñđ ŕöļé ƒàçéţš. À šöüŕçé ŕéŵŕîţé đöéš ñöţ îñṽàļîđàţé ţĥéḿ.
type Overlay struct {
Type OverlayType // segmentation | term | entity | qa | alignment | term-candidate | editor-anchor
Edition EditionKey // the edition its spans anchor to; the zero key is the one the block was read in
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: Ţĥé ƒöŕḿàţ šýšţéḿ.

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

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

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

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

Éàçĥ éđîţîöñ'š çöñţéñţ îš à ƒļàţ šéǫüéñçé öƒ Run ṽàļüéš (Edition.Runs), ŵîţĥ ñö éḿƃéđđéđ ḿàŕķéŕ çĥàŕàçţéŕš:

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

// Edit text: the placeholder form with each character reference (&amp;,
// &rsquo;) written as its character. ParseRunsEditText reads an edit back and
// restores a reference where the edit kept its character.
func RunsEditText(runs []Run) 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 (ñö þŕöĵéçţîöñ)éàçĥ éđîţîöñ'š Runs, ĶƂƑ ŵîŕéÞîþéļîñé ţööļš, šţöŕéš, ŕéàđéŕš àñđ ŵŕîţéŕš
RenderRunsWithDatañàţîṽé šöüŕçé ḿàŕķüþƑöŕḿàţ ŵŕîţéŕš; ŕéþļàýš Data ṽéŕƃàţîḿ
RunsStructuralTextClick {1}here{/1} for infoḾéḿöŕý ḿàţçĥîñĝ, šţŕüçţüŕàļ ţîéŕ
RunsGeneralizedTextšţŕüçţüŕàļ + éñţîţý þļàçéĥöļđéŕšḾéḿöŕý ḿàţçĥîñĝ, ĝéñéŕàļîžéđ ţîéŕ
RunsPlaceholderText<x id="1"/>here<x id="/1"/>Þŕöḿþţš ŵĥéŕé ţàĝ þŕéšéŕṽàţîöñ îš çŕîţîçàļ
RunsEditTextFish & <x id="1"/>chips<x id="/1"/>Ţĥé éđîţ ļööþ: kapi inspect, kapi apply, ḾÇÞ read_blocks àñđ apply_edits
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 à ţŕàñšļàţîöñ đöéš. Ḿüļţîḿöđàļ ŵöŕķ àđđš ñö ñéŵ þöšîţîöñàļ þŕîḿîţîṽé.
  • Ƃîļîñĝüàļ îñţéŕçĥàñĝé ƒöŕḿàţš ţĥàţ çàŕŕý šéñţéñçé šéĝḿéñţš þŕöĵéçţ ţö àñđ ƒŕöḿ šéĝḿéñţàţîöñ þļüš àļîĝñḿéñţ öṽéŕļàýš àţ ţĥé ŕéàđéŕ àñđ ŵŕîţéŕ ƃöüñđàŕý, ŵîţĥöüţ ƒöŕçîñĝ šéĝḿéñţ šţŕüçţüŕé îñţö ţĥé çöñţéñţ ḿöđéļ.
  • Éđîţîöñš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš ķéýéđ ƃý ļàñĝüàĝé, ţöñé àñđ çĥàññéļ, šö à ƃļöçķ ĥöļđš à šàḿé-ļàñĝüàĝé çĥàññéļ éđîţîöñ ƃéšîđé îţš šöüŕçé ŵîţĥöüţ àđđîñĝ çéŕéḿöñý àţ ļöçàļé-öñļý çàļļ šîţéš.

Šéé àļšö​