diff --git a/schemas/keyboard_info.distribution.json b/schemas/keyboard_info.distribution/1.0.1/keyboard_info.distribution.json
similarity index 100%
rename from schemas/keyboard_info.distribution.json
rename to schemas/keyboard_info.distribution/1.0.1/keyboard_info.distribution.json
diff --git a/schemas/keyboard_info.distribution/1.0.2/keyboard_info.distribution.json b/schemas/keyboard_info.distribution/1.0.2/keyboard_info.distribution.json
new file mode 100644
index 0000000..3d3d4ee
--- /dev/null
+++ b/schemas/keyboard_info.distribution/1.0.2/keyboard_info.distribution.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/keyboard_info.source.json#/definitions/KeyboardInfo" },
+ { "required": [ "id", "name", "license", "languages", "lastModifiedDate", "platformSupport" ] }
+ ]
+}
diff --git a/schemas/keyboard_info.distribution/1.0.3/keyboard_info.distribution.json b/schemas/keyboard_info.distribution/1.0.3/keyboard_info.distribution.json
new file mode 100644
index 0000000..3d3d4ee
--- /dev/null
+++ b/schemas/keyboard_info.distribution/1.0.3/keyboard_info.distribution.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/keyboard_info.source.json#/definitions/KeyboardInfo" },
+ { "required": [ "id", "name", "license", "languages", "lastModifiedDate", "platformSupport" ] }
+ ]
+}
diff --git a/schemas/keyboard_info.distribution/1.0.4/keyboard_info.distribution.json b/schemas/keyboard_info.distribution/1.0.4/keyboard_info.distribution.json
new file mode 100644
index 0000000..3d3d4ee
--- /dev/null
+++ b/schemas/keyboard_info.distribution/1.0.4/keyboard_info.distribution.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/keyboard_info.source.json#/definitions/KeyboardInfo" },
+ { "required": [ "id", "name", "license", "languages", "lastModifiedDate", "platformSupport" ] }
+ ]
+}
diff --git a/schemas/keyboard_info.distribution/1.0/keyboard_info.distribution.json b/schemas/keyboard_info.distribution/1.0/keyboard_info.distribution.json
new file mode 100644
index 0000000..3d3d4ee
--- /dev/null
+++ b/schemas/keyboard_info.distribution/1.0/keyboard_info.distribution.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/keyboard_info.source.json#/definitions/KeyboardInfo" },
+ { "required": [ "id", "name", "license", "languages", "lastModifiedDate", "platformSupport" ] }
+ ]
+}
diff --git a/schemas/keyboard_info.source/1.0.1/keyboard_info.source.json b/schemas/keyboard_info.source/1.0.1/keyboard_info.source.json
new file mode 100644
index 0000000..faebdb8
--- /dev/null
+++ b/schemas/keyboard_info.source/1.0.1/keyboard_info.source.json
@@ -0,0 +1,168 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/KeyboardInfo",
+
+ "definitions": {
+ "KeyboardInfo": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "authorName": { "type": "string" },
+ "authorEmail": { "type": "string", "format": "email" },
+ "description": { "type": "string" },
+ "license": { "type": "string", "enum": ["freeware", "shareware", "commercial", "mit", "other"] },
+ "languages": { "anyOf": [
+ { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
+ { "$ref": "#/definitions/KeyboardLanguageInfo" }
+ ]},
+ "lastModifiedDate": { "type": "string", "format": "date-time" },
+ "links": { "type": "array", "items": { "$ref": "#/definitions/KeyboardLinkInfo" } },
+ "packageFilename": { "type": "string", "pattern": "\\.km[xp]$" },
+ "packageFileSize": { "type": "number" },
+ "jsFilename": { "type": "string", "pattern": "\\.js$" },
+ "jsFileSize": { "type": "number" },
+ "documentationFilename": { "type": "string", "pattern": "\\.(rtf|html?|pdf|txt)$" },
+ "documentationFileSize": { "type": "number" },
+ "isRTL": { "type": "boolean" },
+ "encodings": { "type": "array", "items": { "type": "string", "enum": ["ansi", "unicode"] }, "additionalItems": false },
+ "packageIncludes": { "type": "array", "items": { "type": "string", "enum": ["welcome", "documentation", "fonts", "visualKeyboard"] }, "additionalItems": false },
+ "version": { "type": "string" },
+ "minKeymanDesktopVersion": { "type": "string", "pattern": "^\\d+\\.0$" },
+ "platformSupport": { "$ref": "#/definitions/KeyboardPlatformInfo" },
+ "legacyId": { "type": "number" },
+ "sourcePath": { "type": "string", "pattern": "^(release|legacy|experimental)/.+/.+$" },
+ "related": { "type": "object", "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardRelatedInfo" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "license", "languages"
+ ],
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfo": {
+ "type": "object",
+ "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardLanguageInfoItem" }
+ },
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfoItem": {
+ "type": "object",
+ "properties": {
+ "font": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "oskFont": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "example": { "$ref": "#/definitions/KeyboardExampleInfo" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardFontInfo": {
+ "type": "object",
+ "properties": {
+ "family": { "type": "string" },
+ "source": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ] },
+ "size": { "type": "string" }
+ },
+ "required": ["family", "source"],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleInfo": {
+ "type": "object",
+ "properties": {
+ "keys": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": {
+ "anyOf": [
+ { "type": "string" },
+ { "$ref": "#/definitions/KeyboardExampleKeyInfo" }
+ ] }
+ }
+ ] },
+ "text": { "type": "string" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleKeyInfo": {
+ "type": "object",
+ "properties": {
+ "key": { "type": "string", "enum": [
+ "K_SPACE",
+ "K_A", "K_B", "K_C", "K_D", "K_E", "K_F", "K_G", "K_H", "K_I", "K_J", "K_K", "K_L", "K_M",
+ "K_N", "K_O", "K_P", "K_Q", "K_R", "K_S", "K_T", "K_U", "K_V", "K_W", "K_X", "K_Y", "K_Z",
+ "K_1", "K_2", "K_3", "K_4", "K_5", "K_6", "K_7", "K_8", "K_9", "K_0",
+ "K_BKQUOTE", "K_HYPHEN", "K_EQUAL", "K_LBRKT", "K_RBRKT", "K_BKSLASH", "K_COLON",
+ "K_QUOTE", "K_COMMA", "K_PERIOD", "K_SLASH",
+ "K_oE2", "K_BKSP", "K_TAB", "K_ENTER", "K_ESC",
+ "K_LEFT", "K_UP", "K_RIGHT", "K_DOWN", "K_PGUP", "K_PGDN", "K_HOME", "K_END", "K_INS", "K_DEL",
+ "K_F1", "K_F2", "K_F3", "K_F4", "K_F5", "K_F6", "K_F7", "K_F8", "K_F9", "K_F10", "K_F11", "K_F12",
+ "K_KP5", "K_NP0", "K_NP1", "K_NP2", "K_NP3", "K_NP4", "K_NP5", "K_NP6", "K_NP7", "K_NP8", "K_NP9",
+ "K_NPSTAR", "K_NPPLUS", "K_NPMINUS", "K_NPDOT", "K_NPSLASH",
+ "K_SEL", "K_PRINT", "K_EXEC", "K_HELP", "K_SEPARATOR",
+ "K_F13", "K_F14", "K_F15", "K_F16", "K_F17", "K_F18", "K_F19", "K_F20", "K_F21", "K_F22", "K_F23", "K_F24",
+ "K_KANJI?15", "K_KANJI?16", "K_KANJI?17", "K_KANJI?18", "K_KANJI?19", "K_KANJI?1C", "K_KANJI?1D", "K_KANJI?1E", "K_KANJI?1F",
+ "K_oE0", "K_oE1", "K_oE3", "K_oE4", "K_oE6", "K_oE9", "K_oEA", "K_oEB", "K_oEC", "K_oED", "K_oEE", "K_oEF",
+ "K_oF0", "K_oF1", "K_oF2", "K_oF3", "K_oF4", "K_oF5", "K_?00", "K_?05", "K_NPENTER",
+ "K_?06", "K_?07", "K_?0A", "K_?0B", "K_?0E", "K_?0F", "K_?1A", "K_?3A", "K_?3B", "K_?3C", "K_?3D", "K_?3E",
+ "K_?3F", "K_?40", "K_?5B", "K_?5C", "K_?5D", "K_?5E", "K_?5F", "K_?88", "K_?89", "K_?8A", "K_?8B", "K_?8C",
+ "K_?8D", "K_?8E", "K_?8F", "K_?92", "K_?94", "K_?95", "K_?96", "K_?97", "K_?98", "K_?99", "K_?9A", "K_?9B",
+ "K_?9C", "K_?9D", "K_?9E", "K_?9F", "K_?A0", "K_?A1", "K_?A2", "K_?A3", "K_?A4", "K_?A5", "K_?A6", "K_?A7",
+ "K_?A8", "K_?A9", "K_?AA", "K_?AB", "K_?AC", "K_?AD", "K_?AE", "K_?AF", "K_?B0", "K_?B1", "K_?B2", "K_?B3",
+ "K_?B4", "K_?B5", "K_?B6", "K_?B7", "K_?B8", "K_?B9", "K_?C1", "K_?C2", "K_?C3", "K_?C4", "K_?C5", "K_?C6",
+ "K_?C7", "K_?C8", "K_?C9", "K_?CA", "K_?CB", "K_?CC", "K_?CD", "K_?CE", "K_?CF", "K_?D0", "K_?D1", "K_?D2",
+ "K_?D3", "K_?D4", "K_?D5", "K_?D6", "K_?D7", "K_?D8", "K_?D9", "K_?DA", "K_oDF", "K_?E5", "K_?E7", "K_?E8",
+ "K_?F6", "K_?F7", "K_?F8", "K_?F9", "K_?FA", "K_?FB", "K_?FC", "K_?FD", "K_?FE", "K_?FF"
+ ] },
+ "modifiers": {
+ "type": "array",
+ "items": { "type": "string", "enum": ["shift", "s", "ctrl", "c", "alt", "a", "left-ctrl", "lc", "right-ctrl", "rc", "left-alt", "la", "right-alt", "ra"] }
+ }
+ },
+ "required": ["key"],
+ "additionalProperties": false
+ },
+
+ "KeyboardLinkInfo": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "url": { "type": "string" }
+ },
+ "required": ["name", "url"],
+ "additionalProperties": false
+ },
+
+ "KeyboardPlatformInfo": {
+ "type": "object",
+ "patternProperties": {
+ "^(windows|macos|desktopWeb|ios|android|mobileWeb|linux)$": { "type": "string", "enum": ["full", "basic", "none"] }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardRelatedInfo": {
+ "type": "object",
+ "properties": {
+ "deprecates": { "type": "boolean" },
+ "deprecatedBy": { "type": "boolean" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/keyboard_info.source/1.0.2/keyboard_info.source.json b/schemas/keyboard_info.source/1.0.2/keyboard_info.source.json
new file mode 100644
index 0000000..21ad84a
--- /dev/null
+++ b/schemas/keyboard_info.source/1.0.2/keyboard_info.source.json
@@ -0,0 +1,168 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/KeyboardInfo",
+
+ "definitions": {
+ "KeyboardInfo": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "authorName": { "type": "string" },
+ "authorEmail": { "type": "string", "format": "email" },
+ "description": { "type": "string" },
+ "license": { "type": "string", "enum": ["freeware", "shareware", "commercial", "mit", "other"] },
+ "languages": { "anyOf": [
+ { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
+ { "$ref": "#/definitions/KeyboardLanguageInfo" }
+ ]},
+ "lastModifiedDate": { "type": "string", "format": "date-time" },
+ "links": { "type": "array", "items": { "$ref": "#/definitions/KeyboardLinkInfo" } },
+ "packageFilename": { "type": "string", "pattern": "\\.km[xp]$" },
+ "packageFileSize": { "type": "number" },
+ "jsFilename": { "type": "string", "pattern": "\\.js$" },
+ "jsFileSize": { "type": "number" },
+ "documentationFilename": { "type": "string", "pattern": "\\.(rtf|html?|pdf|txt)$" },
+ "documentationFileSize": { "type": "number" },
+ "isRTL": { "type": "boolean" },
+ "encodings": { "type": "array", "items": { "type": "string", "enum": ["ansi", "unicode"] }, "additionalItems": false },
+ "packageIncludes": { "type": "array", "items": { "type": "string", "enum": ["welcome", "documentation", "fonts", "visualKeyboard"] }, "additionalItems": false },
+ "version": { "type": "string" },
+ "minKeymanDesktopVersion": { "type": "string", "pattern": "^\\d+\\.0$" },
+ "platformSupport": { "$ref": "#/definitions/KeyboardPlatformInfo" },
+ "legacyId": { "type": "number" },
+ "sourcePath": { "type": "string", "pattern": "^(release|legacy|experimental)/.+/.+$" },
+ "related": { "type": "object", "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardRelatedInfo" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "license", "languages"
+ ],
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfo": {
+ "type": "object",
+ "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardLanguageInfoItem" }
+ },
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfoItem": {
+ "type": "object",
+ "properties": {
+ "font": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "oskFont": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "example": { "$ref": "#/definitions/KeyboardExampleInfo" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardFontInfo": {
+ "type": "object",
+ "properties": {
+ "family": { "type": "string" },
+ "source": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ] },
+ "size": { "type": "string" }
+ },
+ "required": ["family", "source"],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleInfo": {
+ "type": "object",
+ "properties": {
+ "keys": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": {
+ "anyOf": [
+ { "type": "string" },
+ { "$ref": "#/definitions/KeyboardExampleKeyInfo" }
+ ] }
+ }
+ ] },
+ "text": { "type": "string" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleKeyInfo": {
+ "type": "object",
+ "properties": {
+ "key": { "type": "string", "enum": [
+ "K_SPACE",
+ "K_A", "K_B", "K_C", "K_D", "K_E", "K_F", "K_G", "K_H", "K_I", "K_J", "K_K", "K_L", "K_M",
+ "K_N", "K_O", "K_P", "K_Q", "K_R", "K_S", "K_T", "K_U", "K_V", "K_W", "K_X", "K_Y", "K_Z",
+ "K_1", "K_2", "K_3", "K_4", "K_5", "K_6", "K_7", "K_8", "K_9", "K_0",
+ "K_BKQUOTE", "K_HYPHEN", "K_EQUAL", "K_LBRKT", "K_RBRKT", "K_BKSLASH", "K_COLON",
+ "K_QUOTE", "K_COMMA", "K_PERIOD", "K_SLASH",
+ "K_oE2", "K_BKSP", "K_TAB", "K_ENTER", "K_ESC",
+ "K_LEFT", "K_UP", "K_RIGHT", "K_DOWN", "K_PGUP", "K_PGDN", "K_HOME", "K_END", "K_INS", "K_DEL",
+ "K_F1", "K_F2", "K_F3", "K_F4", "K_F5", "K_F6", "K_F7", "K_F8", "K_F9", "K_F10", "K_F11", "K_F12",
+ "K_KP5", "K_NP0", "K_NP1", "K_NP2", "K_NP3", "K_NP4", "K_NP5", "K_NP6", "K_NP7", "K_NP8", "K_NP9",
+ "K_NPSTAR", "K_NPPLUS", "K_NPMINUS", "K_NPDOT", "K_NPSLASH",
+ "K_SEL", "K_PRINT", "K_EXEC", "K_HELP", "K_SEPARATOR",
+ "K_F13", "K_F14", "K_F15", "K_F16", "K_F17", "K_F18", "K_F19", "K_F20", "K_F21", "K_F22", "K_F23", "K_F24",
+ "K_KANJI?15", "K_KANJI?16", "K_KANJI?17", "K_KANJI?18", "K_KANJI?19", "K_KANJI?1C", "K_KANJI?1D", "K_KANJI?1E", "K_KANJI?1F",
+ "K_oE0", "K_oE1", "K_oE3", "K_oE4", "K_oE6", "K_oE9", "K_oEA", "K_oEB", "K_oEC", "K_oED", "K_oEE", "K_oEF",
+ "K_oF0", "K_oF1", "K_oF2", "K_oF3", "K_oF4", "K_oF5", "K_?00", "K_?05", "K_NPENTER",
+ "K_?06", "K_?07", "K_?0A", "K_?0B", "K_?0E", "K_?0F", "K_?1A", "K_?3A", "K_?3B", "K_?3C", "K_?3D", "K_?3E",
+ "K_?3F", "K_?40", "K_?5B", "K_?5C", "K_?5D", "K_?5E", "K_?5F", "K_?88", "K_?89", "K_?8A", "K_?8B", "K_?8C",
+ "K_?8D", "K_?8E", "K_?8F", "K_?92", "K_?94", "K_?95", "K_?96", "K_?97", "K_?98", "K_?99", "K_?9A", "K_?9B",
+ "K_?9C", "K_?9D", "K_?9E", "K_?9F", "K_?A0", "K_?A1", "K_?A2", "K_?A3", "K_?A4", "K_?A5", "K_?A6", "K_?A7",
+ "K_?A8", "K_?A9", "K_?AA", "K_?AB", "K_?AC", "K_?AD", "K_?AE", "K_?AF", "K_?B0", "K_?B1", "K_?B2", "K_?B3",
+ "K_?B4", "K_?B5", "K_?B6", "K_?B7", "K_?B8", "K_?B9", "K_?C1", "K_?C2", "K_?C3", "K_?C4", "K_?C5", "K_?C6",
+ "K_?C7", "K_?C8", "K_?C9", "K_?CA", "K_?CB", "K_?CC", "K_?CD", "K_?CE", "K_?CF", "K_?D0", "K_?D1", "K_?D2",
+ "K_?D3", "K_?D4", "K_?D5", "K_?D6", "K_?D7", "K_?D8", "K_?D9", "K_?DA", "K_oDF", "K_?E5", "K_?E7", "K_?E8",
+ "K_?F6", "K_?F7", "K_?F8", "K_?F9", "K_?FA", "K_?FB", "K_?FC", "K_?FD", "K_?FE", "K_?FF"
+ ] },
+ "modifiers": {
+ "type": "array",
+ "items": { "type": "string", "enum": ["shift", "s", "ctrl", "c", "alt", "a", "left-ctrl", "lc", "right-ctrl", "rc", "left-alt", "la", "right-alt", "ra"] }
+ }
+ },
+ "required": ["key"],
+ "additionalProperties": false
+ },
+
+ "KeyboardLinkInfo": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "url": { "type": "string" }
+ },
+ "required": ["name", "url"],
+ "additionalProperties": false
+ },
+
+ "KeyboardPlatformInfo": {
+ "type": "object",
+ "patternProperties": {
+ "^(windows|macos|desktopWeb|ios|android|mobileWeb|linux)$": { "type": "string", "enum": ["dictionary", "full", "basic", "none"] }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardRelatedInfo": {
+ "type": "object",
+ "properties": {
+ "deprecates": { "type": "boolean" },
+ "deprecatedBy": { "type": "boolean" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/keyboard_info.source/1.0.3/keyboard_info.source.json b/schemas/keyboard_info.source/1.0.3/keyboard_info.source.json
new file mode 100644
index 0000000..66c5d9d
--- /dev/null
+++ b/schemas/keyboard_info.source/1.0.3/keyboard_info.source.json
@@ -0,0 +1,168 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/KeyboardInfo",
+
+ "definitions": {
+ "KeyboardInfo": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "authorName": { "type": "string" },
+ "authorEmail": { "type": "string", "format": "email" },
+ "description": { "type": "string" },
+ "license": { "type": "string", "enum": ["freeware", "shareware", "commercial", "mit", "other"] },
+ "languages": { "anyOf": [
+ { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
+ { "$ref": "#/definitions/KeyboardLanguageInfo" }
+ ]},
+ "lastModifiedDate": { "type": "string", "format": "date-time" },
+ "links": { "type": "array", "items": { "$ref": "#/definitions/KeyboardLinkInfo" } },
+ "packageFilename": { "type": "string", "pattern": "\\.km[xp]$" },
+ "packageFileSize": { "type": "number" },
+ "jsFilename": { "type": "string", "pattern": "\\.js$" },
+ "jsFileSize": { "type": "number" },
+ "documentationFilename": { "type": "string", "pattern": "\\.(rtf|html?|pdf|txt)$" },
+ "documentationFileSize": { "type": "number" },
+ "isRTL": { "type": "boolean" },
+ "encodings": { "type": "array", "items": { "type": "string", "enum": ["ansi", "unicode"] }, "additionalItems": false },
+ "packageIncludes": { "type": "array", "items": { "type": "string", "enum": ["welcome", "documentation", "fonts", "visualKeyboard"] }, "additionalItems": false },
+ "version": { "type": "string" },
+ "minKeymanVersion": { "type": "string", "pattern": "^\\d+\\.0$" },
+ "platformSupport": { "$ref": "#/definitions/KeyboardPlatformInfo" },
+ "legacyId": { "type": "number" },
+ "sourcePath": { "type": "string", "pattern": "^(release|legacy|experimental)/.+/.+$" },
+ "related": { "type": "object", "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardRelatedInfo" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "license", "languages"
+ ],
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfo": {
+ "type": "object",
+ "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardLanguageInfoItem" }
+ },
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfoItem": {
+ "type": "object",
+ "properties": {
+ "font": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "oskFont": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "example": { "$ref": "#/definitions/KeyboardExampleInfo" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardFontInfo": {
+ "type": "object",
+ "properties": {
+ "family": { "type": "string" },
+ "source": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ] },
+ "size": { "type": "string" }
+ },
+ "required": ["family", "source"],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleInfo": {
+ "type": "object",
+ "properties": {
+ "keys": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": {
+ "anyOf": [
+ { "type": "string" },
+ { "$ref": "#/definitions/KeyboardExampleKeyInfo" }
+ ] }
+ }
+ ] },
+ "text": { "type": "string" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleKeyInfo": {
+ "type": "object",
+ "properties": {
+ "key": { "type": "string", "enum": [
+ "K_SPACE",
+ "K_A", "K_B", "K_C", "K_D", "K_E", "K_F", "K_G", "K_H", "K_I", "K_J", "K_K", "K_L", "K_M",
+ "K_N", "K_O", "K_P", "K_Q", "K_R", "K_S", "K_T", "K_U", "K_V", "K_W", "K_X", "K_Y", "K_Z",
+ "K_1", "K_2", "K_3", "K_4", "K_5", "K_6", "K_7", "K_8", "K_9", "K_0",
+ "K_BKQUOTE", "K_HYPHEN", "K_EQUAL", "K_LBRKT", "K_RBRKT", "K_BKSLASH", "K_COLON",
+ "K_QUOTE", "K_COMMA", "K_PERIOD", "K_SLASH",
+ "K_oE2", "K_BKSP", "K_TAB", "K_ENTER", "K_ESC",
+ "K_LEFT", "K_UP", "K_RIGHT", "K_DOWN", "K_PGUP", "K_PGDN", "K_HOME", "K_END", "K_INS", "K_DEL",
+ "K_F1", "K_F2", "K_F3", "K_F4", "K_F5", "K_F6", "K_F7", "K_F8", "K_F9", "K_F10", "K_F11", "K_F12",
+ "K_KP5", "K_NP0", "K_NP1", "K_NP2", "K_NP3", "K_NP4", "K_NP5", "K_NP6", "K_NP7", "K_NP8", "K_NP9",
+ "K_NPSTAR", "K_NPPLUS", "K_NPMINUS", "K_NPDOT", "K_NPSLASH",
+ "K_SEL", "K_PRINT", "K_EXEC", "K_HELP", "K_SEPARATOR",
+ "K_F13", "K_F14", "K_F15", "K_F16", "K_F17", "K_F18", "K_F19", "K_F20", "K_F21", "K_F22", "K_F23", "K_F24",
+ "K_KANJI?15", "K_KANJI?16", "K_KANJI?17", "K_KANJI?18", "K_KANJI?19", "K_KANJI?1C", "K_KANJI?1D", "K_KANJI?1E", "K_KANJI?1F",
+ "K_oE0", "K_oE1", "K_oE3", "K_oE4", "K_oE6", "K_oE9", "K_oEA", "K_oEB", "K_oEC", "K_oED", "K_oEE", "K_oEF",
+ "K_oF0", "K_oF1", "K_oF2", "K_oF3", "K_oF4", "K_oF5", "K_?00", "K_?05", "K_NPENTER",
+ "K_?06", "K_?07", "K_?0A", "K_?0B", "K_?0E", "K_?0F", "K_?1A", "K_?3A", "K_?3B", "K_?3C", "K_?3D", "K_?3E",
+ "K_?3F", "K_?40", "K_?5B", "K_?5C", "K_?5D", "K_?5E", "K_?5F", "K_?88", "K_?89", "K_?8A", "K_?8B", "K_?8C",
+ "K_?8D", "K_?8E", "K_?8F", "K_?92", "K_?94", "K_?95", "K_?96", "K_?97", "K_?98", "K_?99", "K_?9A", "K_?9B",
+ "K_?9C", "K_?9D", "K_?9E", "K_?9F", "K_?A0", "K_?A1", "K_?A2", "K_?A3", "K_?A4", "K_?A5", "K_?A6", "K_?A7",
+ "K_?A8", "K_?A9", "K_?AA", "K_?AB", "K_?AC", "K_?AD", "K_?AE", "K_?AF", "K_?B0", "K_?B1", "K_?B2", "K_?B3",
+ "K_?B4", "K_?B5", "K_?B6", "K_?B7", "K_?B8", "K_?B9", "K_?C1", "K_?C2", "K_?C3", "K_?C4", "K_?C5", "K_?C6",
+ "K_?C7", "K_?C8", "K_?C9", "K_?CA", "K_?CB", "K_?CC", "K_?CD", "K_?CE", "K_?CF", "K_?D0", "K_?D1", "K_?D2",
+ "K_?D3", "K_?D4", "K_?D5", "K_?D6", "K_?D7", "K_?D8", "K_?D9", "K_?DA", "K_oDF", "K_?E5", "K_?E7", "K_?E8",
+ "K_?F6", "K_?F7", "K_?F8", "K_?F9", "K_?FA", "K_?FB", "K_?FC", "K_?FD", "K_?FE", "K_?FF"
+ ] },
+ "modifiers": {
+ "type": "array",
+ "items": { "type": "string", "enum": ["shift", "s", "ctrl", "c", "alt", "a", "left-ctrl", "lc", "right-ctrl", "rc", "left-alt", "la", "right-alt", "ra"] }
+ }
+ },
+ "required": ["key"],
+ "additionalProperties": false
+ },
+
+ "KeyboardLinkInfo": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "url": { "type": "string" }
+ },
+ "required": ["name", "url"],
+ "additionalProperties": false
+ },
+
+ "KeyboardPlatformInfo": {
+ "type": "object",
+ "patternProperties": {
+ "^(windows|macos|desktopWeb|ios|android|mobileWeb|linux)$": { "type": "string", "enum": ["dictionary", "full", "basic", "none"] }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardRelatedInfo": {
+ "type": "object",
+ "properties": {
+ "deprecates": { "type": "boolean" },
+ "deprecatedBy": { "type": "boolean" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/keyboard_info.source.json b/schemas/keyboard_info.source/1.0.4/keyboard_info.source.json
similarity index 100%
rename from schemas/keyboard_info.source.json
rename to schemas/keyboard_info.source/1.0.4/keyboard_info.source.json
diff --git a/schemas/keyboard_info.source/1.0/keyboard_info.source.json b/schemas/keyboard_info.source/1.0/keyboard_info.source.json
new file mode 100644
index 0000000..d4fa9cc
--- /dev/null
+++ b/schemas/keyboard_info.source/1.0/keyboard_info.source.json
@@ -0,0 +1,162 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/KeyboardInfo",
+
+ "definitions": {
+ "KeyboardInfo": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "authorName": { "type": "string" },
+ "authorEmail": { "type": "string", "format": "email" },
+ "description": { "type": "string" },
+ "license": { "type": "string", "enum": ["freeware", "shareware", "commercial", "mit", "other"] },
+ "languages": { "anyOf": [
+ { "type": "array", "items": { "type": "string" } },
+ { "$ref": "#/definitions/KeyboardLanguageInfo" }
+ ]},
+ "lastModifiedDate": { "type": "string", "format": "date-time" },
+ "links": { "type": "array", "items": { "$ref": "#/definitions/KeyboardLinkInfo" } },
+ "packageFilename": { "type": "string", "pattern": "\\.km[xp]$" },
+ "jsFilename": { "type": "string", "pattern": "\\.js$" },
+ "documentationFilename": { "type": "string", "pattern": "\\.(rtf|html?|pdf|txt)$" },
+ "encodings": { "type": "array", "items": { "type": "string", "enum": ["ansi", "unicode"] }, "additionalItems": false },
+ "packageIncludes": { "type": "array", "items": { "type": "string", "enum": ["welcome", "documentation", "fonts", "visualKeyboard"] }, "additionalItems": false },
+ "version": { "type": "string" },
+ "minKeymanDesktopVersion": { "type": "string", "pattern": "^\\d+\\.0$" },
+ "platformSupport": { "$ref": "#/definitions/KeyboardPlatformInfo" },
+ "legacyId": { "type": "number" },
+ "related": { "type": "object", "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardRelatedInfo" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "license", "languages"
+ ],
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfo": {
+ "type": "object",
+ "patternProperties": {
+ ".": { "$ref": "#/definitions/KeyboardLanguageInfoItem" }
+ },
+ "additionalProperties": false
+ },
+
+ "KeyboardLanguageInfoItem": {
+ "type": "object",
+ "properties": {
+ "font": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "oskFont": { "$ref": "#/definitions/KeyboardFontInfo" },
+ "example": { "$ref": "#/definitions/KeyboardExampleInfo" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardFontInfo": {
+ "type": "object",
+ "properties": {
+ "family": { "type": "string" },
+ "source": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": { "type": "string" } }
+ ] },
+ "size": { "type": "string" }
+ },
+ "required": ["family", "source"],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleInfo": {
+ "type": "object",
+ "properties": {
+ "keys": { "anyOf": [
+ { "type": "string" },
+ { "type": "array", "items": {
+ "anyOf": [
+ { "type": "string" },
+ { "$ref": "#/definitions/KeyboardExampleKeyInfo" }
+ ] }
+ }
+ ] },
+ "text": { "type": "string" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardExampleKeyInfo": {
+ "type": "object",
+ "properties": {
+ "key": { "type": "string", "enum": [
+ "K_SPACE",
+ "K_A", "K_B", "K_C", "K_D", "K_E", "K_F", "K_G", "K_H", "K_I", "K_J", "K_K", "K_L", "K_M",
+ "K_N", "K_O", "K_P", "K_Q", "K_R", "K_S", "K_T", "K_U", "K_V", "K_W", "K_X", "K_Y", "K_Z",
+ "K_1", "K_2", "K_3", "K_4", "K_5", "K_6", "K_7", "K_8", "K_9", "K_0",
+ "K_BKQUOTE", "K_HYPHEN", "K_EQUAL", "K_LBRKT", "K_RBRKT", "K_BKSLASH", "K_COLON",
+ "K_QUOTE", "K_COMMA", "K_PERIOD", "K_SLASH",
+ "K_oE2", "K_BKSP", "K_TAB", "K_ENTER", "K_ESC",
+ "K_LEFT", "K_UP", "K_RIGHT", "K_DOWN", "K_PGUP", "K_PGDN", "K_HOME", "K_END", "K_INS", "K_DEL",
+ "K_F1", "K_F2", "K_F3", "K_F4", "K_F5", "K_F6", "K_F7", "K_F8", "K_F9", "K_F10", "K_F11", "K_F12",
+ "K_KP5", "K_NP0", "K_NP1", "K_NP2", "K_NP3", "K_NP4", "K_NP5", "K_NP6", "K_NP7", "K_NP8", "K_NP9",
+ "K_NPSTAR", "K_NPPLUS", "K_NPMINUS", "K_NPDOT", "K_NPSLASH",
+ "K_SEL", "K_PRINT", "K_EXEC", "K_HELP", "K_SEPARATOR",
+ "K_F13", "K_F14", "K_F15", "K_F16", "K_F17", "K_F18", "K_F19", "K_F20", "K_F21", "K_F22", "K_F23", "K_F24",
+ "K_KANJI?15", "K_KANJI?16", "K_KANJI?17", "K_KANJI?18", "K_KANJI?19", "K_KANJI?1C", "K_KANJI?1D", "K_KANJI?1E", "K_KANJI?1F",
+ "K_oE0", "K_oE1", "K_oE3", "K_oE4", "K_oE6", "K_oE9", "K_oEA", "K_oEB", "K_oEC", "K_oED", "K_oEE", "K_oEF",
+ "K_oF0", "K_oF1", "K_oF2", "K_oF3", "K_oF4", "K_oF5", "K_?00", "K_?05", "K_NPENTER",
+ "K_?06", "K_?07", "K_?0A", "K_?0B", "K_?0E", "K_?0F", "K_?1A", "K_?3A", "K_?3B", "K_?3C", "K_?3D", "K_?3E",
+ "K_?3F", "K_?40", "K_?5B", "K_?5C", "K_?5D", "K_?5E", "K_?5F", "K_?88", "K_?89", "K_?8A", "K_?8B", "K_?8C",
+ "K_?8D", "K_?8E", "K_?8F", "K_?92", "K_?94", "K_?95", "K_?96", "K_?97", "K_?98", "K_?99", "K_?9A", "K_?9B",
+ "K_?9C", "K_?9D", "K_?9E", "K_?9F", "K_?A0", "K_?A1", "K_?A2", "K_?A3", "K_?A4", "K_?A5", "K_?A6", "K_?A7",
+ "K_?A8", "K_?A9", "K_?AA", "K_?AB", "K_?AC", "K_?AD", "K_?AE", "K_?AF", "K_?B0", "K_?B1", "K_?B2", "K_?B3",
+ "K_?B4", "K_?B5", "K_?B6", "K_?B7", "K_?B8", "K_?B9", "K_?C1", "K_?C2", "K_?C3", "K_?C4", "K_?C5", "K_?C6",
+ "K_?C7", "K_?C8", "K_?C9", "K_?CA", "K_?CB", "K_?CC", "K_?CD", "K_?CE", "K_?CF", "K_?D0", "K_?D1", "K_?D2",
+ "K_?D3", "K_?D4", "K_?D5", "K_?D6", "K_?D7", "K_?D8", "K_?D9", "K_?DA", "K_oDF", "K_?E5", "K_?E7", "K_?E8",
+ "K_?F6", "K_?F7", "K_?F8", "K_?F9", "K_?FA", "K_?FB", "K_?FC", "K_?FD", "K_?FE", "K_?FF"
+ ] },
+ "modifiers": {
+ "type": "array",
+ "items": { "type": "string", "enum": ["shift", "s", "ctrl", "c", "alt", "a", "left-ctrl", "lc", "right-ctrl", "rc", "left-alt", "la", "right-alt", "ra"] }
+ }
+ },
+ "required": ["key"],
+ "additionalProperties": false
+ },
+
+ "KeyboardLinkInfo": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "url": { "type": "string" }
+ },
+ "required": ["name", "url"],
+ "additionalProperties": false
+ },
+
+ "KeyboardPlatformInfo": {
+ "type": "object",
+ "patternProperties": {
+ "^(windows|macos|desktopWeb|ios|android|mobileWeb|linux)$": { "type": "string", "enum": ["full", "basic", "none"] }
+ },
+ "required": [],
+ "additionalProperties": false
+ },
+
+ "KeyboardRelatedInfo": {
+ "type": "object",
+ "properties": {
+ "deprecates": { "type": "boolean" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/keyboard_json.json b/schemas/keyboard_json/1.0/keyboard_json.json
similarity index 100%
rename from schemas/keyboard_json.json
rename to schemas/keyboard_json/1.0/keyboard_json.json
diff --git a/schemas/model_info.distribution/1.0/model_info.distribution.json b/schemas/model_info.distribution/1.0/model_info.distribution.json
new file mode 100644
index 0000000..e0da030
--- /dev/null
+++ b/schemas/model_info.distribution/1.0/model_info.distribution.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "allOf": [
+ { "$ref": "/model_info.source.json#/definitions/ModelInfo" },
+ { "required": [ "id", "name", "license", "languages", "lastModifiedDate", "packageFilename", "jsFilename", "packageIncludes", "version", "minKeymanVersion" ] }
+ ]
+}
diff --git a/schemas/model_info.source/1.0/model_info.source.json b/schemas/model_info.source/1.0/model_info.source.json
new file mode 100644
index 0000000..990fd72
--- /dev/null
+++ b/schemas/model_info.source/1.0/model_info.source.json
@@ -0,0 +1,61 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/ModelInfo",
+
+ "definitions": {
+ "ModelInfo": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "authorName": { "type": "string" },
+ "authorEmail": { "type": "string", "format": "email" },
+ "description": { "type": "string" },
+ "license": { "type": "string", "enum": ["mit"] },
+ "languages": { "type": "array", "items": { "type": "string" }, "uniqueItems": true },
+ "lastModifiedDate": { "type": "string", "format": "date-time" },
+ "links": { "type": "array", "items": { "$ref": "#/definitions/ModelLinkInfo" } },
+ "packageFilename": { "type": "string", "pattern": "\\.model\\.kmp$" },
+ "packageFileSize": { "type": "number" },
+ "jsFilename": { "type": "string", "pattern": "\\.model\\.js$" },
+ "jsFileSize": { "type": "number" },
+ "isRTL": { "type": "boolean" },
+ "packageIncludes": { "type": "array", "items": { "type": "string", "enum": ["fonts"] }, "additionalItems": false },
+ "version": { "type": "string" },
+ "minKeymanVersion": { "type": "string", "pattern": "^\\d+\\.0$" },
+ "helpLink": { "type": "string", "pattern": "^https://help\\.keyman\\.com/lexical-model/" },
+ "sourcePath": { "type": "string", "pattern": "^(release|experimental)/.+/.+$" },
+ "related": { "type": "object", "patternProperties": {
+ ".": { "$ref": "#/definitions/ModelRelatedInfo" }
+ },
+ "additionalProperties": false
+ }
+ },
+ "required": [
+ "license", "languages"
+ ],
+ "additionalProperties": false
+ },
+
+ "ModelLinkInfo": {
+ "type": "object",
+ "properties": {
+ "name": { "type": "string" },
+ "url": { "type": "string" }
+ },
+ "required": ["name", "url"],
+ "additionalProperties": false
+ },
+
+ "ModelRelatedInfo": {
+ "type": "object",
+ "properties": {
+ "deprecates": { "type": "boolean" },
+ "deprecatedBy": { "type": "boolean" },
+ "note": { "type": "string" }
+ },
+ "required": [],
+ "additionalProperties": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/package/1.0.1/package.json b/schemas/package/1.0.1/package.json
new file mode 100644
index 0000000..14afd95
--- /dev/null
+++ b/schemas/package/1.0.1/package.json
@@ -0,0 +1,241 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/package",
+ "definitions": {
+ "package": {
+ "type": "object",
+ "properties": {
+ "system": {
+ "$ref": "#/definitions/system"
+ },
+ "options": {
+ "$ref": "#/definitions/options"
+ },
+ "startMenu": {
+ "$ref": "#/definitions/startMenu"
+ },
+ "strings": {
+ "$ref": "#/definitions/strings"
+ },
+ "files": {
+ "$ref": "#/definitions/files"
+ },
+ "keyboards": {
+ "$ref": "#/definitions/keyboards"
+ },
+ "info": {
+ "$ref": "#/definitions/info"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "options",
+ "system"
+ ]
+ },
+ "system": {
+ "type": "object",
+ "properties": {
+ "keymanDeveloperVersion": {
+ "type": "string"
+ },
+ "fileVersion": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "fileVersion"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "properties": {
+ "readmeFile": {
+ "type": "string"
+ },
+ "graphicFile": {
+ "type": "string"
+ },
+ "executeProgram": {
+ "type": "string"
+ },
+ "msiFilename": {
+ "type": "string"
+ },
+ "msiOptions": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenu": {
+ "type": "object",
+ "properties": {
+ "folder": {
+ "type": "string"
+ },
+ "addUninstallEntry": {
+ "type": "boolean"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/startMenuItem"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenuItem": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "location": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "filename"
+ ]
+ },
+ "strings": {
+ "type": "object",
+ "patternProperties": {
+ ".": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/file"
+ }
+ },
+ "file": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "copyLocation": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "description"
+ ]
+ },
+ "keyboards": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboard"
+ }
+ },
+ "keyboard": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "oskFont": {
+ "type": "string"
+ },
+ "displayFont": {
+ "type": "string"
+ },
+ "languages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboardLanguage"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "id",
+ "version"
+ ]
+ },
+ "keyboardLanguage": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name"
+ ]
+ },
+ "info": {
+ "type": "object",
+ "properties": {
+ "website": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "version": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "name": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "copyright": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "author": {
+ "$ref": "#/definitions/infoItem"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "infoItem": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "description"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/package.json b/schemas/package/1.0.2/package.json
similarity index 99%
rename from schemas/package.json
rename to schemas/package/1.0.2/package.json
index bfc4cc0..cf7e7fa 100644
--- a/schemas/package.json
+++ b/schemas/package/1.0.2/package.json
@@ -241,4 +241,4 @@
]
}
}
-}
+}
\ No newline at end of file
diff --git a/schemas/package/1.0/package.json b/schemas/package/1.0/package.json
new file mode 100644
index 0000000..ada3f86
--- /dev/null
+++ b/schemas/package/1.0/package.json
@@ -0,0 +1,245 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/package",
+ "definitions": {
+ "package": {
+ "type": "object",
+ "properties": {
+ "system": {
+ "$ref": "#/definitions/system"
+ },
+ "options": {
+ "$ref": "#/definitions/options"
+ },
+ "startMenu": {
+ "$ref": "#/definitions/startMenu"
+ },
+ "strings": {
+ "$ref": "#/definitions/strings"
+ },
+ "files": {
+ "$ref": "#/definitions/files"
+ },
+ "keyboards": {
+ "$ref": "#/definitions/keyboards"
+ },
+ "info": {
+ "$ref": "#/definitions/info"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "options",
+ "system"
+ ]
+ },
+ "system": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "keymanDeveloperVersion": {
+ "type": "string"
+ },
+ "fileVersion": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "fileVersion"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "properties": {
+ "readmeFile": {
+ "type": "string"
+ },
+ "graphicFile": {
+ "type": "string"
+ },
+ "executeProgram": {
+ "type": "string"
+ },
+ "msiFilename": {
+ "type": "string"
+ },
+ "msiOptions": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenu": {
+ "type": "object",
+ "properties": {
+ "folder": {
+ "type": "string"
+ },
+ "addUninstallEntry": {
+ "type": "boolean"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/startMenuItem"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenuItem": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "location": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "filename"
+ ]
+ },
+ "strings": {
+ "type": "object",
+ "patternProperties": {
+ ".": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/file"
+ }
+ },
+ "file": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "copyLocation": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "description"
+ ]
+ },
+ "keyboards": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboard"
+ }
+ },
+ "keyboard": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "oskFont": {
+ "type": "string"
+ },
+ "displayFont": {
+ "type": "string"
+ },
+ "languages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboardLanguage"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "id",
+ "version"
+ ]
+ },
+ "keyboardLanguage": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name"
+ ]
+ },
+ "info": {
+ "type": "object",
+ "properties": {
+ "website": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "version": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "name": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "copyright": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "author": {
+ "$ref": "#/definitions/infoItem"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "infoItem": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "description"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/package/1.1.0/package.json b/schemas/package/1.1.0/package.json
new file mode 100644
index 0000000..33bba9b
--- /dev/null
+++ b/schemas/package/1.1.0/package.json
@@ -0,0 +1,283 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/package",
+ "definitions": {
+ "package": {
+ "type": "object",
+ "properties": {
+ "system": {
+ "$ref": "#/definitions/system"
+ },
+ "options": {
+ "$ref": "#/definitions/options"
+ },
+ "startMenu": {
+ "$ref": "#/definitions/startMenu"
+ },
+ "strings": {
+ "$ref": "#/definitions/strings"
+ },
+ "files": {
+ "$ref": "#/definitions/files"
+ },
+ "keyboards": {
+ "$ref": "#/definitions/keyboards"
+ },
+ "lexicalModels": {
+ "$ref": "#/definitions/lexicalModels"
+ },
+ "info": {
+ "$ref": "#/definitions/info"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "options",
+ "system"
+ ]
+ },
+ "system": {
+ "type": "object",
+ "properties": {
+ "keymanDeveloperVersion": {
+ "type": "string"
+ },
+ "fileVersion": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "fileVersion"
+ ]
+ },
+ "options": {
+ "type": "object",
+ "properties": {
+ "readmeFile": {
+ "type": "string"
+ },
+ "graphicFile": {
+ "type": "string"
+ },
+ "executeProgram": {
+ "type": "string"
+ },
+ "msiFilename": {
+ "type": "string"
+ },
+ "msiOptions": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenu": {
+ "type": "object",
+ "properties": {
+ "folder": {
+ "type": "string"
+ },
+ "addUninstallEntry": {
+ "type": "boolean"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/startMenuItem"
+ }
+ }
+ },
+ "additionalProperties": false
+ },
+ "startMenuItem": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "filename": {
+ "type": "string"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "icon": {
+ "type": "string"
+ },
+ "location": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "filename"
+ ]
+ },
+ "strings": {
+ "type": "object",
+ "patternProperties": {
+ ".": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
+ "files": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/file"
+ }
+ },
+ "file": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "copyLocation": {
+ "type": "number"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "description"
+ ]
+ },
+ "keyboards": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboard"
+ }
+ },
+ "keyboard": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "oskFont": {
+ "type": "string"
+ },
+ "displayFont": {
+ "type": "string"
+ },
+ "rtl": {
+ "type": "boolean"
+ },
+ "languages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboardLanguage"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "id",
+ "version"
+ ]
+ },
+ "keyboardLanguage": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "name"
+ ]
+ },
+ "info": {
+ "type": "object",
+ "properties": {
+ "website": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "version": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "name": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "copyright": {
+ "$ref": "#/definitions/infoItem"
+ },
+ "author": {
+ "$ref": "#/definitions/infoItem"
+ }
+ },
+ "additionalProperties": false,
+ "required": []
+ },
+ "infoItem": {
+ "type": "object",
+ "properties": {
+ "description": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "description"
+ ]
+ },
+ "lexicalModels": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/lexicalModel"
+ }
+ },
+ "lexicalModel": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "rtl": {
+ "type": "boolean"
+ },
+ "languages": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/keyboardLanguage"
+ }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "id",
+ "version",
+ "languages"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/readme.MD b/schemas/readme.MD
index 258c8c5..ae88afa 100644
--- a/schemas/readme.MD
+++ b/schemas/readme.MD
@@ -69,6 +69,9 @@ Documentation at https://help.keyman.com/developer/10.0/reference/file-types/met
# package.json version history
+## 2019-01-31 1.1.0
+* Add lexicalModels properties
+
## 2018-02-13 1.0.2
* Add rtl property for keyboard layouts
@@ -88,7 +91,7 @@ Documentation at https://help.keyman.com/developer/cloud/version/2.0
## version.json version history
-## 2018-03-07 1.0 beta
+## 2018-03-07 2.0 beta
* Initial version
------------------------------------------------------------
@@ -108,3 +111,19 @@ Documentation at https://help.keyman.com/developer/cloud/
## 2018-01-31
* Created schema files for existing json api endpoints
+
+------------------------------------------------------------
+
+# model_info
+
+* model_info.source.json
+* model_info.distribution.json
+
+Documentation at https://help.keyman.com/developer/cloud/model_info
+
+New versions should be deployed to
+- **keymanapp/keyman/windows/src/global/inst/model_info**
+- **keymanapp/lexical-models/tools**
+
+## 2019-01-31 1.0 beta
+* Initial version
diff --git a/schemas/search.json b/schemas/search/1.0.1/search.json
similarity index 100%
rename from schemas/search.json
rename to schemas/search/1.0.1/search.json
diff --git a/schemas/search/1.0/search.json b/schemas/search/1.0/search.json
new file mode 100644
index 0000000..fb2aab9
--- /dev/null
+++ b/schemas/search/1.0/search.json
@@ -0,0 +1,25 @@
+{
+ "$schema": "http://json-schema.org/schema#",
+ "$ref": "#/definitions/Search",
+
+ "definitions": {
+ "Search": {
+ "type": "object",
+ "properties": {
+ "languages": { "type": "array", "items": { "$ref": "#/definitions/SearchLanguage" } },
+ "keyboards": { "type": "array", "items": { "$ref": "/keyboard_info.source.json#/definitions/KeyboardInfo" } },
+ "countries": { "type": "array" },
+ "rangematch": { "type": "string" }
+ }
+ },
+
+ "SearchLanguage": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string" },
+ "name": { "type": "string" },
+ "keyboards": { "type": "array", "items": { "type": "string" } }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/schemas/version.json b/schemas/version/2.0/version.json
similarity index 100%
rename from schemas/version.json
rename to schemas/version/2.0/version.json
diff --git a/schemas/web.config b/schemas/web.config
index 8b0e245..42ee985 100644
--- a/schemas/web.config
+++ b/schemas/web.config
@@ -5,5 +5,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+