Commit ea68f1c8d3e2815e2ca22ff83de1fdd26d07af49

Werner Lemberg 2017-12-08T20:15:15

[docmaker] Fix code section parsing. Stuff like { <bla> } confused the parser, which incorrectly treated `<bla>' as a markup tag. * src/tools/docmaker/content.py (ContentProcessor::process_content): Apply `re_markup_tags' only outside of code sections.

diff --git a/ChangeLog b/ChangeLog
index 4949130..ee8663b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2017-12-08  Werner Lemberg  <wl@gnu.org>
 
+	[docmaker] Fix code section parsing.
+
+	Stuff like
+
+	  {
+	    <bla>
+	  }
+
+	confused the parser, which incorrectly treated `<bla>' as a markup
+	tag.
+
+	* src/tools/docmaker/content.py (ContentProcessor::process_content):
+	Apply `re_markup_tags' only outside of code sections.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
 	New `ftdriver.h' file, covering all driver modules.
 
 	This reduces redundancy and increases synergy; it also reduces the
diff --git a/src/tools/docmaker/content.py b/src/tools/docmaker/content.py
index 283d815..d432feb 100644
--- a/src/tools/docmaker/content.py
+++ b/src/tools/docmaker/content.py
@@ -453,15 +453,32 @@ class  ContentProcessor:
         markup_lines = []
         first        = 1
 
+        margin  = -1
+        in_code = 0
+
         for line in content:
-            found = None
-            for t in re_markup_tags:
-                m = t.match( line )
+            if in_code:
+                m = re_code_end.match( line )
+                if m and len( m.group( 1 ) ) <= margin:
+                    in_code = 0
+                    margin  = -1
+            else:
+                m = re_code_start.match( line )
                 if m:
-                    found  = string.lower( m.group( 1 ) )
-                    prefix = len( m.group( 0 ) )
-                    line   = " " * prefix + line[prefix:]   # remove markup from line
-                    break
+                    in_code = 1
+                    margin  = len( m.group( 1 ) )
+
+            found = None
+
+            if not in_code:
+                for t in re_markup_tags:
+                    m = t.match( line )
+                    if m:
+                        found  = string.lower( m.group( 1 ) )
+                        prefix = len( m.group( 0 ) )
+                        # remove markup from line
+                        line   = " " * prefix + line[prefix:]
+                        break
 
             # is it the start of a new markup section ?
             if found: