feat(rules): 建立共享排版契约并收束 WebKit 与 Unicode 基线
This commit is contained in:
@@ -0,0 +1,255 @@
|
||||
{
|
||||
"$schema": "./juzhen-rules.schema.json",
|
||||
"schemaVersion": 1,
|
||||
"rulesetVersion": "1.0.0",
|
||||
"unicodeProfile": {
|
||||
"version": "17.0.0",
|
||||
"coverage": "CJK Unified Ideographs through Extension J, compatibility ideographs, kana, bopomofo, radicals, and enclosed CJK characters"
|
||||
},
|
||||
"characterClasses": {
|
||||
"representation": "unicode-code-point-ranges",
|
||||
"cjk": [
|
||||
{ "start": "2E80", "end": "2EFF" },
|
||||
{ "start": "2F00", "end": "2FDF" },
|
||||
{ "start": "3040", "end": "309F" },
|
||||
{ "start": "30A0", "end": "30FA" },
|
||||
{ "start": "30FC", "end": "30FF" },
|
||||
{ "start": "3100", "end": "312F" },
|
||||
{ "start": "3200", "end": "32FF" },
|
||||
{ "start": "3400", "end": "4DBF" },
|
||||
{ "start": "4E00", "end": "9FFF" },
|
||||
{ "start": "F900", "end": "FAFF" },
|
||||
{ "start": "20000", "end": "2A6DF" },
|
||||
{ "start": "2A700", "end": "2B73F" },
|
||||
{ "start": "2B740", "end": "2B81F" },
|
||||
{ "start": "2B820", "end": "2CEAF" },
|
||||
{ "start": "2CEB0", "end": "2EBEF" },
|
||||
{ "start": "2EBF0", "end": "2EE5F" },
|
||||
{ "start": "2F800", "end": "2FA1F" },
|
||||
{ "start": "30000", "end": "3134F" },
|
||||
{ "start": "31350", "end": "323AF" },
|
||||
{ "start": "323B0", "end": "3347F" }
|
||||
],
|
||||
"ansAfterCjk": [
|
||||
{ "start": "0024", "end": "0026" },
|
||||
{ "start": "002A", "end": "002B" },
|
||||
{ "codePoint": "002D" },
|
||||
{ "start": "0030", "end": "0039" },
|
||||
{ "codePoint": "003D" },
|
||||
{ "codePoint": "0040" },
|
||||
{ "start": "0041", "end": "005A" },
|
||||
{ "codePoint": "005C" },
|
||||
{ "codePoint": "005E" },
|
||||
{ "start": "0061", "end": "007A" },
|
||||
{ "start": "00A1", "end": "00B6" },
|
||||
{ "start": "00B8", "end": "00FF" },
|
||||
{ "start": "0100", "end": "024F" },
|
||||
{ "start": "0370", "end": "03FF" },
|
||||
{ "start": "0400", "end": "04FF" },
|
||||
{ "start": "20A0", "end": "20BF" },
|
||||
{ "start": "2150", "end": "21FF" },
|
||||
{ "start": "2200", "end": "22FF" },
|
||||
{ "start": "2700", "end": "27BF" }
|
||||
],
|
||||
"ansBeforeCjk": [
|
||||
{ "start": "0024", "end": "0026" },
|
||||
{ "start": "002A", "end": "002B" },
|
||||
{ "codePoint": "002D" },
|
||||
{ "start": "0030", "end": "0039" },
|
||||
{ "codePoint": "003D" },
|
||||
{ "start": "0041", "end": "005A" },
|
||||
{ "codePoint": "005C" },
|
||||
{ "codePoint": "005E" },
|
||||
{ "start": "0061", "end": "007A" },
|
||||
{ "start": "00A1", "end": "00B6" },
|
||||
{ "start": "00B8", "end": "00FF" },
|
||||
{ "start": "0100", "end": "024F" },
|
||||
{ "start": "0370", "end": "03FF" },
|
||||
{ "start": "0400", "end": "04FF" },
|
||||
{ "start": "20A0", "end": "20BF" },
|
||||
{ "start": "2150", "end": "21FF" },
|
||||
{ "start": "2200", "end": "22FF" },
|
||||
{ "start": "2700", "end": "27BF" }
|
||||
],
|
||||
"variationSelectors": [
|
||||
{ "start": "FE00", "end": "FE0F" },
|
||||
{ "start": "E0100", "end": "E01EF" }
|
||||
],
|
||||
"biaodian": {
|
||||
"classificationOrder": [ "stop", "pause", "open", "close", "middle", "liga" ],
|
||||
"classes": {
|
||||
"stop": [
|
||||
{ "codePoint": "3002" },
|
||||
{ "codePoint": "FF01" },
|
||||
{ "codePoint": "FF0E" },
|
||||
{ "codePoint": "FF1F" }
|
||||
],
|
||||
"pause": [
|
||||
{ "codePoint": "3001" },
|
||||
{ "codePoint": "FF0C" },
|
||||
{ "codePoint": "FF1A" },
|
||||
{ "codePoint": "FF1B" }
|
||||
],
|
||||
"open": [
|
||||
{ "codePoint": "2018" },
|
||||
{ "codePoint": "201C" },
|
||||
{ "codePoint": "3008" },
|
||||
{ "codePoint": "300A" },
|
||||
{ "codePoint": "300C" },
|
||||
{ "codePoint": "300E" },
|
||||
{ "codePoint": "3010" },
|
||||
{ "codePoint": "3014" },
|
||||
{ "codePoint": "3016" },
|
||||
{ "codePoint": "FF08" },
|
||||
{ "codePoint": "FF3B" },
|
||||
{ "codePoint": "FF5B" }
|
||||
],
|
||||
"close": [
|
||||
{ "codePoint": "2019" },
|
||||
{ "codePoint": "201D" },
|
||||
{ "codePoint": "3009" },
|
||||
{ "codePoint": "300B" },
|
||||
{ "codePoint": "300D" },
|
||||
{ "codePoint": "300F" },
|
||||
{ "codePoint": "3011" },
|
||||
{ "codePoint": "3015" },
|
||||
{ "codePoint": "3017" },
|
||||
{ "codePoint": "FF09" },
|
||||
{ "codePoint": "FF3D" },
|
||||
{ "codePoint": "FF5D" }
|
||||
],
|
||||
"middle": [
|
||||
{ "codePoint": "00B7" },
|
||||
{ "codePoint": "2027" },
|
||||
{ "codePoint": "30FB" }
|
||||
],
|
||||
"liga": [
|
||||
{ "codePoint": "2014" },
|
||||
{ "codePoint": "2026" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"overrideSemantics": {
|
||||
"mode": "append",
|
||||
"westernTargets": [ "ansAfterCjk", "ansBeforeCjk" ],
|
||||
"removalAllowed": false,
|
||||
"reclassificationAllowed": false
|
||||
}
|
||||
},
|
||||
"atoms": {
|
||||
"unit": "base-code-point-plus-optional-variation-selector",
|
||||
"maxVariationSelectors": 1,
|
||||
"variationSelectorMustFollowBase": true,
|
||||
"isolatedVariationSelector": "independent-atom"
|
||||
},
|
||||
"locales": {
|
||||
"classes": [ "zh-Hans", "zh-Hant", "ja", "other" ],
|
||||
"primaryLanguageBoundary": "exact-or-hyphen-subtag",
|
||||
"classificationOrder": [
|
||||
"ja-primary-language",
|
||||
"zh-explicit-script",
|
||||
"zh-traditional-region",
|
||||
"zh-bare-default",
|
||||
"zh-remaining",
|
||||
"other"
|
||||
],
|
||||
"zh": {
|
||||
"explicitTraditionalSubtag": "hant",
|
||||
"explicitSimplifiedSubtag": "hans",
|
||||
"traditionalRegions": [ "tw", "hk", "mo" ],
|
||||
"bare": "zh-Hant",
|
||||
"remaining": "zh-Hans"
|
||||
},
|
||||
"ja": "ja",
|
||||
"defaultPolicies": {
|
||||
"zh-Hans": "kaiming",
|
||||
"zh-Hant": "quanjiao",
|
||||
"ja": "quanjiao",
|
||||
"other": "quanjiao"
|
||||
},
|
||||
"resolutionPriority": [
|
||||
"element-attribute-or-style-policy-nearest-ancestor",
|
||||
"locale-class-policy",
|
||||
"global-style",
|
||||
"default-policy"
|
||||
]
|
||||
},
|
||||
"punctuationStyles": {
|
||||
"baselineHalfWidthClasses": {
|
||||
"quanjiao": [],
|
||||
"kaiming": [ "pause", "open", "close" ],
|
||||
"banjiao": [ "stop", "pause", "open", "close" ]
|
||||
},
|
||||
"adjacency": {
|
||||
"rule": "squeeze-each-facing-blank-side-independently",
|
||||
"sentenceBoundaryException": {
|
||||
"left": "stop",
|
||||
"right": "open",
|
||||
"preserve": "left-right-blank"
|
||||
}
|
||||
}
|
||||
},
|
||||
"spacing": {
|
||||
"gapEm": 0.25,
|
||||
"directions": {
|
||||
"cjkToAns": "ansAfterCjk",
|
||||
"ansToCjk": "ansBeforeCjk",
|
||||
"asymmetry": "at-sign-only-after-cjk"
|
||||
},
|
||||
"authorSpaceDisposition": {
|
||||
"cjkAns": "remove-and-use-managed-gap",
|
||||
"ansCjk": "remove-and-use-managed-gap",
|
||||
"cjkCjk": "remove-without-gap",
|
||||
"revertRestoresRemovedSpace": false
|
||||
}
|
||||
},
|
||||
"lineBreaking": {
|
||||
"prohibitedBreaks": {
|
||||
"before": [ "close", "pause", "stop", "middle", "liga" ],
|
||||
"after": [ "open" ]
|
||||
},
|
||||
"orphan": {
|
||||
"defaultMeaningfulCjkChars": 2,
|
||||
"counts": "cjk-atoms-not-classified-as-biaodian",
|
||||
"excludes": [ "biaodian", "non-cjk" ]
|
||||
}
|
||||
},
|
||||
"applicabilityLevels": {
|
||||
"text": [ "spacing", "punctuation-classification-and-width" ],
|
||||
"paragraph": [ "prohibited-breaks", "orphan-minimum", "long-word-hyphenation" ]
|
||||
},
|
||||
"semanticProcessing": {
|
||||
"dependencies": [
|
||||
{ "before": "atomize", "after": "classify" },
|
||||
{ "before": "classify", "after": "derive-spacing" },
|
||||
{ "before": "classify", "after": "derive-punctuation-width" },
|
||||
{ "before": "classify", "after": "derive-break-constraints" },
|
||||
{ "before": "classify", "after": "derive-orphan-constraint" }
|
||||
],
|
||||
"conditionalLineEdgeOutcomes": [
|
||||
"punctuation-half-width-at-line-edge",
|
||||
"remove-managed-gap-at-line-end"
|
||||
]
|
||||
},
|
||||
"adapterBoundary": {
|
||||
"platformNeutral": [
|
||||
"unicode-character-classes",
|
||||
"logical-atom-boundaries",
|
||||
"locale-classification-and-policy",
|
||||
"punctuation-width-semantics",
|
||||
"spacing-decisions-and-distance",
|
||||
"prohibited-break-relations",
|
||||
"orphan-count",
|
||||
"applicability-levels-and-semantic-dependencies"
|
||||
],
|
||||
"excludedAdapterMechanisms": [
|
||||
"generated-node-or-element-representation",
|
||||
"ownership-and-reversion-bookkeeping",
|
||||
"rendering-primitive-selection",
|
||||
"generated-line-break-hints",
|
||||
"mutation-observation-or-rerun-lifecycle",
|
||||
"layout-measurement",
|
||||
"platform-specific-workarounds"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user