{
	"$schema": "http://json-schema.org/draft-04/schema#",
	"title": "4DView",
	"description": "4D View document schema",
	"definitions": {
		"style": {
			"type": "object",
			"properties": {
				"locked": { "type": "boolean" },
				"visible": { "type": "boolean" },
				"showGrid": { "type": "boolean" },
				"spellCheck": { "type": "boolean" },
				"pictHeights": { "type": "boolean", "comment":"indicates whether it is the height of the image in a cell that should be used to calculate the height of the entire row." },
				"baseStyle": { "type": "number" },
				"inputFilter": { "type": "number", "comment":"references a font name in 'inputFilters' document property" },
				"backColorEven": { "type": "number" },
				"backColorOdd": { "type": "number" },
				"fontID": { "type": "number", "comment":"references a font name in 'fontNames' document property" },
				"fontSize": { "type": "number" },
				"bold": { "type": "boolean" },
				"italic": { "type": "boolean" },
				"underline": { "type": "boolean" },
				"outline": { "type": "boolean" },
				"shadow": { "type": "boolean" },
				"condensed": { "type": "boolean" },
				"extended": { "type": "boolean" },
				"normalColorEven": { "type": "number", "comment":"default color to use for numbers" },
				"zeroColorEven": { "type": "number", "comment":"color to use for zero numbers" },
				"minusColorEven": { "type": "number", "comment":"color to use for negative numbers" },
				"hAlign": { "type": "number" },
				"vAlign": { "type": "number" },
				"rotation": { "type": "number" },
				"wordWrap": { "type": "boolean" },
				"forceTextFormat": { "type": "boolean" },
				"numericFormat": { "type": "number", "comment":"format index as displayed in 4D View choice list"},
				"stringFormat": { "type": "number", "comment":"format index as displayed in 4D View choice list" },
				"boolFormat": { "type": "number", "comment":"format index as displayed in 4D View choice list"},
				"dateTimeFormat": { "type": "number", "comment":"format index as displayed in 4D View choice list"},
				"pictureFormat": { "type": "number", "comment":"format index as displayed in 4D View choice list"}
			}
		},
		"range": {
			"type": "object",
			"properties": {
				"left": { "type": "number" },
				"top": { "type": "number" },
				"right": { "type": "number" },
				"bottom": { "type": "number" }
			}
		},
		"panes": {
			"type": "array",
			"items": {
				"type": "object",
				"properties": {
					"size": { "type": "number" },
					"locked": { "type": "boolean" },
					"lockedScrollbar": { "type": "boolean" },
					"showSplitter": { "type": "boolean" }
				}
			}
		}
	},
	"properties": {
		"version": { "type": "number", "comment":"latest version is 9"},
		"title": { "type": "string"},
		"subject": { "type": "string"},
		"company": { "type": "string"},
		"note": { "type": "string"},
		"creationDate": { "type": "string", "comment":"yyyy-mm-dd"},
		"creationTime": { "type": "number", "comment":"number of seconds since midnight."},
		"modificationDate": { "type": "string", "comment":"yyyy-mm-dd"},
		"modificationTime": { "type": "number", "comment":"number of seconds since midnight."},
		"columnCount": { "type": "number"},
		"rowCount": { "type": "number"},
		"columnHeaderHeight": { "type": "number", "comment":"in twips"},
		"columnHeaderWidth": { "type": "number", "comment":"in twips"},
		"columnWidth": { "type": "number", "comment":"in twips"},
		"rowHeight": { "type": "number", "comment":"in twips"},
		"noExternalCall": { "type": "boolean"},
		"showGrid": { "type": "boolean"},
		"hGridVisible": { "type": "boolean"},
		"vGridVisible": { "type": "boolean"},
		"hGridPattern": { "type": "number"},
		"vGridPattern": { "type": "number"},
		"hGridColor": { "type": "number"},
		"vGridColor": { "type": "number"},
		"showGraphics": { "type": "boolean"},
		"showPageBreaks": { "type": "boolean"},
		"showColumnHeaders": { "type": "boolean"},
		"showRowHeaders": { "type": "boolean"},
		"showHScrollbar": { "type": "boolean"},
		"showVScrollbar": { "type": "boolean"},
		"showCalcMenuBar": { "type": "boolean", "comment": "for 4D Calc documents only"},
		"columns": {
			"type": "array",
			"items": {
				"oneOf": [{
					"type":"null"
				},{
					"type": "object",
					"properties": {
						"width": { "type": "number", "comment":"in twips"},
						"visible": { "type": "boolean"},
						"title": { "type": "string"}
					}
				}]
			}
		},
		"rows": {
			"type": "array",
			"items": {
				"oneOf": [{
					"type":"null"
				},{
		  			"type":"object",
					"properties": {
						"height": { "type": "number", "comment":"in twips"},
						"visible": { "type": "boolean"},
						"title": { "type": "string"}
					}
				}]
			}
		},
		"linkedRanges": {
			"properties": {
				"firstRow": { "type": "number"},
				"rowCount": { "type": "number"},
				"masterTable": { "type": "number"},
				"ranges": {
					"type": "array",
					"items": {
						"oneOf": [{
							"type": "object",
							"properties": {
								"kind": {"enum": ["variable"] },
								"column": { "type": "number"},
								"variableName": { "type": "string"}
							}
						},{
							"type": "object",
							"properties": {
								"kind": {"enum": ["field"] },
								"column": { "type": "number"},
								"masterTable": { "type": "number"},
								"table": { "type": "number"},
								"field": { "type": "number"},
								"index": { "type": "number"}
							}
						},{
							"type": "object",
							"properties": {
								"kind": {"enum": ["method"] },
								"column": { "type": "number"},
								"dataKind": { "type": "number"},
								"method": { "type": "string"}
							}
						}]
					}
				}
			}
		},
		"cells": {
			"type": "array",
			"items": {
				"oneOf": [{
					"type": "object",
					"properties": {
						"kind": {"enum": ["value"] },
						"valueType": {"enum": ["empty","bool","word","long","long8","real","hour","date","string","picture"]},
						"value": { "type": ["string","number","boolean","null"] },
						"style": { "$ref": "#/definitions/style"},
						"column": { "type": "number"},
						"row": { "type": "number"}
					}
				},{
					"type": "object",
					"properties": {
						"kind": {"enum": ["field"] },
						"table": { "type": "number"},
						"field": { "type": "number"},
						"style": { "$ref": "#/definitions/style"},
						"column": { "type": "number"},
						"row": { "type": "number"}
					}
				},{
					"type": "object",
					"properties": {
						"kind": {"enum": ["formula"] },
						"valueType": {"enum": ["empty","bool","word","long","long8","real","hour","date","string","picture"]},
						"value": { "type": ["string","number","boolean","null"] },
						"formula": { "type": "string"},
						"formulaPro": { "type": "string"},
						"style": { "$ref": "#/definitions/style"},
						"column": { "type": "number"},
						"row": { "type": "number"}
					}
				},{
					"type": "object",
					"properties": {
						"kind": {"enum": ["variable"] },
						"variableName": { "type": "string"},
						"style": { "$ref": "#/definitions/style"},
						"column": { "type": "number"},
						"row": { "type": "number"}
					}
				},{
					"type": "object",
					"properties": {
						"kind": {"enum": ["empty"] },
						"style": { "$ref": "#/definitions/style"}
					}
				},{
					"type": "object",
					"properties": {
						"kind": {"enum": ["control"] },
						"controlType": { "type": "number"},
						"variableName": { "type": "string"},
						"method": { "type": "string", "comment":"4D project method name"},
						"title": { "type": "string"}
					}
				}]
			}
		},
		"cellNames": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"column": { "type": "number"},
					"row": { "type": "number"},
					"name": { "type": "string"}
				}
			}
		},
		"customFormats": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"id": { "type": "number"},
					"format": { "type": "string"}
				}
			}
		},
		"rowEdges": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"style": { "type": "number", "minimum": 1, "maximum": 14, "comment":"border style index"},
					"color": { "type": "number", "comment":"encoded as red green blue"},
					"top": { "type": "number"},
					"left": { "type": "number"},
					"right": { "type": "number"},
					"bottom": { "type": "number"}
				}
			}
		},
		"columnEdges": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"style": { "type": "number"},
					"color": { "type": "number", "comment":"encoded as red green blue"},
					"top": { "type": "number"},
					"left": { "type": "number"},
					"right": { "type": "number"},
					"bottom": { "type": "number"}
				}
			}
		},
		"defaultStyle": { "$ref": "#/definitions/style"},
		"exportRanges": {
			"type": "array",
			"items": { "$ref": "#/definitions/range" }
		},
		"fontNames": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"id": { "type": "number"},
					"name": { "type": "string"}
				}
			}
		},
		"inputFilters": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"id": { "type": "number"},
					"filter": { "type": "string"}
				}
			}
		},
		"pictures": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"column": { "type": "number"},
					"row": { "type": "number"},
					"width": { "type": "number"},
					"height": { "type": "number"},
					"drawingMode": { "type": "number"},
					"behind": { "type": "boolean"},
					"fixedSize": { "type": "boolean"},
					"locked": { "type": "boolean"},
					"hOffset": { "type": "number"},
					"vOffset": { "type": "number"}
				},
				"comment": "the 'value' property is only accessible using 4D as it uses a regular picture data type" 
			}
		},
		"paperSettings": {
			"type": "object",
			"properties": {
				"kind": { "type": "number"},
				"landscape": { "type": "number"},
				"width": { "type": "number"},
				"height": { "type": "number"},
				"userLeftMargin": { "type": "number"},
				"userRightMargin": { "type": "number"},
				"userTopMargin": { "type": "number"},
				"userBottomMargin": { "type": "number"},
				"scale": { "type": "number"},
				"resX": { "type": "number"},
				"resY": { "type": "number"}
			}
		},
		"printSettings": {
			"type": "object",
			"properties": {
				"leftMargin": { "type": "number"},
				"topMargin": { "type": "number"},
				"rightMargin": { "type": "number"},
				"bottomMargin": { "type": "number"},
				"borders": { "type": "boolean"},
				"headers": { "type": "boolean"},
				"grid": { "type": "boolean"},
				"centered": { "type": "boolean"},
				"compact": { "type": "boolean"},
				"firstRow": { "type": "number"},
				"lastRow": { "type": "number"},
				"firstColumn": { "type": "number"},
				"lastColumn": { "type": "number"},
				"ranges": {
					"type": "array",
					"items": { "$ref": "#/definitions/range" }
				},
				"style": { "$ref": "#/definitions/style" },
				"topLeft": { "type": ["string","null"], "comment":"header text"},
				"topCenter": { "type": ["string","null"], "comment":"header text"},
				"topRight": { "type": ["string","null"], "comment":"header text"},
				"bottomLeft": { "type": ["string","null"], "comment":"footer text"},
				"bottomCenter": { "type": ["string","null"], "comment":"footer text"},
				"bottomRight": { "type": ["string","null"], "comment":"footer text"}
			}
		},
		"styleRanges": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"left": { "type": "number"},
					"top": { "type": "number"},
					"right": { "type": "number"},
					"bottom": { "type": "number"},
					"style": { "$ref": "#/definitions/style"}
				}
			}
		},
		"styleSheets": {
			"type": "array",
			"items": {
				"type":"object",
				"properties": {
					"id": { "type": "number"},
					"name": { "type": "string"},
					"style": { "$ref": "#/definitions/style"}
				}
			}
		},
		"headerStyle": { "$ref": "#/definitions/style"},
		"selectedRanges": {
			"type": "array",
			"items": { "$ref": "#/definitions/range" }
		},
		"currentCellColumn": { "type": "number"},
		"currentCellRow": { "type": "number"},
		"visibleColumnCount": { "type": "number", "comment": "for 4D Calc documents only"},
		"visibleRowCount": { "type": "number", "comment": "for 4D Calc documents only"},
		"frozenPanes" : {
			"type": "object",
			"properties": {
				"fullFreezeMode": { "type": "boolean"},
				"minVScroll": { "type": "number"},
				"maxVScroll": { "type": "number"},
				"minHScroll": { "type": "number"},
				"maxScroll": { "type": "number"},
				"virtualX": { "type": "array", "items": { "type": "number"} },
				"virtualY": { "type": "array", "items": { "type": "number"} }
			}
		},
		"verticalPanes": { "$ref": "#/definitions/panes"},
		"horizontalPanes": { "$ref": "#/definitions/panes"},
		"columnPageBreaks": { "type": "array", "items": { "type": "number"} },
		"rowPageBreaks": { "type": "array", "items": { "type": "number"} },
		"autoColumnWidth": { "type": "boolean"},
		"autoRowHeight": { "type": "boolean"},
		"computeNow": { "type": "boolean"},
		"showReferences": { "type": "boolean"},
		"zoom": { "type": "number"}
	}
}

