From efffa2b41dce145671cd996eeb63b56fa3edc618 Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Sat, 21 Aug 2021 07:23:45 +0700 Subject: [PATCH] Display string/number keys same as values --- lib/ocelot-brain | 2 +- .../node/computer/DebuggerWindow.scala | 41 +++++++------------ 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/lib/ocelot-brain b/lib/ocelot-brain index b9af29b..ca8a2de 160000 --- a/lib/ocelot-brain +++ b/lib/ocelot-brain @@ -1 +1 @@ -Subproject commit b9af29bb93878bb49079026ebc011d832dd61e4b +Subproject commit ca8a2de2c7994f6a8c57f7d4433991b170b9935a diff --git a/src/main/scala/ocelot/desktop/node/computer/DebuggerWindow.scala b/src/main/scala/ocelot/desktop/node/computer/DebuggerWindow.scala index e8ccf59..c6f6c27 100644 --- a/src/main/scala/ocelot/desktop/node/computer/DebuggerWindow.scala +++ b/src/main/scala/ocelot/desktop/node/computer/DebuggerWindow.scala @@ -11,7 +11,6 @@ import ocelot.desktop.ui.layout.LinearLayout import ocelot.desktop.ui.widget._ import ocelot.desktop.ui.widget.window.BasicWindow import ocelot.desktop.util.Orientation -import org.apache.commons.text.StringEscapeUtils import totoro.ocelot.brain.entity.machine.luac._ import scala.collection.mutable.ArrayBuffer @@ -370,16 +369,7 @@ class DebuggerWindow(computerNode: ComputerNode) extends BasicWindow { extends LuaValueView(name) { children :+= new Label { - override def text: String = number match { - case LuaValue.Number.Integer(value) => value.toString - - case LuaValue.Number.Double(value) => value match { - case v if v.isPosInfinity => "inf" - case v if v.isNegInfinity => "-inf" - case v if v.isNaN => if ((java.lang.Double.doubleToRawLongBits(v) >>> 63) == 0x0) "nan" else "-nan" - case v => v.toString - } - } + override def text: String = number.toString override def color: Color = ColorScheme("ComputerAddress") } } @@ -694,16 +684,10 @@ class DebuggerWindow(computerNode: ComputerNode) extends BasicWindow { private def luaValueToTableKey(value: LuaValue): Option[String] = { Some(value match { - case LuaValue.Nil => - "[nil]" - case LuaValue.Boolean(v) => - if (v) "[true]" else "[false]" - case LuaValue.Number.Integer(v) => - s"[$v]" - case LuaValue.Number.Double(v) => - s"[$v]" - case s: LuaValue.String => - stringToPathComponent(s.toUtf8String) + case LuaValue.Nil => "[nil]" + case LuaValue.Boolean(v) => if (v) "[true]" else "[false]" + case v: LuaValue.Number => s"[$v]" + case LuaValue.String(s) => stringToPathComponent(s) case _ => return None }) } @@ -722,11 +706,11 @@ class DebuggerWindow(computerNode: ComputerNode) extends BasicWindow { } } - private def stringToPathComponent(s: String): String = { + private def stringToPathComponent(s: List[Byte]): String = { if (isValidIdent(s)) - s"$s" + new String(s.toArray) else - s"[${'"' + StringEscapeUtils.escapeJava(s) + '"'}]" + "[" + escapeLuaString(s) + "]" } private def localNameToPathComponent(s: String): String = { @@ -767,8 +751,13 @@ class DebuggerWindow(computerNode: ComputerNode) extends BasicWindow { Iterator(Some(what), nameWhat).flatten.mkString(" ") } - private def isValidIdent(str: String): Boolean = { - str.matches("[a-zA-Z_][a-zA-Z0-9_]*") + private def isValidIdent(str: List[Byte]): Boolean = { + def isAlpha(c: Byte): Boolean = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') + def isNumeric(c: Byte): Boolean = '0' <= c && c <= '9' + def checkFirstByte(c: Byte): Boolean = isAlpha(c) || c == '_' + def checkTailByte(c: Byte): Boolean = checkFirstByte(c) || isNumeric(c) + + str.headOption.exists(checkFirstByte) && str.tail.forall(checkTailByte) } private def clearStackFrames(): Unit = {