Skip to content

Commit c25627c

Browse files
authored
Merge pull request #9 from absdf15/main
fix(renderer): fixed the issue where commands were being rendered as …
2 parents baed40f + 1cc281c commit c25627c

File tree

3 files changed

+49
-14
lines changed

3 files changed

+49
-14
lines changed

src/diceutils/renderer/_models.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,33 +129,45 @@ def split_and_label(text: str) -> Dict[str, str]:
129129
def parse_message(message: Message, config: ExportConfig) -> Optional[Message]:
130130
elements = message.elements
131131

132-
if len(elements) == 0:
132+
if ele_len := len(elements) == 0:
133133
return None
134134

135135
if config.dice_command_filter and message.role == -1:
136136
return None
137137

138-
if len(elements) == 1 and isinstance(elements[0], Image):
138+
if ele_len == 1 and isinstance(elements[0], Image):
139139
return message if config.display_image else None
140140

141141
ele_iter = iter(elements)
142142
first_ele = next(ele_iter)
143-
is_external_comment = first_ele.content.startswith(("(", "("))
144143
is_text = isinstance(first_ele, Text)
144+
is_external_comment = first_ele.content.startswith(("(", "("))
145+
145146
if config.external_comment_filter and is_text and is_external_comment:
146147
return None
148+
149+
is_command = first_ele.content.startswith((".", "。", "/"))
150+
151+
if config.dice_command_filter and is_text and is_command:
152+
return None
147153

148-
if is_text and is_external_comment:
149-
first_ele.set_tag("outside")
150-
for ele in ele_iter:
151-
if isinstance(ele, Text):
152-
ele.set_tag("outside")
153-
return message
154-
155-
new_elements = []
156154
if is_text:
157-
for text, tag in Renderer.split_and_label(first_ele.content).items():
158-
new_elements.append(Text(text, tag))
155+
if is_external_comment:
156+
first_ele.set_tag("outside")
157+
for ele in ele_iter:
158+
if isinstance(ele, Text):
159+
ele.set_tag("outside")
160+
return message
161+
elif is_command:
162+
first_ele.set_tag("command")
163+
for ele in ele_iter:
164+
if isinstance(ele, Text):
165+
ele.set_tag("command")
166+
return message
167+
else:
168+
new_elements = []
169+
for text, tag in Renderer.split_and_label(first_ele.content).items():
170+
new_elements.append(Text(text, tag))
159171

160172
for ele in ele_iter:
161173
if isinstance(ele, Text):

src/diceutils/renderer/html.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ def _render_act(self, element: Element, is_first: bool = False):
161161

162162
def _render_dicer(self, element: Element) -> str:
163163
return f"<span>{element.content}</span>"
164+
165+
def _render_command(self, element: Element) -> str:
166+
return f"<span>{element.content}</span>"
164167

165168
def _render_speak(self, element: Element) -> str:
166169
content = "“" + element.content.strip('"“”') + "”"
@@ -193,6 +196,8 @@ def render_message(self, message: Message) -> None:
193196
text += self._render_outside(element)
194197
elif element.tag == "speak":
195198
text += self._render_speak(element)
199+
elif element.tag == "command":
200+
text += self._render_command(element)
196201
text += f'<span class="tooltiptext">{message.date}</span></p></div>'
197202
text += "\n</div>"
198203
self.plain_text += text

tests/test_renderer.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,27 @@ def test_render():
1616
},
1717
{"type": "image", "data": {"url": "http://a.com/2.png"}},
1818
]
19+
msg_content_3 = [
20+
{
21+
"type": "text",
22+
"data": {
23+
"text": ".rd10*5"
24+
}
25+
}
26+
]
27+
msg_content_4 = [
28+
{
29+
"type": "text",
30+
"data": {
31+
"text": "[苏向夜]掷骰: 1D10*5={10}*5=50"
32+
}
33+
}
34+
]
1935
messages.add_message("230234235", Role.GM, "苏向夜", "date", msg_content_1)
2036
messages.add_message("130324324", Role.PL, "少年狐", "date", msg_content_1)
2137
messages.add_message("120232412", Role.PL, "Aruvelut", "date", msg_content_2)
38+
messages.add_message("230234235", Role.GM, "苏向夜", "date", msg_content_3)
39+
messages.add_message("3371047314", Role.DICER, "骰娘", "date", msg_content_4)
2240
messages.add_message(
2341
"130232542",
2442
Role.OB,
@@ -30,4 +48,4 @@ def test_render():
3048
)
3149

3250
renderer = Renderer.render(messages, HTMLRenderer())
33-
renderer.export("测试")
51+
renderer.export("测试")

0 commit comments

Comments
 (0)