##// END OF EJS Templates
Working on text writer
Working on text writer

File last commit:

r81:2ac7406b138e default
r81:2ac7406b138e default
Show More
FormatCompiler.ts
101 lines | 2.9 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / text / FormatCompiler.ts
cin
working on text writer
r79 import { FormatScanner, TokeType } from "./FormatScanner";
cin
Working on text writer
r81 import { isNullOrEmptyString } from "../safe";
import { TextWriter } from "../interfaces";
cin
working on text writer
r79
export class FormatCompiler {
cin
Working on text writer
r81 _scanner: FormatScanner;
cin
working on text writer
r79
cin
Working on text writer
r81 _parts: [];
compile() {
return (writer: TextWriter, args: any) => {
this._parts.forEach(x => writer.WriteValue(x))
};
}
visitText() {
while (this._scanner.next()) {
switch (this._scanner.getTokenType()) {
case TokeType.CurlOpen:
this.visitCurlOpen();
break;
case TokeType.CurlClose:
this.visitCurlClose();
break;
default:
this.pushText(this._scanner.getTokenValue());
}
if (this._scanner.getTokenType() === TokeType.CurlOpen)
this.visitCurlOpen();
cin
working on text writer
r79 }
}
cin
Working on text writer
r81 visitCurlClose() {
if (!this._scanner.next())
this.dieUnexpectedEnd("}");
if (this._scanner.getTokenType() !== TokeType.CurlClose)
this.dieUnexpectedToken("}");
this.pushText("}");
}
visitCurlOpen() {
if (this._scanner.next()) {
if (this._scanner.getTokenType() === TokeType.CurlOpen)
cin
working on text writer
r79 this.pushText("{");
else
cin
Working on text writer
r81 this.visitTemplateSubst();
cin
working on text writer
r79 }
}
cin
Working on text writer
r81 visitTemplateSubst() {
if (this._scanner.getTokenType() !== TokeType.Text)
this.dieUnexpectedToken("TEXT");
cin
working on text writer
r79
cin
Working on text writer
r81 const fieldName = this._scanner.getTokenValue();
const filedFormat = this.readColon() && this.readFieldFormat();
cin
working on text writer
r79
this.pushSubst(fieldName, filedFormat);
}
cin
Added ObservableValue...
r80
cin
Working on text writer
r81 readFieldFormat() {
const parts = new Array<string>();
while (this._scanner.next()) {
if (this._scanner.getTokenType() === TokeType.CurlClose) {
return parts.join("");
} else {
parts.push(this._scanner.getTokenValue());
}
}
this.dieUnexpectedEnd("}");
cin
working on text writer
r79 }
cin
Added ObservableValue...
r80
cin
Working on text writer
r81 readColon() {
if (!this._scanner.next())
this.dieUnexpectedEnd();
if (this._scanner.getTokenType() !== TokeType.Colon)
return false;
if (!this._scanner.next())
this.dieUnexpectedEnd();
return true;
cin
working on text writer
r79 }
cin
Added ObservableValue...
r80
cin
Working on text writer
r81 pushSubst(fieldName: string, filedFormat: string) {
cin
Added ObservableValue...
r80
cin
working on text writer
r79 }
pushText(text: string) {
}
cin
Working on text writer
r81 dieUnexpectedToken(expected?: string) {
throw new Error(isNullOrEmptyString(expected) ?
`Unexpected token ${this._scanner.getTokenValue()}` :
`Unexpected token ${this._scanner.getTokenValue()}, expected ${expected}`
);
cin
working on text writer
r79 }
cin
Working on text writer
r81 dieUnexpectedEnd(expected?: string) {
throw new Error(isNullOrEmptyString(expected) ? "Unexpected end of the string" : `Unexpected end of the string, expected ${expected}`);
cin
working on text writer
r79 }
}