Skip to content

Commit 0f08691

Browse files
committed
Fix(visualizer): Remove colons and newlines from mermaid labels to fix syntax error
1 parent 862183d commit 0f08691

5 files changed

Lines changed: 434 additions & 59 deletions

File tree

Mythril.Blazor/wwwroot/data/content_graph.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,7 +2400,7 @@
24002400
{
24012401
"id": "recipe_refine_fire_basic_gem_fire_i",
24022402
"type": "Refinement",
2403-
"name": "Refine Fire: Fire I",
2403+
"name": "Refine Fire - Fire I",
24042404
"data": {
24052405
"primary_stat": "Magic"
24062406
},
@@ -2427,7 +2427,7 @@
24272427
{
24282428
"id": "recipe_refine_fire_iron_ore_fire_i",
24292429
"type": "Refinement",
2430-
"name": "Refine Fire: Fire I",
2430+
"name": "Refine Fire - Fire I",
24312431
"data": {
24322432
"primary_stat": "Magic"
24332433
},
@@ -2454,7 +2454,7 @@
24542454
{
24552455
"id": "recipe_refine_ice_mana_leaf_ice_i",
24562456
"type": "Refinement",
2457-
"name": "Refine Ice: Ice I",
2457+
"name": "Refine Ice - Ice I",
24582458
"data": {
24592459
"primary_stat": "Magic"
24602460
},
@@ -2481,7 +2481,7 @@
24812481
{
24822482
"id": "recipe_refine_ice_moonberry_ice_i",
24832483
"type": "Refinement",
2484-
"name": "Refine Ice: Ice I",
2484+
"name": "Refine Ice - Ice I",
24852485
"data": {
24862486
"primary_stat": "Magic"
24872487
},
@@ -2508,7 +2508,7 @@
25082508
{
25092509
"id": "recipe_refine_wood_log_herb",
25102510
"type": "Refinement",
2511-
"name": "Refine Wood: Herb",
2511+
"name": "Refine Wood - Herb",
25122512
"data": {
25132513
"primary_stat": "Strength"
25142514
},
@@ -2535,7 +2535,7 @@
25352535
{
25362536
"id": "recipe_refine_mixology_herb_potion",
25372537
"type": "Refinement",
2538-
"name": "Refine Mixology: Potion",
2538+
"name": "Refine Mixology - Potion",
25392539
"data": {
25402540
"primary_stat": "Strength"
25412541
},
@@ -2562,7 +2562,7 @@
25622562
{
25632563
"id": "recipe_refine_scrap_web_gold",
25642564
"type": "Refinement",
2565-
"name": "Refine Scrap: Gold",
2565+
"name": "Refine Scrap - Gold",
25662566
"data": {
25672567
"primary_stat": "Speed"
25682568
},
@@ -2589,7 +2589,7 @@
25892589
{
25902590
"id": "recipe_refine_scrap_slime_gold",
25912591
"type": "Refinement",
2592-
"name": "Refine Scrap: Gold",
2592+
"name": "Refine Scrap - Gold",
25932593
"data": {
25942594
"primary_stat": "Speed"
25952595
},
@@ -2616,7 +2616,7 @@
26162616
{
26172617
"id": "recipe_refine_life_ancient_bark_cure_i",
26182618
"type": "Refinement",
2619-
"name": "Refine Life: Cure I",
2619+
"name": "Refine Life - Cure I",
26202620
"data": {
26212621
"primary_stat": "Magic"
26222622
},
@@ -2643,7 +2643,7 @@
26432643
{
26442644
"id": "recipe_refine_lightning_fire_shard_lightning_i",
26452645
"type": "Refinement",
2646-
"name": "Refine Lightning: Lightning I",
2646+
"name": "Refine Lightning - Lightning I",
26472647
"data": {
26482648
"primary_stat": "Magic"
26492649
},
@@ -2670,7 +2670,7 @@
26702670
{
26712671
"id": "recipe_refine_lightning_ice_shard_lightning_i",
26722672
"type": "Refinement",
2673-
"name": "Refine Lightning: Lightning I",
2673+
"name": "Refine Lightning - Lightning I",
26742674
"data": {
26752675
"primary_stat": "Magic"
26762676
},
@@ -2697,7 +2697,7 @@
26972697
{
26982698
"id": "recipe_refine_earth_crystal_shards_earth_i",
26992699
"type": "Refinement",
2700-
"name": "Refine Earth: Earth I",
2700+
"name": "Refine Earth - Earth I",
27012701
"data": {
27022702
"primary_stat": "Strength"
27032703
},
@@ -2724,7 +2724,7 @@
27242724
{
27252725
"id": "recipe_refine_water_blue_coral_water_i",
27262726
"type": "Refinement",
2727-
"name": "Refine Water: Water I",
2727+
"name": "Refine Water - Water I",
27282728
"data": {
27292729
"primary_stat": "Speed"
27302730
},
@@ -2751,7 +2751,7 @@
27512751
{
27522752
"id": "recipe_refine_haste_lost_parchment_haste_i",
27532753
"type": "Refinement",
2754-
"name": "Refine Haste: Haste I",
2754+
"name": "Refine Haste - Haste I",
27552755
"data": {
27562756
"primary_stat": "Magic"
27572757
},

output/graph_visualizer.html

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -173,21 +173,21 @@ <h2 style="margin:0; font-size: 1.2em;">Mythril Content Graph</h2>
173173
cadence_geologist["Geologist"]:::cadence
174174
cadence_tide_caller["Tide-Caller"]:::cadence
175175
cadence_slayer["Slayer"]:::cadence
176-
recipe_refine_fire_basic_gem_fire_i["Refine Fire: Fire I"]:::refinement
177-
recipe_refine_fire_iron_ore_fire_i["Refine Fire: Fire I"]:::refinement
178-
recipe_refine_ice_mana_leaf_ice_i["Refine Ice: Ice I"]:::refinement
179-
recipe_refine_ice_moonberry_ice_i["Refine Ice: Ice I"]:::refinement
180-
recipe_refine_wood_log_herb["Refine Wood: Herb"]:::refinement
181-
recipe_refine_mixology_herb_potion["Refine Mixology: Potion"]:::refinement
182-
recipe_refine_scrap_web_gold["Refine Scrap: Gold"]:::refinement
183-
recipe_refine_scrap_slime_gold["Refine Scrap: Gold"]:::refinement
184-
recipe_refine_life_ancient_bark_cure_i["Refine Life: Cure I"]:::refinement
185-
recipe_refine_lightning_fire_shard_lightning_i["Refine Lightning: Lightning I"]:::refinement
186-
recipe_refine_lightning_ice_shard_lightning_i["Refine Lightning: Lightning I"]:::refinement
187-
recipe_refine_earth_crystal_shards_earth_i["Refine Earth: Earth I"]:::refinement
188-
recipe_refine_water_blue_coral_water_i["Refine Water: Water I"]:::refinement
189-
recipe_refine_haste_lost_parchment_haste_i["Refine Haste: Haste I"]:::refinement
190-
subgraph "Location: Village"
176+
recipe_refine_fire_basic_gem_fire_i["Refine Fire - Fire I"]:::refinement
177+
recipe_refine_fire_iron_ore_fire_i["Refine Fire - Fire I"]:::refinement
178+
recipe_refine_ice_mana_leaf_ice_i["Refine Ice - Ice I"]:::refinement
179+
recipe_refine_ice_moonberry_ice_i["Refine Ice - Ice I"]:::refinement
180+
recipe_refine_wood_log_herb["Refine Wood - Herb"]:::refinement
181+
recipe_refine_mixology_herb_potion["Refine Mixology - Potion"]:::refinement
182+
recipe_refine_scrap_web_gold["Refine Scrap - Gold"]:::refinement
183+
recipe_refine_scrap_slime_gold["Refine Scrap - Gold"]:::refinement
184+
recipe_refine_life_ancient_bark_cure_i["Refine Life - Cure I"]:::refinement
185+
recipe_refine_lightning_fire_shard_lightning_i["Refine Lightning - Lightning I"]:::refinement
186+
recipe_refine_lightning_ice_shard_lightning_i["Refine Lightning - Lightning I"]:::refinement
187+
recipe_refine_earth_crystal_shards_earth_i["Refine Earth - Earth I"]:::refinement
188+
recipe_refine_water_blue_coral_water_i["Refine Water - Water I"]:::refinement
189+
recipe_refine_haste_lost_parchment_haste_i["Refine Haste - Haste I"]:::refinement
190+
subgraph "Location - Village"
191191
quest_prologue["Prologue"]:::root
192192
quest_tutorial_section["Tutorial Section"]:::quest
193193
quest_visit_starting_town["Visit Starting Town"]:::quest
@@ -198,98 +198,98 @@ <h2 style="margin:0; font-size: 1.2em;">Mythril Content Graph</h2>
198198
quest_learn_about_the_mines["Learn about the Mines"]:::quest
199199
quest_sell_gem["Sell Gem"]:::quest
200200
end
201-
subgraph "Location: Sun-drenched Plains"
201+
subgraph "Location - Sun-drenched Plains"
202202
quest_hunt_goblins["Hunt Goblins"]:::quest
203203
quest_hunt_slimes["Hunt Slimes"]:::quest
204204
quest_hunt_sand_sharks["Hunt Sand-Sharks"]:::quest
205205
quest_locate_the_hidden_oasis["Locate the Hidden Oasis"]:::quest
206206
end
207-
subgraph "Location: Greenwood Forest"
207+
subgraph "Location - Greenwood Forest"
208208
quest_chop_wood["Chop Wood"]:::quest
209209
quest_hunt_spiders["Hunt Spiders"]:::quest
210210
quest_gather_moonberries["Gather Moonberries"]:::quest
211211
end
212-
subgraph "Location: Deep Mines"
212+
subgraph "Location - Deep Mines"
213213
quest_hunt_bats["Hunt Bats"]:::quest
214214
quest_unlock_mining["Unlock Mining"]:::quest
215215
end
216-
subgraph "Location: Forgotten Mines"
216+
subgraph "Location - Forgotten Mines"
217217
quest_mine_iron_ore["Mine Iron Ore"]:::quest
218218
quest_scavenge_scrap["Scavenge Scrap"]:::quest
219219
quest_power_the_forge["Power the Forge"]:::quest
220220
end
221-
subgraph "Location: Dark Forest"
221+
subgraph "Location - Dark Forest"
222222
quest_defeat_treant_guardian["Defeat Treant Guardian"]:::quest
223223
quest_help_the_lumberjack["Help the lumberjack"]:::quest
224224
end
225-
subgraph "Location: Ancient Ruins"
225+
subgraph "Location - Ancient Ruins"
226226
quest_ancient_inscriptions["Ancient Inscriptions"]:::quest
227227
quest_finding_the_hearth["Finding the Hearth"]:::quest
228228
quest_rekindling_the_spark["Rekindling the Spark"]:::quest
229229
end
230-
subgraph "Location: Sacred Grove"
230+
subgraph "Location - Sacred Grove"
231231
quest_purify_the_grove["Purify the Grove"]:::quest
232232
end
233-
subgraph "Location: Crystal Peaks"
233+
subgraph "Location - Crystal Peaks"
234234
quest_shatter_the_crystals["Shatter the Crystals"]:::quest
235235
quest_high_altitude_survey["High Altitude Survey"]:::quest
236236
end
237-
subgraph "Location: Tidal Caverns"
237+
subgraph "Location - Tidal Caverns"
238238
quest_harvest_sea_life["Harvest Sea-Life"]:::quest
239239
quest_deep_sea_scavenge["Deep Sea Scavenge"]:::quest
240240
end
241-
subgraph "Location: Ancient Library"
241+
subgraph "Location - Ancient Library"
242242
quest_archive_sifting["Archive Sifting"]:::quest
243243
quest_study_ancient_texts["Study Ancient Texts"]:::quest
244244
end
245-
subgraph "Location: Mythril Sanctum"
245+
subgraph "Location - Mythril Sanctum"
246246
quest_defeat_the_mythril_construct["Defeat the Mythril Construct"]:::quest
247247
quest_ascetic_meditation["Ascetic Meditation"]:::quest
248248
quest_heavy_training["Heavy Training"]:::quest
249249
end
250-
subgraph "Cadence: Student"
250+
subgraph "Cadence - Student"
251251
ability_autoquest_i["AutoQuest I"]:::ability
252252
ability_refine_fire["Refine Fire"]:::ability
253253
ability_j_speed["J-Speed"]:::ability
254254
end
255-
subgraph "Cadence: Recruit"
255+
subgraph "Cadence - Recruit"
256256
ability_j_str["J-Str"]:::ability
257257
end
258-
subgraph "Cadence: Arcanist"
258+
subgraph "Cadence - Arcanist"
259259
ability_refine_ice["Refine Ice"]:::ability
260260
ability_j_magic["J-Magic"]:::ability
261261
ability_magic_pocket_i["Magic Pocket I"]:::ability
262262
ability_refine_lightning["Refine Lightning"]:::ability
263263
end
264-
subgraph "Cadence: Apprentice"
264+
subgraph "Cadence - Apprentice"
265265
ability_refine_wood["Refine Wood"]:::ability
266266
ability_refine_scrap["Refine Scrap"]:::ability
267267
ability_refine_mixology["Refine Mixology"]:::ability
268268
end
269-
subgraph "Cadence: Mythril Weaver"
269+
subgraph "Cadence - Mythril Weaver"
270270
ability_logistics_i["Logistics I"]:::ability
271271
ability_mass_refine["Mass Refine"]:::ability
272272
ability_essence_harvest["Essence Harvest"]:::ability
273273
ability_refine_life["Refine Life"]:::ability
274274
end
275-
subgraph "Cadence: The Sentinel"
275+
subgraph "Cadence - The Sentinel"
276276
ability_j_vit["J-Vit"]:::ability
277277
ability_magic_pocket_ii["Magic Pocket II"]:::ability
278278
end
279-
subgraph "Cadence: Scholar"
279+
subgraph "Cadence - Scholar"
280280
ability_logistics_ii["Logistics II"]:::ability
281281
ability_autoquest_ii["AutoQuest II"]:::ability
282282
ability_refine_haste["Refine Haste"]:::ability
283283
end
284-
subgraph "Cadence: Geologist"
284+
subgraph "Cadence - Geologist"
285285
ability_mountain_crush["Mountain Crush"]:::ability
286286
ability_refine_earth["Refine Earth"]:::ability
287287
end
288-
subgraph "Cadence: Tide-Caller"
288+
subgraph "Cadence - Tide-Caller"
289289
ability_deep_dive["Deep Dive"]:::ability
290290
ability_refine_water["Refine Water"]:::ability
291291
end
292-
subgraph "Cadence: Slayer"
292+
subgraph "Cadence - Slayer"
293293
ability_master_slayer["Master Slayer"]:::ability
294294
end
295295
quest_prologue -->|Requires| quest_tutorial_section

scripts/export_graph_mermaid.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,12 @@ def generate_mermaid():
5151
edge_lines = []
5252

5353
for node in nodes:
54-
nid = node["id"]
54+
nid = node["id"].strip()
5555
ntype = node["type"]
56-
name = node["name"]
56+
# Rigorous cleaning
57+
raw_name = node["name"].replace('"', "'").replace(":", "-")
58+
name = "".join(c for c in raw_name if c.isprintable() or c == " ")
59+
name = " ".join(name.split()).strip()
5760

5861
# IGNORE GOLD
5962
if nid == "item_gold":
@@ -62,15 +65,19 @@ def generate_mermaid():
6265
style = ntype.lower()
6366
if nid == "quest_prologue": style = "root"
6467

65-
node_def = f'{nid}["{name.replace('"', "'")}"]:::{style}'
68+
node_def = f'{nid}["{name}"]:::{style}'
6669

6770
# Assign to group
6871
if ntype == "Quest" and nid in location_map:
69-
loc = location_map[nid]
72+
raw_loc = location_map[nid].replace(":", "-")
73+
loc = "".join(c for c in raw_loc if c.isprintable() or c == " ")
74+
loc = " ".join(loc.split()).strip()
7075
if loc not in by_location: by_location[loc] = []
7176
by_location[loc].append(node_def)
7277
elif ntype == "Ability" and nid in cadence_map:
73-
cad = cadence_map[nid]
78+
raw_cad = cadence_map[nid].replace(":", "-")
79+
cad = "".join(c for c in raw_cad if c.isprintable() or c == " ")
80+
cad = " ".join(cad.split()).strip()
7481
if cad not in by_cadence: by_cadence[cad] = []
7582
by_cadence[cad].append(node_def)
7683
else:
@@ -123,12 +130,12 @@ def generate_mermaid():
123130
lines.append(node_def)
124131

125132
for loc, nodes_in_loc in by_location.items():
126-
lines.append(f'subgraph "Location: {loc}"')
133+
lines.append(f'subgraph "Location - {loc}"')
127134
lines.extend(nodes_in_loc)
128135
lines.append("end")
129136

130137
for cad, nodes_in_cad in by_cadence.items():
131-
lines.append(f'subgraph "Cadence: {cad}"')
138+
lines.append(f'subgraph "Cadence - {cad}"')
132139
lines.extend(nodes_in_cad)
133140
lines.append("end")
134141

@@ -137,4 +144,9 @@ def generate_mermaid():
137144
return "\n".join(lines)
138145

139146
if __name__ == "__main__":
140-
print(generate_mermaid())
147+
mermaid = generate_mermaid()
148+
if len(sys.argv) > 1:
149+
with open(sys.argv[1], 'w', encoding='utf-8') as f:
150+
f.write(mermaid)
151+
else:
152+
print(mermaid)

scripts/migrate_to_graph.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def migrate():
195195
# Let's create Recipe Nodes linked to the Ability.
196196

197197
for recipe in ref["Recipes"]:
198-
r_name = f"{ref['Ability']}: {recipe['OutputItem']}"
198+
r_name = f"{ref['Ability']} - {recipe['OutputItem']}"
199199
# Unique ID including input item to avoid collisions for multiple recipes for same ability/output
200200
r_id = generate_id("recipe", f"{ref['Ability']}_{recipe['InputItem']}_{recipe['OutputItem']}")
201201

0 commit comments

Comments
 (0)