|
|
import { FormatScanner, TokeType } from "./FormatScanner";
|
|
|
|
|
|
export class FormatCompiler {
|
|
|
|
|
|
visitText(scanner: FormatScanner) {
|
|
|
while (scanner.next()) {
|
|
|
if (scanner.getTokenType() === TokeType.CurlOpen)
|
|
|
this.visitCurlOpen(scanner);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
visitCurlOpen(scanner: FormatScanner) {
|
|
|
if (scanner.next()) {
|
|
|
if (scanner.getTokenType() === TokeType.CurlOpen)
|
|
|
this.pushText("{");
|
|
|
else
|
|
|
this.visitTemplateSubst(scanner);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
visitTemplateSubst(scanner: FormatScanner) {
|
|
|
if (scanner.getTokenType() !== TokeType.Text)
|
|
|
this.dieUnexpectedToken(scanner);
|
|
|
|
|
|
const fieldName = scanner.getTokenValue();
|
|
|
let filedFormat: string;
|
|
|
if (this.readColon(scanner)) {
|
|
|
filedFormat = this.readFieldFormat(scanner);
|
|
|
} else {
|
|
|
if (scanner.getTokenType() !== TokeType.CurlClose)
|
|
|
this.dieUnexpectedToken(scanner);
|
|
|
}
|
|
|
|
|
|
this.pushSubst(fieldName, filedFormat);
|
|
|
}
|
|
|
pushSubst(fieldName: string, filedFormat: string) {
|
|
|
throw new Error("Method not implemented.");
|
|
|
}
|
|
|
readFieldFormat(scanner: FormatScanner): string {
|
|
|
throw new Error("Method not implemented.");
|
|
|
}
|
|
|
readColon(scanner: FormatScanner) {
|
|
|
if (!scanner.next())
|
|
|
this.dieUnexpectedEnd();
|
|
|
if (scanner.getTokenType() !== TokeType.Colon)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
pushText(text: string) {
|
|
|
|
|
|
}
|
|
|
|
|
|
dieUnexpectedToken(scanner: FormatScanner) {
|
|
|
throw new Error(`Unexpected token ${scanner.getTokenValue()}`);
|
|
|
}
|
|
|
|
|
|
dieUnexpectedEnd() {
|
|
|
throw new Error("Unexpected end of string");
|
|
|
}
|
|
|
}
|
|
|
|