Split up main labelTokenizing routine

This commit is contained in:
Rene Saarsoo 2020-09-22 22:01:30 +03:00
parent 955c74be42
commit 0a6bf2fba4
1 changed files with 34 additions and 26 deletions

View File

@ -103,40 +103,48 @@ const tokenizeComment = (line: string, row: number): Token[] | undefined => {
]; ];
}; };
const tokenizeLabelToken = (line: string, row: number): Token[] | undefined => { const tokenizeHeader = (label: HeaderType, separator: string, paramString: string, row: number): Token[] => {
const token: HeaderToken = {
type: "header",
value: label,
loc: { row, col: 0 },
};
const param: TextToken = {
type: "text",
value: paramString,
loc: {
row,
col: label.length + separator.length,
},
};
return [token, param];
};
const tokenizeInterval = (label: IntervalType, separator: string, paramString: string, row: number): Token[] => {
const token: IntervalToken = {
type: "interval",
value: label,
loc: { row, col: 0 },
};
const params = tokenizeParams(paramString, {
row,
col: label.length + separator.length,
});
return [token, ...params];
};
const tokenizeLabeledLine = (line: string, row: number): Token[] | undefined => {
const [, label, separator, paramString] = line.match(/^(\w+)(:\s*)(.*?)\s*$/) || []; const [, label, separator, paramString] = line.match(/^(\w+)(:\s*)(.*?)\s*$/) || [];
if (!label) { if (!label) {
return undefined; return undefined;
} }
if (isHeaderType(label)) { if (isHeaderType(label)) {
const token: HeaderToken = { return tokenizeHeader(label, separator, paramString, row);
type: "header",
value: label,
loc: { row, col: 0 },
};
const param: TextToken = {
type: "text",
value: paramString,
loc: {
row,
col: label.length + separator.length,
},
};
return [token, param];
} }
if (isIntervalType(label)) { if (isIntervalType(label)) {
const token: IntervalToken = { return tokenizeInterval(label, separator, paramString, row);
type: "interval",
value: label,
loc: { row, col: 0 },
};
const params = tokenizeParams(paramString, {
row,
col: label.length + separator.length,
});
return [token, ...params];
} }
throw new ParseError(`Unknown label "${label}:"`, { row, col: 0 }); throw new ParseError(`Unknown label "${label}:"`, { row, col: 0 });
@ -144,7 +152,7 @@ const tokenizeLabelToken = (line: string, row: number): Token[] | undefined => {
const tokenizeRule = (line: string, row: number): Token[] => { const tokenizeRule = (line: string, row: number): Token[] => {
return ( return (
tokenizeLabelToken(line, row) || tokenizeLabeledLine(line, row) ||
tokenizeComment(line, row) || [{ type: "text", value: line.trim(), loc: { row, col: 0 } }] tokenizeComment(line, row) || [{ type: "text", value: line.trim(), loc: { row, col: 0 } }]
); );
}; };