summary refs log tree commit diff stats
path: root/lib/packages
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2021-03-24 02:58:29 -0700
committerGitHub <noreply@github.com>2021-03-24 10:58:29 +0100
commit1590d145757416788e99023ab50c5afae6f8ea36 (patch)
tree8f0a50f76ed197d4e441278e2e39f4a80e36b77b /lib/packages
parente94aec20da354d4d3bb6db6e4b840549aa0e7bf1 (diff)
downloadNim-1590d145757416788e99023ab50c5afae6f8ea36.tar.gz
fix #17260 render `\` properly in nim doc, rst2html (#17315)
Diffstat (limited to 'lib/packages')
-rw-r--r--lib/packages/docutils/rst.nim21
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/packages/docutils/rst.nim b/lib/packages/docutils/rst.nim
index b5eef7610..11768c7da 100644
--- a/lib/packages/docutils/rst.nim
+++ b/lib/packages/docutils/rst.nim
@@ -852,6 +852,9 @@ proc isInlineMarkupEnd(p: RstParser, markup: string): bool =
   if not result: return
   # Rule 4:
   if p.idx > 0:
+    # see bug #17260; for now `\` must be written ``\``, likewise with sequences
+    # ending in an un-escaped `\`; `\\` is legal but not `\\\` for example;
+    # for this reason we can't use `["``", "`"]` here.
     if markup != "``" and prevTok(p).symbol == "\\":
       result = false
 
@@ -1089,11 +1092,19 @@ proc parseUntil(p: var RstParser, father: PRstNode, postfix: string,
       if isInlineMarkupEnd(p, postfix):
         inc p.idx
         break
-      elif interpretBackslash:
-        parseBackslash(p, father)
       else:
-        father.add(newLeaf(p))
-        inc p.idx
+        if postfix == "`":
+          if prevTok(p).symbol == "\\" and currentTok(p).symbol == "`":
+            father.sons[^1] = newLeaf(p) # instead, we should use lookahead
+          else:
+            father.add(newLeaf(p))
+          inc p.idx
+        else:
+          if interpretBackslash:
+            parseBackslash(p, father)
+          else:
+            father.add(newLeaf(p))
+            inc p.idx
     of tkAdornment, tkWord, tkOther:
       father.add(newLeaf(p))
       inc p.idx
@@ -1243,7 +1254,7 @@ proc parseInline(p: var RstParser, father: PRstNode) =
       father.add(n)
     elif isInlineMarkupStart(p, "`"):
       var n = newRstNode(rnInterpretedText)
-      parseUntil(p, n, "`", true)
+      parseUntil(p, n, "`", false) # bug #17260
       n = parsePostfix(p, n)
       father.add(n)
     elif isInlineMarkupStart(p, "|"):