diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 9d62f93..2a65317 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,10 +1,16 @@ + diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 131e44d..c224ad5 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 775445d..fae6c8e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,9 @@ + + + diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt index c514c49..4d5dc23 100644 --- a/src/main/kotlin/Main.kt +++ b/src/main/kotlin/Main.kt @@ -48,23 +48,18 @@ fun main(args: Array) { * @param invoker инвокер команд */ fun runRepl(inputManager: InputManager, invoker: CommandInvoker) { - var isRunning: Boolean = true + var isRunning = true + + // exitProcess мне нравился больше + invoker.register(ExitCommand { isRunning = false }) + while (isRunning) { - - - val line = inputManager.readLine() - - // EOF — завершаем без сохранения - if (line == null) { - println("\nНу ладно.") - isRunning = false - continue - } - + val line = inputManager.readLine() ?: break if (line.isBlank()) continue - invoker.execute(line) } + + println("\nНу ладно.") } /** @@ -93,7 +88,6 @@ fun registerCommands( ClearCommand(manager), SaveCommand(manager, fileManager), ExecuteScriptCommand(invoker), - ExitCommand(), AddIfMaxCommand(manager, inputManager), AddIfMinCommand(manager, inputManager), HistoryCommand(invoker), diff --git a/src/main/kotlin/commands/ExecuteScriptCommand.kt b/src/main/kotlin/commands/ExecuteScriptCommand.kt index d2dba9c..e38b65f 100644 --- a/src/main/kotlin/commands/ExecuteScriptCommand.kt +++ b/src/main/kotlin/commands/ExecuteScriptCommand.kt @@ -28,7 +28,6 @@ class ExecuteScriptCommand(private val invoker: CommandInvoker) : Command { println("Чтение скрипта '$filePath'...") val queue = CommandQueue() queue.loadFromScript(filePath) - println("Команды в очереди: ${queue.peek()}") // временно if (queue.isEmpty()) { println("Текст Скриптонита пустой или не найден.") diff --git a/src/main/kotlin/commands/ExitCommand.kt b/src/main/kotlin/commands/ExitCommand.kt index ddbc248..0a900ed 100644 --- a/src/main/kotlin/commands/ExitCommand.kt +++ b/src/main/kotlin/commands/ExitCommand.kt @@ -1,16 +1,14 @@ package commands -import kotlin.system.exitProcess - /** - * Завершает программу без сохранения. + * Завершает программу без сохранения. Теперь это Callback */ -class ExitCommand : Command { +class ExitCommand(private val onExit: () -> Unit) : Command { override val name = "exit" - override val description = "завершить программу (без сохранения)" + override val description = "завершить программу" override fun execute(args: List) { - println("Завершение работы.") - exitProcess(0) //nizya + println("До свидания!") + onExit() } } diff --git a/src/main/kotlin/runner/CommandQueue.kt b/src/main/kotlin/runner/CommandQueue.kt index ffbbd84..09a7b8a 100644 --- a/src/main/kotlin/runner/CommandQueue.kt +++ b/src/main/kotlin/runner/CommandQueue.kt @@ -60,6 +60,7 @@ class CommandQueue { visitedScripts.add(filePath) + // Лениво читаю файл, пока Сканер не вернет null, т.е. файл закончится Scanner(file, Charsets.UTF_8).use { scanner -> generateSequence { if (scanner.hasNextLine()) scanner.nextLine() else null } .map { it.trim() }