usfm-grammar
Version:
Uses the tree-sitter-usfm3 parser to convert USFM files to other formats such as USJ, USX, and CSV, and converts them back to USFM
81 lines (76 loc) • 1.74 kB
JavaScript
const Parser = require('tree-sitter');
const { Query } = Parser;
function getIdQuery(lang) {
return new Query(lang, '(id (bookcode) @book-code (description)? @desc)');
}
function usjCaVaquery(lang) {
return new Query(
lang,
`([
(chapterNumber)
(verseNumber)
] @alt-num)`,
);
}
function attribValQuery(lang) {
return new Query(lang, '((attributeValue) @attrib-val)');
}
function getChapQuery(lang) {
return new Query(
lang,
`(c (chapterNumber) @chap-num
(ca (chapterNumber) @alt-num)?
(cp (text) @pub-num)?)`,
);
}
function paraQuery(lang) {
return new Query(lang, '(paragraph (_) @para-marker)');
}
function mileStoneQuery(lang) {
return new Query(
lang,
`([
(milestoneTag)
(milestoneStartTag)
(milestoneEndTag)
(zSpaceTag)
] @ms-name)`,
);
}
function categoryQuery(lang) {
return new Query(lang, '((category) @category)');
}
function verseNumCapQuery(lang) {
return new Query(
lang,
`(v
(verseNumber) @vnum
(va (verseNumber) @alt)?
(vp (text) @vp)?
)`,
);
}
function createQueriesAsNeeded(name, lang) {
switch (name) {
case 'chapter':
return getChapQuery(lang);
case 'usjCaVa':
return usjCaVaquery(lang);
case 'attribVal':
return attribValQuery(lang);
case 'para':
return paraQuery(lang);
case 'id':
return getIdQuery(lang);
case 'milestone':
return mileStoneQuery(lang);
case 'category':
return categoryQuery(lang);
case 'verseNumCap':
return verseNumCapQuery(lang);
default:
break;
}
}
module.exports = { createQueriesAsNeeded };
// exports.createQueriesAsNeeded = createQueriesAsNeeded;