@@ -162,12 +162,21 @@ impl GodotXmlDocs {
162162 } ;
163163
164164 // TODO reuse regex across classes
165+ // Note: there are still a few special cases, such as:
166+ // * OK and ERR_CANT_CREATE (corresponding Result.Ok() and GodotError.ERR_CANT_CREATE)
165167
166168 // Covers:
167169 // * [url=U]text[/url]
168170 // * [url=U][/url]
169171 let url_regex = Regex :: new ( "\\ [url=(.+?)](.*?)\\ [/url]" ) . unwrap ( ) ;
170172
173+ // Covers:
174+ // * [code]C[/code]
175+ // * [signal C]
176+ // Must run before others, as [code] will itself match the link syntax
177+ let no_link_regex =
178+ Regex :: new ( "\\ [code]([^.]+?)\\ [/code]|\\ [signal ([A-Za-z0-9_]+?)]" ) . unwrap ( ) ;
179+
171180 // Covers:
172181 // * [C]
173182 // * [enum C]
@@ -187,11 +196,15 @@ impl GodotXmlDocs {
187196 let class_member_regex =
188197 Regex :: new ( "\\ [(member|method|constant) ([A-Za-z0-9_]+?)\\ .([A-Za-z0-9_]+?)]" ) . unwrap ( ) ;
189198
190- // Covers:
191- // * [code]C[/code]
192- // * [signal C]
193- let no_link_regex =
194- Regex :: new ( "\\ [code]([^.]+?)\\ [/code]|\\ [signal ([A-Za-z0-9_]+?)]" ) . unwrap ( ) ;
199+ // Before any regex replacement, do verbatim replacements
200+ // Note: maybe some can be expressed as regex, but if text-replace does the job reliably enough, it's even faster
201+ let godot_doc = godot_doc
202+ . replace ( "[codeblock]" , "```gdscript" )
203+ . replace ( "[/codeblock]" , "```" )
204+ . replace ( "[b]" , "**" )
205+ . replace ( "[/b]" , "**" )
206+ . replace ( "[i]" , "_" )
207+ . replace ( "[/i]" , "_" ) ;
195208
196209 // URLs
197210 let godot_doc = url_regex. replace_all ( & godot_doc, |c : & Captures | {
@@ -212,7 +225,11 @@ impl GodotXmlDocs {
212225 // https://docs.godotengine.org/en/stable/classes/class_area2d.html#properties 'gravity_point'
213226 // This needs to be implemented first: https://github.com/godot-rust/godot-rust/issues/689
214227
215- // TODO: [signal M]
228+ // `member` style (no link)
229+ let godot_doc = no_link_regex. replace_all ( & godot_doc, |c : & Captures | {
230+ let member = c. get ( 1 ) . or ( c. get ( 2 ) ) . unwrap ( ) . as_str ( ) ;
231+ format ! ( "`{member}`" , member = member)
232+ } ) ;
216233
217234 // [Type] style
218235 let godot_doc = type_regex. replace_all ( & godot_doc, |c : & Captures | {
@@ -244,20 +261,6 @@ impl GodotXmlDocs {
244261 format ! ( "[`{member}`][Self::{member}]" , member = & c[ 2 ] )
245262 } ) ;
246263
247- // `member` style (no link)
248- let godot_doc = no_link_regex. replace_all ( & godot_doc, |c : & Captures | {
249- format ! ( "`{member}`" , member = & c[ 1 ] )
250- } ) ;
251-
252- // Note: maybe some of the following can be expressed as regex, but if text-replace does the job reliably enough, it's even faster
253- let translated = godot_doc
254- . replace ( "[codeblock]" , "```gdscript" )
255- . replace ( "[/codeblock]" , "```" )
256- . replace ( "[b]" , "**" )
257- . replace ( "[/b]" , "**" )
258- . replace ( "[i]" , "_" )
259- . replace ( "[/i]" , "_" ) ;
260-
261- format ! ( "{}{}" , gdscript_note, translated)
264+ format ! ( "{}{}" , gdscript_note, godot_doc)
262265 }
263266}
0 commit comments