X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Fparser.ts;fp=src%2Fparser.ts;h=5ffc25961b87dbaed8e8dac179d8abc851fa95bd;hb=d8b33fabf7ffab673f4cd6a8201aadacf3624b41;hp=5521491c4b5dfc8991f2f40060a540d21802af2a;hpb=a59e1673073b613ea12bd8a0cfa7800826d50dce;p=clo diff --git a/src/parser.ts b/src/parser.ts index 5521491..5ffc259 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -31,7 +31,7 @@ export function tkTreeToSExp(t: tkTree): string{ return str; }*/ -type tkTree = string | tkTree[]; +export type tkTree = string | tkTree[]; enum TokenKind { Seperator, // --- @@ -99,6 +99,10 @@ function applyParts(first: tkTree, return ["%clo", first , second[1]]; } +function applyPartsWithoutImport(parsed: [Token, tkTree]):tkTree { +return ["%clo", "" , parsed[1]]; +} + function applyComment(value: Token): tkTree[]{ return [value.text]; @@ -171,10 +175,12 @@ let NOT_AT = p.alt(p.tok(TokenKind.Seperator), ); /** - * PROG : IMPORTS '---' CONTENT; + * PROG : IMPORTS '---' CONTENT | '---' CONTNENT */ PROG.setPattern( - p.lrec_sc(IMPORTS, p.seq(p.str('---'), CONTENT), applyParts) + p.alt( + p.lrec_sc(IMPORTS, p.seq(p.str('---'), CONTENT), applyParts), + p.apply(p.seq(p.str('---'), CONTENT), applyPartsWithoutImport)) ) @@ -239,9 +245,10 @@ CONTENT.setPattern( let outputHead = ` /* clo, a typesetting engine, generated JS file*/ /* CLO: beginning of head*/ -import * as clo from "clo"; -cl = clo.initClo(); +let cloLib = require("./src/libclo/index.js"); +let clo = new cloLib.Clo(); + /* CLO: end of head*/\n` /** @@ -249,11 +256,11 @@ cl = clo.initClo(); */ let outputMiddle =` /* CLO: beginning of middle part*/ -cl.mainText = /* CLO: end of middle part*/ +clo.mainStream = /* CLO: end of middle part*/ ` let outputEnd =` /* CLO: beginning of end part*/ -cl.generatePdf(); +clo.generatePdf(); /*CLO : end of end part*/ ` @@ -261,6 +268,7 @@ cl.generatePdf(); * Convert `tree` (ASTTree; `tkTree`) to JS Code. */ export function treeToJS(tree : tkTree): string{ + let head = tree[0]; if (head == "%clo"){ let totalResult = outputHead + treeToJS(tree[1]) + @@ -290,7 +298,7 @@ export function treeToJS(tree : tkTree): string{ let tail = tree[1]; if (Array.isArray(tail)){ if (tail.length == 1){ - return treeToJS(tail); + return tail.map((x)=>treeToJS(x)).join("').concat('")+ ";"; } let tailStrings = tail.map((x)=>treeToJS(x)); return "(" + tailStrings.join(').concat(') + ");"; @@ -304,7 +312,7 @@ export function treeToJS(tree : tkTree): string{ let decoratedArray = textContents .flatMap(x=>String(x)) .map(x=>x.replace("\`","\\\`")); - + return "[`" + decoratedArray.join("\`, \`") + "`]"; }else{ let decorated = textContents.replace("\`","\\\`");