32 lines
978 B
TypeScript
32 lines
978 B
TypeScript
import {Math} from 'angular2/src/facade/math';
|
|
|
|
export class ParseLocation {
|
|
constructor(public file: ParseSourceFile, public offset: number, public line: number,
|
|
public col: number) {}
|
|
|
|
toString() { return `${this.file.url}@${this.line}:${this.col}`; }
|
|
}
|
|
|
|
export class ParseSourceFile {
|
|
constructor(public content: string, public url: string) {}
|
|
}
|
|
|
|
export abstract class ParseError {
|
|
constructor(public location: ParseLocation, public msg: string) {}
|
|
|
|
toString(): string {
|
|
var source = this.location.file.content;
|
|
var ctxStart = Math.max(this.location.offset - 10, 0);
|
|
var ctxEnd = Math.min(this.location.offset + 10, source.length);
|
|
return `${this.msg} (${source.substring(ctxStart, ctxEnd)}): ${this.location}`;
|
|
}
|
|
}
|
|
|
|
export class ParseSourceSpan {
|
|
constructor(public start: ParseLocation, public end: ParseLocation) {}
|
|
|
|
toString(): string {
|
|
return this.start.file.content.substring(this.start.offset, this.end.offset);
|
|
}
|
|
}
|