Improve: Remove unnecessary field in NeoLang
This commit is contained in:
parent
d21efbb46d
commit
4b9bf83181
3
NeoLang/example/extra-key.nl
Normal file
3
NeoLang/example/extra-key.nl
Normal file
@ -0,0 +1,3 @@
|
||||
extra-key: {
|
||||
program: { "vim", "vi" }
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package io.neolang.parser
|
||||
|
||||
import io.neolang.ast.*
|
||||
import io.neolang.ast.NeoLangToken
|
||||
import io.neolang.ast.NeoLangTokenType
|
||||
import io.neolang.ast.NeoLangTokenValue
|
||||
import io.neolang.ast.base.NeoLangAst
|
||||
import io.neolang.ast.node.*
|
||||
|
||||
@ -8,9 +10,6 @@ import io.neolang.ast.node.*
|
||||
* @author kiva
|
||||
*/
|
||||
class NeoLangParser {
|
||||
var ast: NeoLangAst? = null
|
||||
private set
|
||||
|
||||
private val lexer = NeoLangLexer()
|
||||
private var tokens = mutableListOf<NeoLangToken>()
|
||||
private var currentPosition: Int = 0
|
||||
@ -21,22 +20,20 @@ class NeoLangParser {
|
||||
}
|
||||
|
||||
fun parse(): NeoLangAst {
|
||||
updateParserStatus(lexer.lex())
|
||||
return ast ?: throw ParseException("AST is null")
|
||||
return updateParserStatus(lexer.lex()) ?: throw ParseException("AST is null")
|
||||
}
|
||||
|
||||
private fun updateParserStatus(tokens: List<NeoLangToken>) {
|
||||
private fun updateParserStatus(tokens: List<NeoLangToken>): NeoLangAst? {
|
||||
if (tokens.isEmpty()) {
|
||||
// Allow empty program
|
||||
ast = NeoLangProgramNode.emptyNode()
|
||||
return
|
||||
return NeoLangProgramNode.emptyNode()
|
||||
}
|
||||
|
||||
this.tokens.clear()
|
||||
this.tokens.addAll(tokens)
|
||||
currentPosition = 0
|
||||
currentToken = tokens[currentPosition]
|
||||
ast = program()
|
||||
return program()
|
||||
}
|
||||
|
||||
private fun match(tokenType: NeoLangTokenType, errorThrow: Boolean = false): Boolean {
|
||||
|
@ -1,9 +1,97 @@
|
||||
package io.neoterm.customize.config.loader
|
||||
|
||||
import io.neoterm.customize.eks.ExtraKeyConfigParser
|
||||
import io.neoterm.customize.eks.NeoExtraKey
|
||||
import io.neoterm.frontend.config.ConfigVisitor
|
||||
import io.neoterm.frontend.config.NeoConfigureFile
|
||||
import io.neoterm.view.eks.button.TextButton
|
||||
import java.io.BufferedReader
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* @author kiva
|
||||
*/
|
||||
class OldExtraKeysConfigureFile(configureFile: File) : NeoConfigureFile(configureFile)
|
||||
class OldExtraKeysConfigureFile(configureFile: File) : NeoConfigureFile(configureFile) {
|
||||
override var configVisitor: ConfigVisitor? = null
|
||||
|
||||
override fun parseConfigure(): Boolean {
|
||||
return super.parseConfigure()
|
||||
}
|
||||
|
||||
private fun parseOldConfig(source: BufferedReader): NeoExtraKey {
|
||||
val config = NeoExtraKey()
|
||||
var line: String? = source.readLine()
|
||||
|
||||
while (line != null) {
|
||||
line = line.trim().trimEnd()
|
||||
if (line.isEmpty() || line.startsWith("#")) {
|
||||
line = source.readLine()
|
||||
continue
|
||||
}
|
||||
|
||||
if (line.startsWith("version")) {
|
||||
parseHeader(line, config)
|
||||
} else if (line.startsWith("program")) {
|
||||
parseProgram(line, config)
|
||||
} else if (line.startsWith("define")) {
|
||||
parseKeyDefine(line, config)
|
||||
} else if (line.startsWith("with-default")) {
|
||||
parseWithDefault(line, config)
|
||||
}
|
||||
line = source.readLine()
|
||||
}
|
||||
|
||||
if (config.version < 0) {
|
||||
throw RuntimeException("Not a valid shortcut config file")
|
||||
}
|
||||
if (config.programNames.size == 0) {
|
||||
throw RuntimeException("At least one program name should be given")
|
||||
}
|
||||
return config
|
||||
}
|
||||
|
||||
private fun parseWithDefault(line: String, config: NeoExtraKey) {
|
||||
val value = line.substring("with-default".length).trim().trimEnd()
|
||||
config.withDefaultKeys = value == "true"
|
||||
}
|
||||
|
||||
private fun parseKeyDefine(line: String, config: NeoExtraKey) {
|
||||
val keyDefine = line.substring("define".length).trim().trimEnd()
|
||||
val keyValues = keyDefine.split(" ")
|
||||
if (keyValues.size < 2) {
|
||||
throw RuntimeException("Bad define")
|
||||
}
|
||||
|
||||
val buttonText = keyValues[0]
|
||||
val withEnter = keyValues[1] == "true"
|
||||
|
||||
config.shortcutKeys.add(TextButton(buttonText, withEnter))
|
||||
}
|
||||
|
||||
private fun parseProgram(line: String, config: NeoExtraKey) {
|
||||
val programNames = line.substring("program".length).trim().trimEnd()
|
||||
if (programNames.isEmpty()) {
|
||||
return
|
||||
}
|
||||
|
||||
for (name in programNames.split(" ")) {
|
||||
config.programNames.add(name)
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseHeader(line: String, config: NeoExtraKey) {
|
||||
val version: Int
|
||||
val versionString = line.substring("version".length).trim().trimEnd()
|
||||
try {
|
||||
version = Integer.parseInt(versionString)
|
||||
} catch (e: NumberFormatException) {
|
||||
throw RuntimeException("Bad version '$versionString'")
|
||||
}
|
||||
|
||||
if (version > ExtraKeyConfigParser.PARSER_VERSION) {
|
||||
throw RuntimeException("Required version: $version, please upgrade your app")
|
||||
}
|
||||
|
||||
config.version = version
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ import java.io.File
|
||||
* @author kiva
|
||||
*/
|
||||
object ExtraKeyConfigLoader {
|
||||
class ConfiguredExtraKey(val config: ExtraKeyConfig) : ExtraKey {
|
||||
class ConfiguredExtraKey(val config: NeoExtraKey) : IExtraKey {
|
||||
override fun applyShortcutKeys(extraKeysView: ExtraKeysView) {
|
||||
if (config.withDefaultKeys) {
|
||||
extraKeysView.loadDefaultUserKeys()
|
||||
@ -42,7 +42,7 @@ object ExtraKeyConfigLoader {
|
||||
}
|
||||
}
|
||||
|
||||
private fun registerConfig(extraKeysManager: ExtraKeysService, config: ExtraKeyConfig) {
|
||||
private fun registerConfig(extraKeysManager: ExtraKeysService, config: NeoExtraKey) {
|
||||
val shortcutKey = ConfiguredExtraKey(config)
|
||||
for (programName in config.programNames) {
|
||||
extraKeysManager.registerShortcutKeys(programName, shortcutKey)
|
||||
|
@ -25,8 +25,8 @@ class ExtraKeyConfigParser {
|
||||
source = BufferedReader(InputStreamReader(inputStream))
|
||||
}
|
||||
|
||||
fun parse(): ExtraKeyConfig {
|
||||
val config = ExtraKeyConfig()
|
||||
fun parse(): NeoExtraKey {
|
||||
val config = NeoExtraKey()
|
||||
var line: String? = source.readLine()
|
||||
|
||||
while (line != null) {
|
||||
@ -57,12 +57,12 @@ class ExtraKeyConfigParser {
|
||||
return config
|
||||
}
|
||||
|
||||
private fun parseWithDefault(line: String, config: ExtraKeyConfig) {
|
||||
private fun parseWithDefault(line: String, config: NeoExtraKey) {
|
||||
val value = line.substring("with-default".length).trim().trimEnd()
|
||||
config.withDefaultKeys = value == "true"
|
||||
}
|
||||
|
||||
private fun parseKeyDefine(line: String, config: ExtraKeyConfig) {
|
||||
private fun parseKeyDefine(line: String, config: NeoExtraKey) {
|
||||
val keyDefine = line.substring("define".length).trim().trimEnd()
|
||||
val keyValues = keyDefine.split(" ")
|
||||
if (keyValues.size < 2) {
|
||||
@ -75,7 +75,7 @@ class ExtraKeyConfigParser {
|
||||
config.shortcutKeys.add(TextButton(buttonText, withEnter))
|
||||
}
|
||||
|
||||
private fun parseProgram(line: String, config: ExtraKeyConfig) {
|
||||
private fun parseProgram(line: String, config: NeoExtraKey) {
|
||||
val programNames = line.substring("program".length).trim().trimEnd()
|
||||
if (programNames.isEmpty()) {
|
||||
return
|
||||
@ -86,7 +86,7 @@ class ExtraKeyConfigParser {
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseHeader(line: String, config: ExtraKeyConfig) {
|
||||
private fun parseHeader(line: String, config: NeoExtraKey) {
|
||||
val version: Int
|
||||
val versionString = line.substring("version".length).trim().trimEnd()
|
||||
try {
|
||||
|
@ -19,7 +19,7 @@ class ExtraKeysService : NeoService {
|
||||
checkForFiles()
|
||||
}
|
||||
|
||||
val EKS_KEYS: MutableMap<String, ExtraKey> = mutableMapOf()
|
||||
val EKS_KEYS: MutableMap<String, IExtraKey> = mutableMapOf()
|
||||
|
||||
fun showShortcutKeys(program: String, extraKeysView: ExtraKeysView?) {
|
||||
if (extraKeysView == null) {
|
||||
@ -35,7 +35,7 @@ class ExtraKeysService : NeoService {
|
||||
extraKeysView.loadDefaultUserKeys()
|
||||
}
|
||||
|
||||
fun registerShortcutKeys(program: String, eksKey: ExtraKey?) {
|
||||
fun registerShortcutKeys(program: String, eksKey: IExtraKey?) {
|
||||
if (eksKey == null) {
|
||||
if (this.EKS_KEYS.containsKey(program)) {
|
||||
this.EKS_KEYS.remove(program)
|
||||
|
@ -5,6 +5,6 @@ import io.neoterm.view.eks.ExtraKeysView
|
||||
/**
|
||||
* @author kiva
|
||||
*/
|
||||
interface ExtraKey {
|
||||
interface IExtraKey {
|
||||
fun applyShortcutKeys(extraKeysView: ExtraKeysView)
|
||||
}
|
@ -5,7 +5,7 @@ import io.neoterm.view.eks.button.IExtraButton
|
||||
/**
|
||||
* @author kiva
|
||||
*/
|
||||
class ExtraKeyConfig {
|
||||
class NeoExtraKey {
|
||||
var version: Int = -1
|
||||
val programNames: MutableList<String> = mutableListOf()
|
||||
val shortcutKeys: MutableList<IExtraButton> = mutableListOf()
|
Loading…
Reference in New Issue
Block a user