浏览代码

Add support for [url=] tag to makerst.py

Fixes #28904

(cherry picked from commit 102f73b88a5b2d297ede17db00fbbf1d16cac72e)
Stanislav 6 年之前
父节点
当前提交
6521d64c46
共有 1 个文件被更改,包括 13 次插入2 次删除
  1. 13 2
      doc/tools/makerst.py

+ 13 - 2
doc/tools/makerst.py

@@ -683,10 +683,16 @@ def rstize_text(text, state):  # type: (str, State) -> str
 
     # Handle [tags]
     inside_code = False
+    inside_url = False
+    url_has_name = False
+    url_link = ""
     pos = 0
     tag_depth = 0
+    previous_pos = 0
     while True:
         pos = text.find('[', pos)
+        if inside_url and (pos > previous_pos):
+            url_has_name = True
         if pos == -1:
             break
 
@@ -780,12 +786,16 @@ def rstize_text(text, state):  # type: (str, State) -> str
             elif cmd.find('image=') == 0:
                 tag_text = ""  # '![](' + cmd[6:] + ')'
             elif cmd.find('url=') == 0:
-                tag_text = ':ref:`' + cmd[4:] + '<' + cmd[4:] + ">`"
+                url_link = cmd[4:]
+                tag_text = ':ref:`'
                 tag_depth += 1
+                url_has_name = False
+                inside_url = True
             elif cmd == '/url':
-                tag_text = ''
+                tag_text = ('' if url_has_name else url_link) + '<' + url_link + ">`"
                 tag_depth -= 1
                 escape_post = True
+                inside_url = False
             elif cmd == 'center':
                 tag_depth += 1
                 tag_text = ''
@@ -856,6 +866,7 @@ def rstize_text(text, state):  # type: (str, State) -> str
 
         text = pre_text + tag_text + post_text
         pos = len(pre_text) + len(tag_text)
+        previous_pos = pos
 
     if tag_depth > 0:
         print_error("Tag depth mismatch: too many/little open/close tags, file: {}".format(state.current_class), state)