diff --git a/modules/rpgmakerace.py b/modules/rpgmakerace.py
index 29e65cd..ae23c92 100644
--- a/modules/rpgmakerace.py
+++ b/modules/rpgmakerace.py
@@ -80,7 +80,7 @@ LEAVE = False
# Config (Default)
# FIRSTLINESPEAKERS: Guess speaker from first line.
-FIRSTLINESPEAKERS = True
+FIRSTLINESPEAKERS = False
# FACENAME101: Map face name -> speaker.
FACENAME101 = False
# BRFLAG: Newlines ->
.
@@ -92,9 +92,9 @@ IGNORETLTEXT = False
# TLSYSTEMVARIABLES: Translate System Variables. (Optional but sometimes necessary. Can break stuff.)
TLSYSTEMVARIABLES = False
# Join 408 codes into a single string like 401.
-JOIN408 = True
+JOIN408 = False
# SPEAKERS408: Process speakers in code 408 the same way as code 401.
-SPEAKERS408 = True
+SPEAKERS408 = False
# Dialogue / Scroll / Choices (Main Codes)
CODE101 = True
@@ -106,7 +106,7 @@ CODE102 = True
CODE408 = True
# Variables
-CODE122 = False
+CODE122 = True
# Plugins / Scripts
CODE355655 = False
@@ -471,28 +471,15 @@ def parseMap(data, filename):
pass
def _estimate_map_units(d, fname) -> int:
- dcopy = copy.deepcopy(d)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE
- saved_preflight = PREFLIGHT_COUNT_MODE
- global PBAR
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count items directly
+ count = 0
try:
# Count display name TL (1 unit if present)
- if "Map" in fname and isinstance(dcopy.get("display_name", None), str):
- try:
- translateAI(
- dcopy["display_name"],
- "Reply with only the " + LANGUAGE + " translation of the RPG location name",
- False,
- )
- except Exception:
- pass
+ if "Map" in fname and isinstance(d.get("display_name", None), str):
+ count += 1
- # Notes and pages
- evts = dcopy.get("events", {}) or {}
+ # Notes and pages - count actual translatable items
+ evts = d.get("events", {}) or {}
for evt in evts.values():
if not evt:
continue
@@ -500,53 +487,41 @@ def parseMap(data, filename):
if not isinstance(note_val, str):
note_val = str(note_val) if note_val is not None else ""
- # name translation
+ # Count note-based translations
if "" in note_val:
name_val = evt.get("name") or ""
if isinstance(name_val, str) and name_val:
- try:
- translateAI(
- name_val,
- "Reply with only the " + LANGUAGE + " translation of the RPG location name",
- False,
- )
- except Exception:
- pass
+ count += 1
- #
if "", False)
- except Exception:
- pass
+ matches = re.findall(r"", note_val, re.DOTALL)
+ count += len(matches)
- # , , handled before page processing in real run
if ".*")
- except Exception:
- pass
+ matches = re.findall(r".*", note_val)
+ count += len(matches)
if ".*")
- except Exception:
- pass
+ matches = re.findall(r".*", note_val)
+ count += len(matches)
+ # Count commands in pages (rough estimate)
for page in (evt.get("pages", []) or []):
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- pass
+ if page and "list" in page:
+ # Count translatable codes
+ for cmd in page.get("list", []):
+ if cmd and "c" in cmd:
+ code = cmd["c"]
+ # Count common translatable codes
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_preflight
- PBAR = saved_pbar
+ return count if count > 0 else 1
+ except Exception:
+ return 1
+
# Translate display_name for Map files
if "Map" in filename:
@@ -710,24 +685,19 @@ def parseCommonEvents(data, filename):
pass
def _estimate_units(pages, fname) -> int:
- dcopy = copy.deepcopy(pages)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for page in dcopy:
- if page is not None:
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for page in pages:
+ if page is not None and "list" in page:
+ for cmd in page.get("list", []):
+ if cmd and "c" in cmd:
+ code = cmd["c"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0:
@@ -777,27 +747,22 @@ def parseTroops(data, filename):
pass
def _estimate_units(troops, fname) -> int:
- tcopy = copy.deepcopy(troops)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for troop in tcopy:
+ for troop in troops:
if troop is None:
continue
for page in (troop.get("pages", []) or []):
- if page is not None:
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ if page is not None and "list" in page:
+ for cmd in page.get("list", []):
+ if cmd and "c" in cmd:
+ code = cmd["c"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0:
@@ -848,22 +813,9 @@ def parseNames(data, filename, context):
pass
def _estimate_names_units(entries, ctx, fname) -> int:
- ecopy = copy.deepcopy(entries)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- # Counts
- name_cnt = 0
- desc_cnt = 0
- profile_cnt = 0
- nickname_cnt = 0
- msg_cnt = 0
- notes_cnt = 0
-
note_regexes = [
(r"", False),
(r"", False),
@@ -892,7 +844,7 @@ def parseNames(data, filename, context):
(r"text:(.+)>", False),
]
- for entry in ecopy:
+ for entry in entries:
if not entry:
continue
nm = entry.get("name") or ""
@@ -900,19 +852,19 @@ def parseNames(data, filename, context):
nn = entry.get("nickname") or ""
pf = entry.get("profile") or ""
if ctx == "Actors":
- if nm: name_cnt += 1
- if nn: nickname_cnt += 1
- if pf: profile_cnt += 1
+ if nm: count += 1
+ if nn: count += 1
+ if pf: count += 1
elif ctx in ["Armors", "Weapons", "Items"]:
- if nm: name_cnt += 1
- if ds: desc_cnt += 1
+ if nm: count += 1
+ if ds: count += 1
elif ctx == "Skills":
- if nm: name_cnt += 1
- if ds: desc_cnt += 1
+ if nm: count += 1
+ if ds: count += 1
for k in range(1,5):
- if entry.get(f"message{k}"): msg_cnt += 1
+ if entry.get(f"message{k}"): count += 1
elif ctx in ["Enemies", "Classes", "MapInfos"]:
- if nm: name_cnt += 1
+ if nm: count += 1
# Notes counting
note = entry.get("note") or ""
@@ -927,28 +879,13 @@ def parseNames(data, filename, context):
s = m if isinstance(m, str) else (m[0] if m else "")
if "Client:" in s or "Client :" in s:
continue
- notes_cnt += 1
+ count += 1
else:
- notes_cnt += len(matches)
+ count += len(matches)
- # Simulate increments via wrapper (updates bar.n)
- if name_cnt:
- translateAI([""] * name_cnt, "", True)
- if desc_cnt:
- translateAI([""] * desc_cnt, "", True)
- if profile_cnt:
- translateAI([""] * profile_cnt, "", True)
- if nickname_cnt:
- translateAI([""] * nickname_cnt, "", True)
- if msg_cnt:
- translateAI([""] * msg_cnt, "", True)
- if notes_cnt:
- translateAI([""] * notes_cnt, "", True)
-
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_names_units(data, context, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -1001,24 +938,19 @@ def parseSS(data, filename):
pass
def _estimate_units(states, fname) -> int:
- scopy = copy.deepcopy(states)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- for ss in scopy:
- if ss is not None:
- try:
- searchSS(ss, bar)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for st in states:
+ if not st:
+ continue
+ if st.get("name"): count += 1
+ if st.get("description"): count += 1
+ for n in range(1,5):
+ if st.get(f"message{n}"): count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_units(data, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -1067,22 +999,24 @@ def parseSystem(data, filename):
pass
def _estimate_units(sysobj, fname) -> int:
- scopy = copy.deepcopy(sysobj)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- try:
- searchSystem(scopy, bar)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for term in sysobj.get("terms", {}) or {}:
+ termList = sysobj["terms"][term]
+ if isinstance(termList, list):
+ count += len(termList)
+ gt = sysobj.get("game_title")
+ if isinstance(gt, str) and gt:
+ count += 1
+ count += len(sysobj.get("variables", []) or [])
+ count += len(sysobj.get("weapon_types", []) or [])
+ count += len(sysobj.get("armor_types", []) or [])
+ count += len(sysobj.get("skill_types", []) or [])
+ count += len(sysobj.get("equip_types", []) or [])
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_units(data, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -1136,24 +1070,19 @@ def parseScenario(data, filename):
pass
def _estimate_units(scenario, fname) -> int:
- scopy = copy.deepcopy(scenario)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for key, lst in scopy.items():
- if lst is not None:
- try:
- searchCodes(lst, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for key, lst in scenario.items():
+ if lst is not None and "list" in lst:
+ for cmd in lst.get("list", []):
+ if cmd and "c" in cmd:
+ code = cmd["c"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0:
diff --git a/modules/rpgmakermvmz.py b/modules/rpgmakermvmz.py
index d27ec20..8575bb0 100644
--- a/modules/rpgmakermvmz.py
+++ b/modules/rpgmakermvmz.py
@@ -453,30 +453,15 @@ def parseMap(data, filename):
pass
def _estimate_map_units(d, fname) -> int:
- # Use a deep copy to avoid mutating real data during estimation
- dcopy = copy.deepcopy(d)
- bar = _CountingBar()
- # Temporarily enable preflight-count mode and route progress updates to our counter
- global PREFLIGHT_COUNT_MODE
- saved_preflight = PREFLIGHT_COUNT_MODE
- PREFLIGHT_COUNT_MODE = True
- global PBAR
- saved_pbar = PBAR
- PBAR = bar
+ # Avoid deep copy - just count items directly
+ count = 0
try:
# Count display name TL (1 unit if present)
- if "Map" in fname and isinstance(dcopy.get("displayName", None), str):
- try:
- translateAI(
- dcopy["displayName"],
- "Reply with only the " + LANGUAGE + " translation of the RPG location name",
- False,
- )
- except Exception:
- pass
+ if "Map" in fname and isinstance(d.get("displayName", None), str):
+ count += 1
- # Notes and pages
- evts = dcopy.get("events", []) or []
+ # Notes and pages - count actual translatable items
+ evts = d.get("events", []) or []
for evt in evts:
if not evt:
continue
@@ -484,56 +469,40 @@ def parseMap(data, filename):
if not isinstance(note_val, str):
note_val = str(note_val) if note_val is not None else ""
- # name translation
+ # Count note-based translations
if "" in note_val:
name_val = evt.get("name") or ""
if isinstance(name_val, str) and name_val:
- try:
- translateAI(
- name_val,
- "Reply with only the " + LANGUAGE + " translation of the RPG location name",
- False,
- )
- except Exception:
- pass
+ count += 1
- #
if "", False)
- except Exception:
- pass
+ matches = re.findall(r"", note_val, re.DOTALL)
+ count += len(matches)
- # , , handled before page processing in real run
if ".*")
- except Exception:
- pass
+ matches = re.findall(r".*", note_val)
+ count += len(matches)
if ".*")
- except Exception:
- pass
+ matches = re.findall(r".*", note_val)
+ count += len(matches)
- # Other note tags handled during main loop
- # We'll just invoke the normal search pass which will batch and call translateAI
+ # Count commands in pages (rough estimate)
for page in (evt.get("pages", []) or []):
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- # Ignore counting errors to avoid blocking
- pass
+ if page and "list" in page:
+ # Count translatable codes
+ for cmd in page.get("list", []):
+ if cmd and "code" in cmd:
+ code = cmd["code"]
+ # Count common translatable codes
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_preflight
- PBAR = saved_pbar
+ return count if count > 0 else 1
+ except Exception:
+ return 1
# Translate displayName for Map files
if "Map" in filename:
@@ -698,24 +667,19 @@ def parseCommonEvents(data, filename):
pass
def _estimate_units(pages, fname) -> int:
- dcopy = copy.deepcopy(pages)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for page in dcopy:
- if page is not None:
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for page in pages:
+ if page is not None and "list" in page:
+ for cmd in page.get("list", []):
+ if cmd and "code" in cmd:
+ code = cmd["code"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0:
@@ -765,27 +729,22 @@ def parseTroops(data, filename):
pass
def _estimate_units(troops, fname) -> int:
- tcopy = copy.deepcopy(troops)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for troop in tcopy:
+ for troop in troops:
if troop is None:
continue
for page in (troop.get("pages", []) or []):
- if page is not None:
- try:
- searchCodes(page, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ if page is not None and "list" in page:
+ for cmd in page.get("list", []):
+ if cmd and "code" in cmd:
+ code = cmd["code"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0:
@@ -836,22 +795,9 @@ def parseNames(data, filename, context):
pass
def _estimate_names_units(entries, ctx, fname) -> int:
- ecopy = copy.deepcopy(entries)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- # Count names/descriptions/profile/nickname
- name_cnt = 0
- desc_cnt = 0
- profile_cnt = 0
- nickname_cnt = 0
- msg_cnt = 0
- notes_cnt = 0
-
note_regexes = [
(r"", False),
(r"", False),
@@ -880,7 +826,7 @@ def parseNames(data, filename, context):
(r"text:(.+)>", False),
]
- for entry in ecopy:
+ for entry in entries:
if not entry:
continue
nm = entry.get("name") or ""
@@ -888,19 +834,19 @@ def parseNames(data, filename, context):
nn = entry.get("nickname") or ""
pf = entry.get("profile") or ""
if ctx == "Actors":
- if nm: name_cnt += 1
- if nn: nickname_cnt += 1
- if pf: profile_cnt += 1
+ if nm: count += 1
+ if nn: count += 1
+ if pf: count += 1
elif ctx in ["Armors", "Weapons", "Items"]:
- if nm: name_cnt += 1
- if ds: desc_cnt += 1
+ if nm: count += 1
+ if ds: count += 1
elif ctx == "Skills":
- if nm: name_cnt += 1
- if ds: desc_cnt += 1
+ if nm: count += 1
+ if ds: count += 1
for k in range(1,5):
- if entry.get(f"message{k}"): msg_cnt += 1
+ if entry.get(f"message{k}"): count += 1
elif ctx in ["Enemies", "Classes", "MapInfos"]:
- if nm: name_cnt += 1
+ if nm: count += 1
# Notes counting
note = entry.get("note") or ""
@@ -915,28 +861,13 @@ def parseNames(data, filename, context):
s = m if isinstance(m, str) else (m[0] if m else "")
if "Client:" in s or "Client :" in s:
continue
- notes_cnt += 1
+ count += 1
else:
- notes_cnt += len(matches)
+ count += len(matches)
- # Simulate increments via wrapper (updates bar.n)
- if name_cnt:
- translateAI([""] * name_cnt, "", True)
- if desc_cnt:
- translateAI([""] * desc_cnt, "", True)
- if profile_cnt:
- translateAI([""] * profile_cnt, "", True)
- if nickname_cnt:
- translateAI([""] * nickname_cnt, "", True)
- if msg_cnt:
- translateAI([""] * msg_cnt, "", True)
- if notes_cnt:
- translateAI([""] * notes_cnt, "", True)
-
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_names_units(data, context, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -989,24 +920,19 @@ def parseSS(data, filename):
pass
def _estimate_units(states, fname) -> int:
- scopy = copy.deepcopy(states)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- for ss in scopy:
- if ss is not None:
- try:
- searchSS(ss, bar)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for st in states:
+ if not st:
+ continue
+ if st.get("name"): count += 1
+ if st.get("description"): count += 1
+ for n in range(1,5):
+ if st.get(f"message{n}"): count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_units(data, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -1055,22 +981,24 @@ def parseSystem(data, filename):
pass
def _estimate_units(sysobj, fname) -> int:
- scopy = copy.deepcopy(sysobj)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count fields directly
+ count = 0
try:
- try:
- searchSystem(scopy, bar)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for term in sysobj.get("terms", {}) or {}:
+ termList = sysobj["terms"][term]
+ if isinstance(termList, list):
+ count += len(termList)
+ gt = sysobj.get("gameTitle")
+ if isinstance(gt, str) and gt:
+ count += 1
+ count += len(sysobj.get("variables", []) or [])
+ count += len(sysobj.get("weaponTypes", []) or [])
+ count += len(sysobj.get("armorTypes", []) or [])
+ count += len(sysobj.get("skillTypes", []) or [])
+ count += len(sysobj.get("equipTypes", []) or [])
+ return count if count > 0 else 1
+ except Exception:
+ return 1
total_units = _estimate_units(data, filename)
if not isinstance(total_units, int) or total_units <= 0:
@@ -1123,24 +1051,19 @@ def parseScenario(data, filename):
pass
def _estimate_units(scenario, fname) -> int:
- scopy = copy.deepcopy(scenario)
- bar = _CountingBar()
- global PREFLIGHT_COUNT_MODE, PBAR
- saved_flag = PREFLIGHT_COUNT_MODE
- saved_pbar = PBAR
- PREFLIGHT_COUNT_MODE = True
- PBAR = bar
+ # Avoid deep copy - just count commands directly
+ count = 0
try:
- for key, lst in scopy.items():
- if lst is not None:
- try:
- searchCodes(lst, bar, [], fname)
- except Exception:
- pass
- return getattr(bar, "n", 0) or 0
- finally:
- PREFLIGHT_COUNT_MODE = saved_flag
- PBAR = saved_pbar
+ for key, lst in scenario.items():
+ if lst is not None and "list" in lst:
+ for cmd in lst.get("list", []):
+ if cmd and "code" in cmd:
+ code = cmd["code"]
+ if code in [401, 405, 102, 122, 408, 355, 655, 356, 357, 320, 324, 325, 111, 108, 657]:
+ count += 1
+ return count if count > 0 else 1
+ except Exception:
+ return 1
totalLines = _estimate_units(data, filename)
if not isinstance(totalLines, int) or totalLines <= 0: