forked from JetBrains/markdown
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSequentialParser.kt
62 lines (47 loc) · 2.27 KB
/
SequentialParser.kt
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
package org.intellij.markdown.parser.sequentialparsers
import org.intellij.markdown.IElementType
import java.util.*
interface SequentialParser {
fun parse(tokens: TokensCache, rangesToGlue: List<IntRange>): ParsingResult
data class Node(val range: IntRange, val type: IElementType)
interface ParsingResult {
val parsedNodes: Collection<Node>
val rangesToProcessFurther: Collection<List<IntRange>>
}
class ParsingResultBuilder : ParsingResult {
private val _parsedNodes : MutableCollection<Node> = ArrayList()
override val parsedNodes : Collection<Node>
get() = _parsedNodes
private val _rangesToProcessFurther : MutableCollection<List<IntRange>> = ArrayList()
override val rangesToProcessFurther : Collection<List<IntRange>>
get() = _rangesToProcessFurther
fun withNode(result: Node): ParsingResultBuilder {
_parsedNodes.add(result)
return this
}
fun withNodes(parsedNodes: Collection<Node>): ParsingResultBuilder {
_parsedNodes.addAll(parsedNodes)
return this
}
fun withFurtherProcessing(ranges: List<IntRange>): ParsingResultBuilder {
_rangesToProcessFurther.add(ranges)
return this
}
fun withOtherParsingResult(parsingResult: ParsingResult): ParsingResultBuilder {
_parsedNodes.addAll(parsingResult.parsedNodes)
_rangesToProcessFurther.addAll(parsingResult.rangesToProcessFurther)
return this
}
}
}
data class LocalParsingResult(val iteratorPosition: TokensCache.Iterator,
override val parsedNodes: Collection<SequentialParser.Node>,
override val rangesToProcessFurther: Collection<List<IntRange>>) : SequentialParser.ParsingResult {
constructor(iteratorPosition: TokensCache.Iterator,
parsedNodes: Collection<SequentialParser.Node>,
delegateRanges: List<IntRange>)
: this(iteratorPosition, parsedNodes, listOf(delegateRanges))
constructor(iteratorPosition: TokensCache.Iterator,
parsedNodes: Collection<SequentialParser.Node>)
: this(iteratorPosition, parsedNodes, emptyList<List<IntRange>>())
}