all files / es6/ parser.js

100% Statements 41/41
100% Branches 14/14
100% Functions 8/8
100% Lines 41/41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66     196× 982×     197× 978×     136×       302× 302× 1512× 1512× 1512× 141× 141×     161×     136× 136× 136× 136× 4411× 604× 604× 302× 302× 161×   302× 302× 302×   302× 302×   3807× 1102× 329×     773×   1102×   2705× 2705×          
const DocUtils = require("./doc-utils");
 
const parser = {
	postparse(parsed, modules) {
		function getTraits(traitName, parsed) {
			return modules.map(function (module) {
				return module.getTraits(traitName, parsed);
			});
		}
		function postparse(parsed) {
			return modules.reduce(function (parsed, module) {
				return module.postparse(parsed, {postparse, getTraits});
			}, parsed);
		}
		return postparse(parsed);
	},
 
	parse(lexed, modules) {
		function moduleParse(placeHolderContent, parsed) {
			let moduleParsed;
			for (let i = 0, l = modules.length; i < l; i++) {
				const module = modules[i];
				moduleParsed = module.parse(placeHolderContent);
				if (moduleParsed) {
					parsed.push(moduleParsed);
					return moduleParsed;
				}
			}
			return null;
		}
 
		let inPlaceHolder = false;
		let placeHolderContent;
		let tailParts = [];
		return lexed.reduce(function (parsed, token) {
			if (token.type === "delimiter") {
				inPlaceHolder = token.position === "start";
				if (token.position === "end") {
					placeHolderContent = DocUtils.wordToUtf8(placeHolderContent);
					if (!moduleParse(placeHolderContent, parsed)) {
						parsed.push({type: "placeholder", value: placeHolderContent});
					}
					Array.prototype.push.apply(parsed, tailParts);
					tailParts = [];
					return parsed;
				}
				placeHolderContent = "";
				return parsed;
			}
			if (inPlaceHolder) {
				if (token.type === "content" && token.position === "insidetag") {
					placeHolderContent += token.value;
				}
				else {
					tailParts.push(token);
				}
				return parsed;
			}
			parsed.push(token);
			return parsed;
		}, []);
	},
};
 
module.exports = parser;