Skip to content

Commit

Permalink
SC2: Backport broken markup fix in /received output from the dev branch
Browse files Browse the repository at this point in the history
  • Loading branch information
Ziktofel committed Sep 16, 2024
1 parent d3e6d3f commit 4b57283
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
11 changes: 6 additions & 5 deletions worlds/sc2/Client.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
# CommonClient import first to trigger ModuleUpdater
from CommonClient import CommonContext, server_loop, ClientCommandProcessor, gui_enabled, get_base_parser
from Utils import init_logging, is_windows, async_start
from kvui import KivyJSONtoTextParser
from . import ItemNames, Options
from .ItemGroups import item_name_groups
from .Options import (
Expand Down Expand Up @@ -97,12 +98,12 @@ class ConfigurableOptionInfo(typing.NamedTuple):


class ColouredMessage:
def __init__(self, text: str = '') -> None:
def __init__(self, text: str = '', *, keep_markup: bool = False) -> None:
self.parts: typing.List[dict] = []
if text:
self(text)
def __call__(self, text: str) -> 'ColouredMessage':
add_json_text(self.parts, text)
self(text, keep_markup=keep_markup)
def __call__(self, text: str, *, keep_markup: bool = False) -> 'ColouredMessage':
add_json_text(self.parts, text, keep_markup=keep_markup)
return self
def coloured(self, text: str, colour: str) -> 'ColouredMessage':
add_json_text(self.parts, text, type="color", color=colour)
Expand All @@ -128,7 +129,7 @@ def formatted_print(self, text: str) -> None:
# Note(mm): Bold/underline can help readability, but unfortunately the CommonClient does not filter bold tags from command-line output.
# Regardless, using `on_print_json` to get formatted text in the GUI and output in the command-line and in the logs,
# without having to branch code from CommonClient
self.ctx.on_print_json({"data": [{"text": text}]})
self.ctx.on_print_json({"data": [{"text": text, "keep_markup": True}]})

def _cmd_difficulty(self, difficulty: str = "") -> bool:
"""Overrides the current difficulty set for the world. Takes the argument casual, normal, hard, or brutal"""
Expand Down
16 changes: 15 additions & 1 deletion worlds/sc2/ClientGui.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from typing import *
import asyncio

from kvui import GameManager, HoverBehavior, ServerToolTip
from NetUtils import JSONMessagePart
from kvui import GameManager, HoverBehavior, ServerToolTip, KivyJSONtoTextParser
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.tabbedpanel import TabbedPanelItem
Expand Down Expand Up @@ -69,6 +70,18 @@ class MissionLayout(GridLayout):
class MissionCategory(GridLayout):
pass


class SC2JSONtoKivyParser(KivyJSONtoTextParser):
def _handle_text(self, node: JSONMessagePart):
if node.get("keep_markup", False):
for ref in node.get("refs", []):
node["text"] = f"[ref={self.ref_count}|{ref}]{node['text']}[/ref]"
self.ref_count += 1
return super(KivyJSONtoTextParser, self)._handle_text(node)
else:
return super()._handle_text(node)


class SC2Manager(GameManager):
logging_pairs = [
("Client", "Archipelago"),
Expand All @@ -87,6 +100,7 @@ class SC2Manager(GameManager):

def __init__(self, ctx) -> None:
super().__init__(ctx)
self.json_to_kivy_parser = SC2JSONtoKivyParser(ctx)

def clear_tooltip(self) -> None:
if self.ctx.current_tooltip:
Expand Down

0 comments on commit 4b57283

Please sign in to comment.