-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLexerRunnerFactory.kt
49 lines (41 loc) · 1.98 KB
/
LexerRunnerFactory.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
package org.jetbrains.slp.lexing
import org.jetbrains.slp.Language
import org.jetbrains.slp.filters.DefaultCodeFilter
import org.jetbrains.slp.filters.lang.CCodeFilter
import org.jetbrains.slp.filters.lang.JavaCodeFilter
import org.jetbrains.slp.filters.lang.KotlinCodeFilter
import org.jetbrains.slp.filters.lang.PythonCodeFilter
object LexerRunnerFactory {
fun getLexerRunner(extension: String) = when(extension) {
in Language.JAVA.extensions -> makeLexerRunner(Language.JAVA, NaiveCodeLexer())
in Language.PYTHON.extensions -> makeLexerRunner(Language.PYTHON, NaiveCodeLexer())
in Language.KOTLIN.extensions -> makeLexerRunner(Language.KOTLIN, NaiveCodeLexer())
in Language.C.extensions -> makeLexerRunner(Language.C, NaiveCodeLexer())
else -> LexerRunner(NaiveCodeLexer(), true).apply {
setSentenceMarkers(true)
}
}
fun getLexerRunner(language: Language) = when(language) {
Language.JAVA -> makeLexerRunner(Language.JAVA, NaiveCodeLexer())
Language.PYTHON -> makeLexerRunner(Language.PYTHON, NaiveCodeLexer())
Language.KOTLIN -> makeLexerRunner(Language.KOTLIN, NaiveCodeLexer())
Language.C -> makeLexerRunner(Language.C, NaiveCodeLexer())
Language.UNKNOWN -> LexerRunner(NaiveCodeLexer(), true).apply {
setSentenceMarkers(true)
}
}
private fun languageToFilter(language: Language) = when(language) {
Language.JAVA -> JavaCodeFilter
Language.PYTHON -> PythonCodeFilter
Language.KOTLIN -> KotlinCodeFilter
Language.C -> CCodeFilter
Language.UNKNOWN -> DefaultCodeFilter
}
private fun makeLexerRunner(language: Language, lexer: Lexer) =
LexerRunner(lexer, true, languageToFilter(language)).apply {
regex = (extensionsToRegex(language.extensions))
setSentenceMarkers(true)
}
private fun extensionsToRegex(extensions: List<String>) =
""".*\.(${extensions.joinToString("|")})"""
}