From 8fac78e3246ecd283f420d7cd42b22903dd6d515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 16 Oct 2023 17:21:46 +0200 Subject: [PATCH] Fixed #2099 Smart number formatting always on --- CHANGELOG.md | 2 + .../abc/avm2/model/IntegerValueAVM2Item.java | 129 +++++++++--------- 2 files changed, 68 insertions(+), 63 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ace508e5e..933c2b13f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Fixed +- [#2099] Smart number formatting always on ## [19.1.1] - 2023-10-16 ### Fixed diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index a39c9928d..df387e05a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -56,74 +56,77 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item implements Integer */ public void detectFormat() { precedence = PRECEDENCE_PRIMARY; - if (value >= 256 && value <= 0xffffffffL) { - int intVal = (int) (long) (value & 0xffffff); - int r = (intVal >> 16) & 0xff; - int g = (intVal >> 8) & 0xff; - int b = intVal & 0xff; - if ((r == b && b == g) // gray - || (((intVal & 0x0f0000) == 0 || (intVal & 0x0f0000) == 0x0f0000) // a(0/F)b(0/F)c(0/F) - && ((intVal & 0x000f00) == 0 || (intVal & 0x000f00) == 0x000f00) - && ((intVal & 0x00000f) == 0 || (intVal & 0x00000f) == 0x00000f)) - || ((((intVal & 0xf00000) >> 20) == ((intVal & 0x0f0000) >> 16)) // aabbcc - && (((intVal & 0x00f000) >> 12) == ((intVal & 0x000f00) >> 8)) - && (((intVal & 0x0000f0) >> 4) == ((intVal & 0x00000f))))) { - this.formatted = "0x" + Long.toHexString(value); - return; - } - } - long value2 = (long) value; - if (value2 > 0 && value2 % 60 == 0) { - int thousandCount = 0; - value2 /= 60; - boolean isHour = false; - boolean isDay = false; - if (value2 % 60 == 0) { + if (Configuration.smartNumberFormatting.get()) { + if (value >= 256 && value <= 0xffffffffL) { + int intVal = (int) (long) (value & 0xffffff); + int r = (intVal >> 16) & 0xff; + int g = (intVal >> 8) & 0xff; + int b = intVal & 0xff; + if ((r == b && b == g) // gray + || (((intVal & 0x0f0000) == 0 || (intVal & 0x0f0000) == 0x0f0000) // a(0/F)b(0/F)c(0/F) + && ((intVal & 0x000f00) == 0 || (intVal & 0x000f00) == 0x000f00) + && ((intVal & 0x00000f) == 0 || (intVal & 0x00000f) == 0x00000f)) + || ((((intVal & 0xf00000) >> 20) == ((intVal & 0x0f0000) >> 16)) // aabbcc + && (((intVal & 0x00f000) >> 12) == ((intVal & 0x000f00) >> 8)) + && (((intVal & 0x0000f0) >> 4) == ((intVal & 0x00000f))))) { + this.formatted = "0x" + Long.toHexString(value); + return; + } + } + + long value2 = (long) value; + if (value2 > 0 && value2 % 60 == 0) { + int thousandCount = 0; value2 /= 60; - isHour = true; - if (value2 % 24 == 0) { - value2 /= 24; - isDay = true; - } - } - - // check milli, micro and nanoseconds - while (thousandCount < 3) { - if (value2 % 1000 == 0) { - thousandCount++; - value2 /= 1000; - } else { - break; - } - } - - if (value2 < 1000) { - List factors = new ArrayList<>(); - if (value2 > 1) { - factors.add((int) value2); - } - if (isDay) { - factors.add(24); - } - if (isHour) { - factors.add(60); - } - factors.add(60); - for (int i = 0; i < thousandCount; i++) { - factors.add(1000); - } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < factors.size(); i++) { - if (i != 0) { - sb.append(" * "); + boolean isHour = false; + boolean isDay = false; + if (value2 % 60 == 0) { + value2 /= 60; + isHour = true; + if (value2 % 24 == 0) { + value2 /= 24; + isDay = true; } - sb.append(factors.get(i)); } - precedence = PRECEDENCE_MULTIPLICATIVE; - this.formatted = sb.toString(); - return; + // check milli, micro and nanoseconds + while (thousandCount < 3) { + if (value2 % 1000 == 0) { + thousandCount++; + value2 /= 1000; + } else { + break; + } + } + + if (value2 < 1000) { + List factors = new ArrayList<>(); + if (value2 > 1) { + factors.add((int) value2); + } + if (isDay) { + factors.add(24); + } + if (isHour) { + factors.add(60); + } + factors.add(60); + for (int i = 0; i < thousandCount; i++) { + factors.add(1000); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < factors.size(); i++) { + if (i != 0) { + sb.append(" * "); + } + sb.append(factors.get(i)); + } + precedence = PRECEDENCE_MULTIPLICATIVE; + + this.formatted = sb.toString(); + return; + } } } this.formatted = EcmaScript.toString(value);