From e1b6e755686e40a0133fa4fa75e66d257de9ba0c Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Wed, 20 Aug 2014 18:49:24 -0400
Subject: v5 v6: ao, book index related

---
 data/doc/sisu/CHANGELOG_v5     |  4 +++-
 data/doc/sisu/CHANGELOG_v6     |  4 +++-
 lib/sisu/v5/ao_doc_str.rb      | 39 +++++++++++++++++++++++++--------------
 lib/sisu/v5/ao_misc_arrange.rb |  4 ++--
 lib/sisu/v6/ao_doc_str.rb      | 39 +++++++++++++++++++++++++--------------
 lib/sisu/v6/ao_misc_arrange.rb |  4 ++--
 6 files changed, 60 insertions(+), 34 deletions(-)

diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5
index bd4cd945..9c795654 100644
--- a/data/doc/sisu/CHANGELOG_v5
+++ b/data/doc/sisu/CHANGELOG_v5
@@ -38,7 +38,9 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.6.2.orig.tar.xz
   sisu_5.6.2.orig.tar.xz
   sisu_5.6.2-1.dsc
 
-* ao_expand_insertions, blocked text match, adjust
+* ao
+  * book index related
+  * ao_expand_insertions, blocked text match, adjust
 
 * texpdf, output, copyright & license
 
diff --git a/data/doc/sisu/CHANGELOG_v6 b/data/doc/sisu/CHANGELOG_v6
index f7d7997d..a1b20529 100644
--- a/data/doc/sisu/CHANGELOG_v6
+++ b/data/doc/sisu/CHANGELOG_v6
@@ -28,7 +28,9 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_6.2.3.orig.tar.xz
   sisu_6.2.3.orig.tar.xz
   sisu_6.2.3-1.dsc
 
-* ao_expand_insertions, blocked text match, adjust
+* ao
+  * book index related
+  * ao_expand_insertions, blocked text match, adjust
 
 * texpdf, output, copyright & license
 
diff --git a/lib/sisu/v5/ao_doc_str.rb b/lib/sisu/v5/ao_doc_str.rb
index d9a7c9f2..e10cc4ef 100644
--- a/lib/sisu/v5/ao_doc_str.rb
+++ b/lib/sisu/v5/ao_doc_str.rb
@@ -305,6 +305,18 @@ module SiSU_AO_DocumentStructureExtract
           next
         end
         t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") if @@flag[:code]==:off
+        unless t_o =~/^(?:@\S+?:|%+)\s/                  # extract book index for paragraph if any
+          idx=if t_o=~/^=\{\s*(.+)\s*\}\s*$\Z/m
+            m=$1
+            m=m.split(/[ ]*\n/).join(' ').
+              gsub(/\s+([|:;])\s+/,'\1').
+              gsub(/\s+([+]\d+)\s+/,'\1')
+            t_o=t_o.gsub(/\n=\{.+?\}\s*$/m,'')
+            idx_array_and_hash=construct_idx_array_and_hash(m)
+            idx_array_and_hash[:hash]
+          else nil
+          end
+        end
         if t_o !~/^(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block)\{|^\}(?:code|poem|alt|group|block)|^(?:table\{|\{table)[ ~]/ \
         and t_o !~/^```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)|^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$|^`:quote_(?:open|close)`/ \
         and @@flag[:code]==:off \
@@ -314,17 +326,6 @@ module SiSU_AO_DocumentStructureExtract
         and @@flag[:alt]==:off \
         and @@flag[:box]==:off \
         and @@flag[:table]==:off
-          unless t_o =~/^(?:@\S+?:|%+)\s/                  # extract book index for paragraph if any
-            idx=if t_o=~/^=\{\s*(.+)\s*\}\s*$\Z/m; m=$1
-              m=m.split(/[ ]*\n/).join(' ').
-                gsub(/\s+([|:;])\s+/,'\1').
-                gsub(/\s+([+]\d+)\s+/,'\1')
-              t_o=t_o.gsub(/\n=\{.+?\}\s*$/m,'')
-              idx_array_and_hash=construct_idx_array_and_hash(m)
-              idx_array_and_hash[:hash]
-            else nil
-            end
-          end
           t_o=case t_o
           when /^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/                                 #metadata, header
             if t_o=~/^#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*(.+)/m
@@ -842,14 +843,17 @@ module SiSU_AO_DocumentStructureExtract
           if (@@flag[:code]==:curls \
           && t_o =~/^\}code/) \
           or (@@flag[:code]==:tics \
-          && t_o =~/^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
+          && t_o =~/^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/m)
             @@flag[:code]=:off
-            @tuned_code[-1].
-              gsub!(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*\Z/m,'')
+            if @tuned_code[-1]
+              @tuned_code[-1].
+                gsub!(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*\Z/m,'')
+            end
             obj=@tuned_code.join("\n")
             tags=[]
             h={
               obj: obj,
+              idx: idx,
               syntax: @@flag[:lngsyn],
               tags: tags,
               num: @num_id[:code_block],
@@ -897,6 +901,7 @@ module SiSU_AO_DocumentStructureExtract
             h={
               is_for: :poem,
               obj: '',
+              idx: idx,
               sym: :poem_close,
               num: @num_id[:poem],
             }
@@ -909,6 +914,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:box],
             }
@@ -918,6 +924,7 @@ module SiSU_AO_DocumentStructureExtract
             h={
               is_for: :box,
               obj: '',
+              idx: idx,
               sym: :box_close,
               num: @num_id[:box],
             }
@@ -930,6 +937,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:group],
             }
@@ -951,6 +959,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:block],
             }
@@ -972,6 +981,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:alt],
             }
@@ -990,6 +1000,7 @@ module SiSU_AO_DocumentStructureExtract
             @@flag[:quote]=:off
             h={
               is_for: :quote,
+              idx: idx,
               obj: '',
               sym: :quote_close,
               num: @num_id[:quote],
diff --git a/lib/sisu/v5/ao_misc_arrange.rb b/lib/sisu/v5/ao_misc_arrange.rb
index 09842fcc..ab61671c 100644
--- a/lib/sisu/v5/ao_misc_arrange.rb
+++ b/lib/sisu/v5/ao_misc_arrange.rb
@@ -98,11 +98,11 @@ module SiSU_AO_MiscArrangeText
           else
             para << block_open
           end
-        elsif para =~/\A.+?\n```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m \
+        elsif para =~/\A.+?\n```(?:\s+\~\{.+?\}\~)?(?:\s+[~-][#])?(\s*=\{.+?\})?\s*\Z/m \
         and @flag==:open
           @flag=:close
           text,block_close=
-            /\A(.+?)\n(```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.match(para)[1,2]
+            /\A(.+?)\n(```(?:\s+\~\{.+?\}\~)?(?:\s+[~-][#])?(?:\s+=\{.+?\})?)\s*\Z/m.match(para)[1,2]
           para=[]
           if not text.to_s.empty?
             para << text.to_s << block_close
diff --git a/lib/sisu/v6/ao_doc_str.rb b/lib/sisu/v6/ao_doc_str.rb
index 25735de7..6e7a103f 100644
--- a/lib/sisu/v6/ao_doc_str.rb
+++ b/lib/sisu/v6/ao_doc_str.rb
@@ -305,6 +305,18 @@ module SiSU_AO_DocumentStructureExtract
           next
         end
         t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") if @@flag[:code]==:off
+        unless t_o =~/^(?:@\S+?:|%+)\s/                  # extract book index for paragraph if any
+          idx=if t_o=~/^=\{\s*(.+)\s*\}\s*$\Z/m
+            m=$1
+            m=m.split(/[ ]*\n/).join(' ').
+              gsub(/\s+([|:;])\s+/,'\1').
+              gsub(/\s+([+]\d+)\s+/,'\1')
+            t_o=t_o.gsub(/\n=\{.+?\}\s*$/m,'')
+            idx_array_and_hash=construct_idx_array_and_hash(m)
+            idx_array_and_hash[:hash]
+          else nil
+          end
+        end
         if t_o !~/^(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block)\{|^\}(?:code|poem|alt|group|block)|^(?:table\{|\{table)[ ~]/ \
         and t_o !~/^```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)|^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$|^`:quote_(?:open|close)`/ \
         and @@flag[:code]==:off \
@@ -314,17 +326,6 @@ module SiSU_AO_DocumentStructureExtract
         and @@flag[:alt]==:off \
         and @@flag[:box]==:off \
         and @@flag[:table]==:off
-          unless t_o =~/^(?:@\S+?:|%+)\s/                  # extract book index for paragraph if any
-            idx=if t_o=~/^=\{\s*(.+)\s*\}\s*$\Z/m; m=$1
-              m=m.split(/[ ]*\n/).join(' ').
-                gsub(/\s+([|:;])\s+/,'\1').
-                gsub(/\s+([+]\d+)\s+/,'\1')
-              t_o=t_o.gsub(/\n=\{.+?\}\s*$/m,'')
-              idx_array_and_hash=construct_idx_array_and_hash(m)
-              idx_array_and_hash[:hash]
-            else nil
-            end
-          end
           t_o=case t_o
           when /^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/                                 #metadata, header
             if t_o=~/^#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*(.+)/m
@@ -842,14 +843,17 @@ module SiSU_AO_DocumentStructureExtract
           if (@@flag[:code]==:curls \
           && t_o =~/^\}code/) \
           or (@@flag[:code]==:tics \
-          && t_o =~/^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
+          && t_o =~/^```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/m)
             @@flag[:code]=:off
-            @tuned_code[-1].
-              gsub!(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*\Z/m,'')
+            if @tuned_code[-1]
+              @tuned_code[-1].
+                gsub!(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*\Z/m,'')
+            end
             obj=@tuned_code.join("\n")
             tags=[]
             h={
               obj: obj,
+              idx: idx,
               syntax: @@flag[:lngsyn],
               tags: tags,
               num: @num_id[:code_block],
@@ -897,6 +901,7 @@ module SiSU_AO_DocumentStructureExtract
             h={
               is_for: :poem,
               obj: '',
+              idx: idx,
               sym: :poem_close,
               num: @num_id[:poem],
             }
@@ -909,6 +914,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:box],
             }
@@ -918,6 +924,7 @@ module SiSU_AO_DocumentStructureExtract
             h={
               is_for: :box,
               obj: '',
+              idx: idx,
               sym: :box_close,
               num: @num_id[:box],
             }
@@ -930,6 +937,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:group],
             }
@@ -951,6 +959,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:block],
             }
@@ -972,6 +981,7 @@ module SiSU_AO_DocumentStructureExtract
             obj,tags=extract_tags(@tuned_block.join("\n"))
             h={
               obj: obj,
+              idx: idx,
               tags: tags,
               num: @num_id[:alt],
             }
@@ -990,6 +1000,7 @@ module SiSU_AO_DocumentStructureExtract
             @@flag[:quote]=:off
             h={
               is_for: :quote,
+              idx: idx,
               obj: '',
               sym: :quote_close,
               num: @num_id[:quote],
diff --git a/lib/sisu/v6/ao_misc_arrange.rb b/lib/sisu/v6/ao_misc_arrange.rb
index 8adebfd5..f1aa1e02 100644
--- a/lib/sisu/v6/ao_misc_arrange.rb
+++ b/lib/sisu/v6/ao_misc_arrange.rb
@@ -98,11 +98,11 @@ module SiSU_AO_MiscArrangeText
           else
             para << block_open
           end
-        elsif para =~/\A.+?\n```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m \
+        elsif para =~/\A.+?\n```(?:\s+\~\{.+?\}\~)?(?:\s+[~-][#])?(\s*=\{.+?\})?\s*\Z/m \
         and @flag==:open
           @flag=:close
           text,block_close=
-            /\A(.+?)\n(```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.match(para)[1,2]
+            /\A(.+?)\n(```(?:\s+\~\{.+?\}\~)?(?:\s+[~-][#])?(?:\s+=\{.+?\})?)\s*\Z/m.match(para)[1,2]
           para=[]
           if not text.to_s.empty?
             para << text.to_s << block_close
-- 
cgit v1.2.3