268 lines
8.2 KiB
JSON
268 lines
8.2 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://juzhen.dev/schemas/golden-vectors.schema.json",
|
|
"title": "Juzhen shared rules golden vectors",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "schemaVersion", "rulesetVersion", "vectors" ],
|
|
"properties": {
|
|
"$schema": { "type": "string" },
|
|
"schemaVersion": { "const": 1 },
|
|
"rulesetVersion": {
|
|
"type": "string",
|
|
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"
|
|
},
|
|
"vectors": {
|
|
"type": "array",
|
|
"minItems": 20,
|
|
"items": {
|
|
"oneOf": [
|
|
{ "$ref": "#/$defs/languageVector" },
|
|
{ "$ref": "#/$defs/punctuationClassVector" },
|
|
{ "$ref": "#/$defs/punctuationStyleVector" },
|
|
{ "$ref": "#/$defs/punctuationAdjacencyVector" },
|
|
{ "$ref": "#/$defs/spacingVector" },
|
|
{ "$ref": "#/$defs/ivsAtomVector" },
|
|
{ "$ref": "#/$defs/jinzeVector" },
|
|
{ "$ref": "#/$defs/orphanVector" }
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"$defs": {
|
|
"id": {
|
|
"type": "string",
|
|
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
|
},
|
|
"punctuationClass": {
|
|
"enum": [ "stop", "pause", "open", "close", "middle", "liga" ]
|
|
},
|
|
"style": {
|
|
"enum": [ "quanjiao", "kaiming", "banjiao" ]
|
|
},
|
|
"atoms": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "type": "string", "minLength": 1 }
|
|
},
|
|
"languageVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "language-classification" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "lang" ],
|
|
"properties": {
|
|
"lang": { "type": "string" }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "langClass" ],
|
|
"properties": {
|
|
"langClass": { "enum": [ "zh-Hans", "zh-Hant", "ja", "other" ] }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"punctuationClassVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "punctuation-classification" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "character" ],
|
|
"properties": {
|
|
"character": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "punctuationClass" ],
|
|
"properties": {
|
|
"punctuationClass": {
|
|
"oneOf": [ { "$ref": "#/$defs/punctuationClass" }, { "type": "null" } ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"punctuationStyleVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "punctuation-style" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "style", "punctuationClass" ],
|
|
"properties": {
|
|
"style": { "$ref": "#/$defs/style" },
|
|
"punctuationClass": { "$ref": "#/$defs/punctuationClass" }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "halfWidth" ],
|
|
"properties": {
|
|
"halfWidth": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"punctuationAdjacencyVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "punctuation-adjacency" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "left", "right" ],
|
|
"properties": {
|
|
"left": { "$ref": "#/$defs/punctuationClass" },
|
|
"right": { "$ref": "#/$defs/punctuationClass" }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "squeezeLeft", "squeezeRight" ],
|
|
"properties": {
|
|
"squeezeLeft": { "type": "boolean" },
|
|
"squeezeRight": { "type": "boolean" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"spacingVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "spacing" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "text" ],
|
|
"properties": {
|
|
"text": { "type": "string" }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "managedGaps", "normalizedText" ],
|
|
"properties": {
|
|
"managedGaps": { "type": "integer", "minimum": 0 },
|
|
"normalizedText": { "type": "string" },
|
|
"gapEm": { "const": 0.25 },
|
|
"authorSpaceDisposition": {
|
|
"enum": [ "remove-and-use-managed-gap", "remove-without-gap" ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ivsAtomVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "ivs-atom" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "text" ],
|
|
"properties": {
|
|
"text": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "atoms" ],
|
|
"properties": {
|
|
"atoms": { "$ref": "#/$defs/atoms" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"jinzeVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "jinze" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "left", "right" ],
|
|
"properties": {
|
|
"left": { "type": "string", "minLength": 1 },
|
|
"right": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "prohibitedBreak" ],
|
|
"properties": {
|
|
"prohibitedBreak": { "type": "boolean" },
|
|
"reason": { "enum": [ "before-stop", "before-close", "after-open" ] },
|
|
"atoms": { "$ref": "#/$defs/atoms" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"orphanVector": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "id", "category", "input", "expected" ],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/id" },
|
|
"category": { "const": "orphan" },
|
|
"input": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "text", "minimum" ],
|
|
"properties": {
|
|
"text": { "type": "string", "minLength": 1 },
|
|
"minimum": { "type": "integer", "minimum": 1 }
|
|
}
|
|
},
|
|
"expected": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [ "meaningfulCjkCount", "protectedSuffix" ],
|
|
"properties": {
|
|
"meaningfulCjkCount": { "type": "integer", "minimum": 0 },
|
|
"protectedSuffix": {
|
|
"oneOf": [ { "type": "string" }, { "type": "null" } ]
|
|
},
|
|
"atoms": { "$ref": "#/$defs/atoms" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|