Skip to content

Commit e3c8b12

Browse files
committed
Add parameter type parsing support for Register methods
1 parent bf579dd commit e3c8b12

File tree

2 files changed

+90
-55
lines changed

2 files changed

+90
-55
lines changed

docs/ElunaDoc/parser.py

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,15 @@ def __init__(self, name, description, tables, prototypes, parameters, returned):
8585
md_table += '| ' + ' | '.join(['---'] * len(table['columns'])) + ' |\n' # Separator
8686

8787
for row in table['values']:
88-
md_table += '| ' + ' | '.join(row) + ' |\n' # Rows
88+
md_row = '| '
89+
for value in row:
90+
if isinstance(value, dict):
91+
# If the value is a dictionary, format the values and preserve the type in the documentation
92+
md_row += self._format_dict_values(value)
93+
else:
94+
md_row += value
95+
md_row += ' | '
96+
md_table += md_row + '\n'
8997

9098
# Convert the generated Markdown table to HTML
9199
html_table = markdown.markdown(md_table, extensions=['tables'])
@@ -103,6 +111,17 @@ def __init__(self, name, description, tables, prototypes, parameters, returned):
103111
# If it has a description, it is "documented".
104112
self.documented = self.description != ''
105113

114+
"""Helper function to parse table dictionaries. Only used in Register methods for now."""
115+
def _format_dict_values(self, d):
116+
html_str = ""
117+
html_parts = []
118+
119+
for key, value in d.items():
120+
html_parts.append(f'<span title="{value}">{key}</span>')
121+
122+
html_str = ', '.join(html_parts)
123+
return html_str
124+
106125

107126
class MangosClassDoc(object):
108127
"""The documentation of a MaNGOS class that has Lua methods."""
@@ -150,7 +169,7 @@ class ClassParser(object):
150169
# Regular expressions for parsing a table.
151170
table_regex = re.compile(r"\s*\*\s@table")
152171
table_columns_regex = re.compile(r"\s*\*\s@columns\s*\[(.+)\]")
153-
table_values_regex = re.compile(r"\s*\*\s@values\s*\[(.+)\]")
172+
table_values_regex = re.compile(r"\s*\*\s@values\s*\[(.+?)\]")
154173

155174
param_regex = re.compile(r"""\s*\*\s@param\s # The @param tag starts with opt. whitespace followed by "* @param ".
156175
([^\s]+)\s(\w+)? # The data type, a space, and the name of the param.
@@ -212,11 +231,27 @@ def handle_table(self, line):
212231
def handle_table_columns(self, match):
213232
if self.tables:
214233
self.tables[-1]["columns"] = match.group(1).split(", ")
215-
234+
216235
def handle_table_values(self, match):
217236
if self.tables:
218-
values = re.findall(r'(?:[^,"]|"(?:\\.|[^"])*")+', match.group(1))
219-
self.tables[-1]["values"].append([v.strip(' "') for v in values])
237+
values = re.findall(r'(?:[^,<>"]|"(?:\\.|[^"])*"|<[^>]*>)+', match.group(1))
238+
processed_values = []
239+
240+
for value in values:
241+
stripped_value = value.strip(' "')
242+
# Parse the content inside < >
243+
if stripped_value.startswith("<") and stripped_value.endswith(">"):
244+
# Remove prefix and suffix
245+
inner_content = stripped_value[1:-1]
246+
247+
# Convert inner key-value pairs to a dict
248+
pair_regex = re.compile(r"(\w+):\s*([\w\s]+)")
249+
stripped_value = dict(pair_regex.findall(inner_content))
250+
251+
processed_values.append(stripped_value)
252+
253+
# Append the processed values to the last table
254+
self.tables[-1]["values"].append(processed_values)
220255

221256
def handle_param(self, match):
222257
data_type, name, default, description = match.group(1), match.group(2), match.group(3), match.group(4)

methods/TrinityCore/GlobalMethods.h

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -669,56 +669,56 @@ namespace LuaGlobalFunctions
669669
*
670670
* @table
671671
* @columns [ID, Event, State, Parameters, Comment]
672-
* @values [1, ON_CHARACTER_CREATE, "WORLD", "event, player", ""]
673-
* @values [2, ON_CHARACTER_DELETE, "WORLD", "event, guid", ""]
674-
* @values [3, ON_LOGIN, "WORLD", "event, player", ""]
675-
* @values [4, ON_LOGOUT, "WORLD", "event, player", ""]
676-
* @values [5, ON_SPELL_CAST, "MAP", "event, player, spell, skipCheck", ""]
677-
* @values [6, ON_KILL_PLAYER, "MAP", "event, killer, killed", ""]
678-
* @values [7, ON_KILL_CREATURE, "MAP", "event, killer, killed", ""]
679-
* @values [8, ON_KILLED_BY_CREATURE, "MAP", "event, killer, killed", ""]
680-
* @values [9, ON_DUEL_REQUEST, "MAP", "event, target, challenger", ""]
681-
* @values [10, ON_DUEL_START, "MAP", "event, player1, player2", ""]
682-
* @values [11, ON_DUEL_END, "MAP", "event, winner, loser, type", ""]
683-
* @values [12, ON_GIVE_XP, "MAP", "event, player, amount, victim", "Can return new XP amount"]
684-
* @values [13, ON_LEVEL_CHANGE, "MAP", "event, player, oldLevel", ""]
685-
* @values [14, ON_MONEY_CHANGE, "MAP", "event, player, amount", "Can return new money amount"]
686-
* @values [15, ON_REPUTATION_CHANGE, "MAP", "event, player, factionId, standing, incremental", "Can return new standing"]
687-
* @values [16, ON_TALENTS_CHANGE, "MAP", "event, player, points", ""]
688-
* @values [17, ON_TALENTS_RESET, "MAP", "event, player, noCost", ""]
689-
* @values [18, ON_CHAT, "WORLD", "event, player, msg, Type, lang", "Can return false, newMessage"]
690-
* @values [19, ON_WHISPER, "WORLD", "event, player, msg, Type, lang, receiver", "Can return false, newMessage"]
691-
* @values [20, ON_GROUP_CHAT, "WORLD", "event, player, msg, Type, lang, group", "Can return false, newMessage"]
692-
* @values [21, ON_GUILD_CHAT, "WORLD", "event, player, msg, Type, lang, guild", "Can return false, newMessage"]
693-
* @values [22, ON_CHANNEL_CHAT, "WORLD", "event, player, msg, Type, lang, channel", "Can return false, newMessage"]
694-
* @values [23, ON_EMOTE, "MAP", "event, player, emote", "Not triggered on any known emote"]
695-
* @values [24, ON_TEXT_EMOTE, "MAP", "event, player, textEmote, emoteNum, guid", ""]
696-
* @values [25, ON_SAVE, "MAP", "event, player", ""]
697-
* @values [26, ON_BIND_TO_INSTANCE, "MAP", "event, player, difficulty, mapid, permanent", ""]
698-
* @values [27, ON_UPDATE_ZONE, "MAP", "event, player, newZone, newArea", ""]
699-
* @values [28, ON_MAP_CHANGE, "MAP", "event, player", ""]
700-
* @values [29, ON_EQUIP, "MAP", "event, player, item, bag, slot", ""]
701-
* @values [30, ON_FIRST_LOGIN, "WORLD", "event, player", ""]
702-
* @values [31, ON_CAN_USE_ITEM, "MAP", "event, player, itemEntry", "Can return InventoryResult enum value"]
703-
* @values [32, ON_LOOT_ITEM, "MAP", "event, player, item, count", ""]
704-
* @values [33, ON_ENTER_COMBAT, "MAP", "event, player, enemy", ""]
705-
* @values [34, ON_LEAVE_COMBAT, "MAP", "event, player", ""]
706-
* @values [35, ON_REPOP, "MAP", "event, player", ""]
707-
* @values [36, ON_RESURRECT, "MAP", "event, player", ""]
708-
* @values [37, ON_LOOT_MONEY, "MAP", "event, player, amount", ""]
709-
* @values [38, ON_QUEST_ABANDON, "MAP", "event, player, questId", ""]
710-
* @values [39, ON_LEARN_TALENTS, "MAP", "event, player, talentId, talentRank, spellid", ""]
711-
* @values [40, ON_ENVIRONMENTAL_DEATH, "MAP", "event, player, environmentalDamageType", ""]
712-
* @values [41, ON_TRADE_ACCEPT, "MAP", "event, player, target", "Can return false to interrupt trade"]
713-
* @values [42, ON_COMMAND, "MAP", "event, player, command", "Player is nil if command used from console. Can return false"]
714-
* @values [43, ON_SKILL_CHANGE, "MAP", "event, player, skillId, skillValue", "Returns new skill level value"]
715-
* @values [44, ON_LEARN_SPELL, "MAP", "event, player, spellId", ""]
716-
* @values [45, ON_ACHIEVEMENT_COMPLETE, "MAP", "event, player, achievementId", ""]
717-
* @values [46, ON_DISCOVER_AREA, "MAP", "event, player, area", ""]
718-
* @values [47, ON_UPDATE_AREA, "MAP", "event, player, oldArea, newArea", ""]
719-
* @values [48, ON_TRADE_INIT, "MAP", "event, player, target", "Can return false to interrupt trade"]
720-
* @values [49, ON_SEND_MAIL, "MAP", "event, player, recipientGuid", "Can return false to interrupt sending"]
721-
* @values [54, ON_QUEST_STATUS_CHANGED, "MAP", "event, player, questId, status", ""]
672+
* @values [1, ON_CHARACTER_CREATE, "WORLD", <event: Number, player: Player>, ""] -
673+
* @values [2, ON_CHARACTER_DELETE, "WORLD", <event: Number, guidLow: Number>, ""] -
674+
* @values [3, ON_LOGIN, "WORLD", <event: Number, player: Player>, ""] -
675+
* @values [4, ON_LOGOUT, "WORLD", <event: Number, player: Player>, ""] -
676+
* @values [5, ON_SPELL_CAST, "MAP", <event: Number, player: Player, spell: Spell, skipCheck: Boolean>, ""] -
677+
* @values [6, ON_KILL_PLAYER, "MAP", <event: Number, killer: Player, killed: Player>, ""] -
678+
* @values [7, ON_KILL_CREATURE, "MAP", <event: Number, killer: Player, killed: Creature>, ""] -
679+
* @values [8, ON_KILLED_BY_CREATURE, "MAP", <event: Number, killer: Creature, killed: Player>, ""] -
680+
* @values [9, ON_DUEL_REQUEST, "MAP", <event: Number, target: Player, challenger: Player>, ""]-
681+
* @values [10, ON_DUEL_START, "MAP", <event: Number, player1: Player, player2: Player>, ""] -
682+
* @values [11, ON_DUEL_END, "MAP", <event: Number, winner: Player, loser: Player, type: Number>, ""] -
683+
* @values [12, ON_GIVE_XP, "MAP", <event: Number, player: Player, amount: Number, victim: Unit>, "Can return new XP amount"] -
684+
* @values [13, ON_LEVEL_CHANGE, "MAP", <event: Number, player: Player, oldLevel: Number>, ""] -
685+
* @values [14, ON_MONEY_CHANGE, "MAP", <event: Number, player: Player, amount: Number>, "Can return new money amount"]
686+
* @values [15, ON_REPUTATION_CHANGE, "MAP", <event: Number, player: Player, factionId: Number, standing: Number, incremental: Boolean>, "Can return new standing"]
687+
* @values [16, ON_TALENTS_CHANGE, "MAP", <event: Number, player: Player, points: Number>, ""]
688+
* @values [17, ON_TALENTS_RESET, "MAP", <event: Number, player: Player, noCost: Boolean>, ""]
689+
* @values [18, ON_CHAT, "WORLD", <event: Number, player: Player, msg: String, Type: Number, lang: Number>, "Can return false, newMessage"]
690+
* @values [19, ON_WHISPER, "WORLD", <event: Number, player: Player, msg: String, Type: Number, lang: Number, receiver: Player>, "Can return false, newMessage"]
691+
* @values [20, ON_GROUP_CHAT, "WORLD", <event: Number, player: Player, msg: String, Type: Number, lang: Number, group: Group>, "Can return false, newMessage"]
692+
* @values [21, ON_GUILD_CHAT, "WORLD", <event: Number, player: Player, msg: String, Type: Number, lang: Number, guild: Guild>, "Can return false, newMessage"]
693+
* @values [22, ON_CHANNEL_CHAT, "WORLD", <event: Number, player: Player, msg: String, Type: Number, lang: Number, channel: Number>, "Can return false, newMessage"]
694+
* @values [23, ON_EMOTE, "MAP", <event: Number, player: Player, emote: Number>, "Not triggered on any known emote"]
695+
* @values [24, ON_TEXT_EMOTE, "MAP", <event: Number, player: Player, textEmote: Number, emoteNum: Number, guid: Number>, ""]
696+
* @values [25, ON_SAVE, "MAP", <event: Number, player: Player>, ""] -
697+
* @values [26, ON_BIND_TO_INSTANCE, "MAP", <event: Number, player: Player, difficulty: Number, mapid: Number, permanent: Boolean>, ""]
698+
* @values [27, ON_UPDATE_ZONE, "MAP", <event: Number, player: Player, newZone: Number, newArea: Number>, ""]
699+
* @values [28, ON_MAP_CHANGE, "MAP", <event: Number, player: Player>, ""] -
700+
* @values [29, ON_EQUIP, "MAP", <event: Number, player: Player, item: Item, bag: Number, slot: Number>, ""]
701+
* @values [30, ON_FIRST_LOGIN, "WORLD", <event: Number, player: Player>, ""] -
702+
* @values [31, ON_CAN_USE_ITEM, "MAP", <event: Number, player: Player, itemEntry: Number>, "Can return InventoryResult enum value"]
703+
* @values [32, ON_LOOT_ITEM, "MAP", <event: Number, player: Player, item: Item, count: Number>, ""]
704+
* @values [33, ON_ENTER_COMBAT, "MAP", <event: Number, player: Player, enemy: Unit>, ""]
705+
* @values [34, ON_LEAVE_COMBAT, "MAP", <event: Number, player: Player>, ""] -
706+
* @values [35, ON_REPOP, "MAP", <event: Number, player: Player>, ""] -
707+
* @values [36, ON_RESURRECT, "MAP", <event: Number, player: Player>, ""] -
708+
* @values [37, ON_LOOT_MONEY, "MAP", <event: Number, player: Player, amount: Number>, ""]
709+
* @values [38, ON_QUEST_ABANDON, "MAP", <event: Number, player: Player, questId: Number>, ""]
710+
* @values [39, ON_LEARN_TALENTS, "MAP", <event: Number, player: Player, talentId: Number, talentRank: Number, spellid: Number>, ""]
711+
* @values [40, ON_ENVIRONMENTAL_DEATH, "MAP", <event: Number, player: Player, environmentalDamageType: Number>, ""]
712+
* @values [41, ON_TRADE_ACCEPT, "MAP", <event: Number, player: Player, target: Player>, "Can return false to interrupt trade"]
713+
* @values [42, ON_COMMAND, "MAP", <event: Number, player: Player, command: String>, "Player is nil if command used from console. Can return false"]
714+
* @values [43, ON_SKILL_CHANGE, "MAP", <event: Number, player: Player, skillId: Number, skillValue: Number>, "Returns new skill level value"]
715+
* @values [44, ON_LEARN_SPELL, "MAP", <event: Number, player: Player, spellId: Number>, ""]
716+
* @values [45, ON_ACHIEVEMENT_COMPLETE, "MAP", <event: Number, player: Player, achievementId: Number>, ""]
717+
* @values [46, ON_DISCOVER_AREA, "MAP", <event: Number, player: Player, area: Number>, ""]
718+
* @values [47, ON_UPDATE_AREA, "MAP", <event: Number, player: Player, oldArea: Number, newArea: Number>, ""]
719+
* @values [48, ON_TRADE_INIT, "MAP", <event: Number, player: Player, target: Player>, "Can return false to interrupt trade"]
720+
* @values [49, ON_SEND_MAIL, "MAP", <event: Number, player: Player, recipientGuid: Number>, "Can return false to interrupt sending"]
721+
* @values [54, ON_QUEST_STATUS_CHANGED, "MAP", <event: Number, player: Player, questId: Number, status: Number>, ""] -
722722
*
723723
* @proto cancel = (event, function)
724724
* @proto cancel = (event, function, shots)

0 commit comments

Comments
 (0)