X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Fparser.ts;fp=src%2Fparser.ts;h=867b8f789596c8e9290db1a371837511d09c7baa;hb=714bbb4a64531268d17ca8f7ae60800ec2046a27;hp=8100f5581ebf08a85ce2730e44c0704f2d3e5470;hpb=99e47c45312eae01a5c05fcaadda22657577c01d;p=clo diff --git a/src/parser.ts b/src/parser.ts index 8100f55..867b8f7 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,6 +1,7 @@ /** * parser.ts - parser and js generator of clo. */ +import { text } from 'pdfkit'; import * as p from 'typescript-parsec'; import { Token } from 'typescript-parsec'; @@ -60,6 +61,7 @@ export const lexer = p.buildLexer([ [true, /^[\+\-\*\/\&\|\!\^\<\>\~\=\?]+/g, TokenKind.Op], [true, /^\@/g, TokenKind.ExprMark], [true, /^[()\[\]{}]/g, TokenKind.Paren], + [true, /^[\`]([^\`]|[\\].)*[\`]/g, TokenKind.Str], [true, /^[\"]([^\"]|[\\].)*[\"]/g, TokenKind.Str], [true, /^[\']([^\']|[\\].)*[\']/g, TokenKind.Str], [true, /^[()\[\]{}]/g, TokenKind.Paren], @@ -141,9 +143,12 @@ export function applyNotAtText(value : Token): tkTree{ }; export function applyText (input : tkTree): tkTree[]{ + return ["%text", input]; }; + + export function applyContent(input : tkTree[]): tkTree[]{ return ["%content", input]; }; @@ -269,6 +274,16 @@ clo.generatePdf(); /*CLO : end of end part*/ ` +export function splitText(input : tkTree): tkTree{ + var ret; + if (!Array.isArray(input)){ + ret = input.split(/(\s+)/); + }else{ + ret = input.map((x)=>splitText(x)); + } + return ret; +} + /** * Convert `tree` (ASTTree; `tkTree`) to JS Code. */ @@ -312,15 +327,17 @@ export function treeToJS(tree : tkTree): string{ } } if (head == "%text"){ - let textContents = tree[1]; + var textContents = splitText(tree[1]); if (Array.isArray(textContents)){ + textContents = textContents.flat().filter((x)=>{return x !== ""}); let decoratedArray = textContents .flatMap(x=>String(x)) + .map(x=>x.replace("\'", "\\\'")) .map(x=>x.replace("\`","\\\`")); return "[`" + decoratedArray.join("\`, \`") + "`]"; }else{ - let decorated = textContents.replace("\`","\\\`"); + let decorated = textContents.replace("\`","\\\`").replace("\'", "\\\'"); return "[`" + decorated + "`]"; }