mirror of
https://github.com/MatMoul/dokytree.git
synced 2024-12-24 08:36:11 +00:00
53 lines
1.2 KiB
Bash
53 lines
1.2 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
declare -r PARTDIR=./parts
|
||
|
declare -r SCHEMADIR=../schemas
|
||
|
declare -r OBJECTSDIR=./objects
|
||
|
|
||
|
getSchemaHeader() {
|
||
|
local DOC="{\n"
|
||
|
DOC+="\t\""'$schema'"\": \"http://json-schema.org/draft-07/schema#\",\n"
|
||
|
DOC+="\t\"title\": \"YAML Schema for computer\",\n"
|
||
|
DOC+="\t\"type\": \"object\",\n"
|
||
|
DOC+="\t\"additionalProperties\": false,\n"
|
||
|
DOC+="\t\"properties\": {\n"
|
||
|
echo -e "${DOC}"
|
||
|
}
|
||
|
getSchemaFooter() {
|
||
|
local DOC+="\t}\n"
|
||
|
DOC+="}\n"
|
||
|
echo -e "${DOC}"
|
||
|
}
|
||
|
getPart() {
|
||
|
local -r PARTFILE=${PARTDIR}/${1}.json
|
||
|
if [ ! -f "${PARTFILE}" ]; then
|
||
|
echo "${PARTFILE} not found"
|
||
|
exit 1
|
||
|
fi
|
||
|
tail -n +4 "${PARTFILE}" | head -n -2
|
||
|
}
|
||
|
|
||
|
buildObject() {
|
||
|
local -r OBJECTFILE=${1}
|
||
|
local DOC=$(getSchemaHeader)"\n"
|
||
|
|
||
|
while IFS= read -r LINE; do
|
||
|
if [[ ! $LINE =~ ^[[:space:]]*\#.*$ ]]; then
|
||
|
if [ -f ${PARTDIR}/"${LINE}".json ]; then
|
||
|
DOC+=$(getPart "${LINE}")",\n"
|
||
|
else
|
||
|
echo "Error: Part not found : ${LINE} in ${OBJECTFILE}"
|
||
|
fi
|
||
|
fi
|
||
|
done < "${OBJECTFILE}"
|
||
|
DOC="${DOC::-3}\n"
|
||
|
|
||
|
DOC+=$(getSchemaFooter)
|
||
|
local SCHEMAFILE=${SCHEMADIR}/$(basename "${OBJECTFILE}").json
|
||
|
echo -e "${DOC}" > "${SCHEMAFILE}"
|
||
|
}
|
||
|
|
||
|
for OBJECTFILE in "${OBJECTSDIR}"/*; do
|
||
|
buildObject "${OBJECTFILE}"
|
||
|
done
|