-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCommentStripper.ts
More file actions
63 lines (62 loc) · 1.54 KB
/
CommentStripper.ts
File metadata and controls
63 lines (62 loc) · 1.54 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
import { mendly } from "mendly"
export class CommentStripper extends mendly.Reader {
private backend: mendly.Reader.Buffered
private last: string | undefined
private disableUntil?: string
get readable(): boolean {
return this.backend.readable
}
get opened(): boolean {
return this.backend.opened
}
get tabSize(): number {
return this.backend.tabSize
}
get empty(): boolean {
return this.backend.empty
}
get resource(): mendly.Uri {
return this.backend.resource
}
get location(): mendly.Error.Location {
return this.backend.location
}
get region(): mendly.Error.Region {
return this.backend.region
}
constructor(backend: mendly.Reader) {
super()
this.backend =
backend instanceof mendly.Reader.Buffered
? (backend as mendly.Reader.Buffered)
: mendly.Reader.Buffered.create(backend)
}
read(): string | undefined {
const peeked = this.backend.peek(2)
switch (peeked) {
case "++": // diagram block
case "%%": // code block
this.disableUntil = !this.disableUntil ? peeked : this.disableUntil == peeked ? undefined : this.disableUntil
break
case "//":
if (!this.disableUntil && this.last != ":")
while (this.backend.peek() != "\n")
this.backend.read()
break
case "/*":
if (!this.disableUntil) {
while (this.backend.peek(2) != "*/")
this.backend.read()
this.backend.read(2)
}
break
}
return (this.last = this.backend.read())
}
mark(): mendly.Error.Region {
return this.backend.mark()
}
close(): Promise<boolean> {
return this.backend.close()
}
}