yomichan/ext/data/schemas/dictionary-term-bank-v3-schema.json
Stephen Kraus 6a74746113
Add new structured content features: lists and the HTML lang attribute (#2129)
* Add support for structured content lists and `list-style-type` style

A full list of supported style types is documented here:
https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type

There's nothing in this code preventing a term bank from assigning,
for example, a `list-style-type` style to a `div` element, but it
doesn't seem like browsers will complain about things like that.

* Add support for `lang` attribute in structured content

Support added for the following node types:

"ruby", "rt", "rp", "table", "thead", "tbody", "tfoot", "tr", "td",
"th", "span", "div", "ol", "ul", "li", "a"

I couldn't get it to work for the alt-hover text on "img" tags.

Tests are included in the file
"test/data/dictionaries/valid-dictionary/term_bank_1.json"

* Add styles for structured content lists

* Add override rules for new structured-content list styles

see: https://github.com/FooSoft/yomichan/pull/2129

Co-authored-by: stephenmk <stephenmk@users.noreply.github.com>
2022-05-14 09:59:38 -04:00

469 lines
23 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"structuredContent": {
"oneOf": [
{
"type": "string",
"description": "Represents a text node."
},
{
"type": "array",
"items": {
"$ref": "#/definitions/structuredContent",
"description": "An array of child content."
}
},
{
"type": "object",
"oneOf": [
{
"type": "object",
"description": "Empty tags.",
"required": [
"tag"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"enum": ["br"]
},
"data": {
"$ref": "#/definitions/structuredContentData"
}
}
},
{
"type": "object",
"description": "Generic container tags.",
"required": [
"tag"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"enum": ["ruby", "rt", "rp", "table", "thead", "tbody", "tfoot", "tr"]
},
"content": {
"$ref": "#/definitions/structuredContent"
},
"data": {
"$ref": "#/definitions/structuredContentData"
},
"lang": {
"type": "string",
"description": "Defines the language of an element in the format defined by RFC 5646."
}
}
},
{
"type": "object",
"description": "Table tags.",
"required": [
"tag"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"enum": ["td", "th"]
},
"content": {
"$ref": "#/definitions/structuredContent"
},
"data": {
"$ref": "#/definitions/structuredContentData"
},
"colSpan": {
"type": "integer",
"minimum": 1
},
"rowSpan": {
"type": "integer",
"minimum": 1
},
"style": {
"$ref": "#/definitions/structuredContentStyle"
},
"lang": {
"type": "string",
"description": "Defines the language of an element in the format defined by RFC 5646."
}
}
},
{
"type": "object",
"description": "Container tags supporting configurable styles.",
"required": [
"tag"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"enum": ["span", "div", "ol", "ul", "li"]
},
"content": {
"$ref": "#/definitions/structuredContent"
},
"data": {
"$ref": "#/definitions/structuredContentData"
},
"style": {
"$ref": "#/definitions/structuredContentStyle"
},
"lang": {
"type": "string",
"description": "Defines the language of an element in the format defined by RFC 5646."
}
}
},
{
"type": "object",
"description": "Image tag.",
"required": [
"tag",
"path"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"const": "img"
},
"data": {
"$ref": "#/definitions/structuredContentData"
},
"path": {
"type": "string",
"description": "Path to the image file in the archive."
},
"width": {
"type": "number",
"description": "Preferred width of the image.",
"minimum": 0
},
"height": {
"type": "number",
"description": "Preferred width of the image.",
"minimum": 0
},
"title": {
"type": "string",
"description": "Hover text for the image."
},
"pixelated": {
"type": "boolean",
"description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
"default": false
},
"imageRendering": {
"type": "string",
"description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
"enum": ["auto", "pixelated", "crisp-edges"],
"default": "auto"
},
"appearance": {
"type": "string",
"description": "Controls the appearance of the image. The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
"enum": ["auto", "monochrome"],
"default": "auto"
},
"background": {
"type": "boolean",
"description": "Whether or not a background color is displayed behind the image.",
"default": true
},
"collapsed": {
"type": "boolean",
"description": "Whether or not the image is collapsed by default.",
"default": false
},
"collapsible": {
"type": "boolean",
"description": "Whether or not the image can be collapsed.",
"default": false
},
"verticalAlign": {
"type": "string",
"description": "The vertical alignment of the image.",
"enum": ["baseline", "sub", "super", "text-top", "text-bottom", "middle", "top", "bottom"]
},
"sizeUnits": {
"type": "string",
"description": "The units for the width and height.",
"enum": ["px", "em"]
}
}
},
{
"type": "object",
"description": "Link tag.",
"required": [
"tag",
"href"
],
"additionalProperties": false,
"properties": {
"tag": {
"type": "string",
"const": "a"
},
"content": {
"$ref": "#/definitions/structuredContent"
},
"href": {
"type": "string",
"description": "The URL for the link. URLs starting with a ? are treated as internal links to other dictionary content.",
"pattern": "^(?:https?:|\\?)[\\w\\W]*"
},
"lang": {
"type": "string",
"description": "Defines the language of an element in the format defined by RFC 5646."
}
}
}
]
}
]
},
"structuredContentData": {
"type": "object",
"description": "Generic data attributes that should be added to the element.",
"additionalProperties": {
"type": "string"
}
},
"structuredContentStyle": {
"type": "object",
"additionalProperties": false,
"properties": {
"fontStyle": {
"type": "string",
"enum": ["normal", "italic"],
"default": "normal"
},
"fontWeight": {
"type": "string",
"enum": ["normal", "bold"],
"default": "normal"
},
"fontSize": {
"type": "string",
"enum": ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "xxx-large"],
"default": "medium"
},
"textDecorationLine": {
"oneOf": [
{
"type": "string",
"enum": ["none", "underline", "overline", "line-through"],
"default": "none"
},
{
"type": "array",
"items": {
"type": "string",
"enum": ["underline", "overline", "line-through"],
"default": "none"
}
}
]
},
"verticalAlign": {
"type": "string",
"enum": ["baseline", "sub", "super", "text-top", "text-bottom", "middle", "top", "bottom"],
"default": "baseline"
},
"marginTop": {
"type": "number",
"default": 0
},
"marginLeft": {
"type": "number",
"default": 0
},
"marginRight": {
"type": "number",
"default": 0
},
"marginBottom": {
"type": "number",
"default": 0
},
"listStyleType": {
"type": "string",
"default": "disc"
}
}
}
},
"type": "array",
"description": "Data file containing term information.",
"additionalItems": {
"type": "array",
"description": "Information about a single term.",
"minItems": 8,
"items": [
{
"type": "string",
"description": "The text for the term."
},
{
"type": "string",
"description": "Reading of the term, or an empty string if the reading is the same as the term."
},
{
"type": ["string", "null"],
"description": "String of space-separated tags for the definition. An empty string is treated as no tags."
},
{
"type": "string",
"description": "String of space-separated rule identifiers for the definition which is used to validate delinflection. Valid rule identifiers are: v1: ichidan verb; v5: godan verb; vs: suru verb; vk: kuru verb; adj-i: i-adjective. An empty string corresponds to words which aren't inflected, such as nouns."
},
{
"type": "number",
"description": "Score used to determine popularity. Negative values are more rare and positive values are more frequent. This score is also used to sort search results."
},
{
"type": "array",
"description": "Array of definitions for the term.",
"items": {
"oneOf": [
{
"type": "string",
"description": "Single definition for the term."
},
{
"type": "object",
"description": "Single detailed definition for the term.",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"description": "The type of the data for this definition.",
"enum": ["text", "image", "structured-content"]
}
},
"oneOf": [
{
"required": [
"type",
"text"
],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": ["text"]
},
"text": {
"type": "string",
"description": "Single definition for the term."
}
}
},
{
"required": [
"type",
"content"
],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": ["structured-content"]
},
"content": {
"$ref": "#/definitions/structuredContent",
"description": "Single definition for the term using a structured content object."
}
}
},
{
"required": [
"type",
"path"
],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": ["image"]
},
"path": {
"type": "string",
"description": "Path to the image file in the archive."
},
"width": {
"type": "integer",
"description": "Preferred width of the image.",
"minimum": 1
},
"height": {
"type": "integer",
"description": "Preferred width of the image.",
"minimum": 1
},
"title": {
"type": "string",
"description": "Hover text for the image."
},
"description": {
"type": "string",
"description": "Description of the image."
},
"pixelated": {
"type": "boolean",
"description": "Whether or not the image should appear pixelated at sizes larger than the image's native resolution.",
"default": false
},
"imageRendering": {
"type": "string",
"description": "Controls how the image is rendered. The value of this field supersedes the pixelated field.",
"enum": ["auto", "pixelated", "crisp-edges"],
"default": "auto"
},
"appearance": {
"type": "string",
"description": "Controls the appearance of the image. The \"monochrome\" value will mask the opaque parts of the image using the current text color.",
"enum": ["auto", "monochrome"],
"default": "auto"
},
"background": {
"type": "boolean",
"description": "Whether or not a background color is displayed behind the image.",
"default": true
},
"collapsed": {
"type": "boolean",
"description": "Whether or not the image is collapsed by default.",
"default": false
},
"collapsible": {
"type": "boolean",
"description": "Whether or not the image can be collapsed.",
"default": true
}
}
}
]
}
]
}
},
{
"type": "integer",
"description": "Sequence number for the term. Terms with the same sequence number can be shown together when the \"resultOutputMode\" option is set to \"merge\"."
},
{
"type": "string",
"description": "String of space-separated tags for the term. An empty string is treated as no tags."
}
]
}
}