-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.ts
More file actions
93 lines (83 loc) · 2.38 KB
/
index.ts
File metadata and controls
93 lines (83 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
* Created by Omar on 4/26/2017.
*/
export class GenEngine {
protected engines: Array<Engine> = [];
public registerEngine(eng:Engine) {
this.engines.push(eng);
}
public process(name: string, data: any) {
var out = "";
for(var eng of this.engines) {
out+=eng.process(name, data)+"\n";
}
return out;
}
}
export namespace TypeDeterminer {
export class Determiner {
protected types: Array<TypeDefinition> = [];
public declareType(definition: TypeDefinition) {
this.types.push(definition);
definition.types = this;
this.types.sort(function(a, b) {
return a.weight > b.weight ? 1.0 : -1.0;
});
}
public determineType(data: any,name?: string) : string {
for(var typeName in this.types) {
var type = this.types[typeName];
if(type.Validator(data)) {
return type.Parse(data, name);
}
}
}
}
export class TypeDefinition {
public types: Determiner;
public weight: number = 1;
Validator(data: any): boolean {
return false
}
Parse(data:any, name: string): string {
return "";
}
protected nn(name:string, def:string) : string {
var out = (typeof name != "undefined") ? (def) : "";
return out;
}
}
export class BatchStringTypeDefinition extends TypeDefinition{
protected map: Array<{
Source: string,
Target: string
}> = [];
Validator(data) {
if(typeof data == "string") {
for(var map of this.map) {
if(map.Source == data) return true;
}
}
return false;
}
Parse(data, name) {
for(var map of this.map) {
if(map.Source == data) return this.nn(name, name+":")+map.Target;
}
}
pushPair(source: string, target: string) : BatchStringTypeDefinition {
this.map.push({
Source: source,
Target: target
});
return this;
}
}
}
export abstract class Engine{
constructor() {
}
public process(name: string, data: any): string {
return "";
}
}