From f37d75fba7597e466447877f52d20d21b3355807 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Mon, 2 Dec 2013 23:08:06 -0500
Subject: v5: dal_doc_str.rb, changes related to collapsed level

* for headings added for structure, without ocn
* testing required
---
 data/doc/sisu/CHANGELOG_v5 |   3 +
 lib/sisu/v5/dal_doc_str.rb | 373 ++++++++++++++++++++++++++-------------------
 2 files changed, 218 insertions(+), 158 deletions(-)

diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5
index de64dce4..f3812373 100644
--- a/data/doc/sisu/CHANGELOG_v5
+++ b/data/doc/sisu/CHANGELOG_v5
@@ -30,6 +30,9 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.1.0.orig.tar.xz
   sisu_5.1.0.orig.tar.xz
   sisu_5.1.0-1.dsc
 
+* dal_doc_str, changes related to headings provided for document structure
+  without ocn, testing required
+
 %% 5.0.25.orig.tar.xz (2013-11-08:44/5)
 http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_5.0.25
 http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_5.0.25-1
diff --git a/lib/sisu/v5/dal_doc_str.rb b/lib/sisu/v5/dal_doc_str.rb
index 203bc988..7a89dfb1 100644
--- a/lib/sisu/v5/dal_doc_str.rb
+++ b/lib/sisu/v5/dal_doc_str.rb
@@ -868,7 +868,6 @@ has incorrect level and/or parent level}
         && (dob.of !=:comment \
         && dob.of !=:layout \
         && dob.of !=:meta) \
-        && dob.obj !~/#{Mx[:pa_non_object_no_heading]}|#{Mx[:pa_non_object_dummy_heading]}/ \
         && dob.ocn_
           #dob.ln now is determined, and set earlier, check how best to remove this -->
           if dob.is==:heading
@@ -884,181 +883,239 @@ has incorrect level and/or parent level}
              when '6'; 9
              end
           end
-          if not dob.obj =~/<:#>|~#|-#/ \
-          or not dob.toc_                                  # fix this no longer in dob.obj
+          if not dob.obj =~/~#|-#/
             ocn+=1
-            if dob.is==:heading \
-            and (ln.to_s =~/^[1-9]/ \
-            or ln.to_s =~@md.lv1 \
-            or ln.to_s =~@md.lv2 \
-            or ln.to_s =~@md.lv3 \
-            or ln.to_s =~@md.lv4 \
-            or ln.to_s =~@md.lv5 \
-            or ln.to_s =~@md.lv6)
+          end
+          if dob.is==:heading \
+          and (ln.to_s =~/^[1-9]/ \
+          or ln.to_s =~@md.lv1 \
+          or ln.to_s =~@md.lv2 \
+          or ln.to_s =~@md.lv3 \
+          or ln.to_s =~@md.lv4 \
+          or ln.to_s =~@md.lv5 \
+          or ln.to_s =~@md.lv6)
+            if not dob.obj =~/~#|-#/
               ocnh+=1
-              if ln==1 \
-              or ln=~@md.lv1; ocnh1+=1                     #heading
+            end
+            if ln==1 \
+            or ln=~@md.lv1
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh1+=1                     #heading
                 node1="1:#{ocnh1};#{ocn}"
-                document_structure_check_info(node1,node0)
-                @collapsed_lv1=1
-                collapsed_level=@collapsed_lv1
-                node,ocn_sp,parent=node1,"h#{ocnh}",node0 #FIX
-              elsif ln==2 \
-              or ln=~@md.lv2; ocnh2+=1
+              else
+                ocn_flag=false
+                node1="1:0;0"
+              end
+              document_structure_check_info(node1,node0)
+              @collapsed_lv1=1
+              collapsed_level=@collapsed_lv1
+              node,ocn_sp,parent=node1,"h#{ocnh}",node0 #FIX
+            elsif ln==2 \
+            or ln=~@md.lv2
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh2+=1
                 node2="2:#{ocnh2};#{ocn}"
-                parent=if node1
-                  document_structure_check_info(node2,node1)
-                  @collapsed_lv2=@collapsed_lv1+1
-                  node1
-                else
-                  document_structure_check_info(node2,node0,:error)
-                  node0
-                end
-                collapsed_level=@collapsed_lv2
-                node,ocn_sp=node2,"h#{ocnh}"
-              elsif ln==3 \
-              or ln=~@md.lv3; ocnh3+=1
+              else
+                ocn_flag=false
+                node2="2:0;0"
+              end
+              parent=if node1
+                document_structure_check_info(node2,node1)
+                @collapsed_lv2=@collapsed_lv1+1
+                node1
+              else
+                document_structure_check_info(node2,node0,:error)
+                node0
+              end
+              collapsed_level=@collapsed_lv2
+              node,ocn_sp=node2,"h#{ocnh}"
+            elsif ln==3 \
+            or ln=~@md.lv3
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh3+=1
                 node3="3:#{ocnh3};#{ocn}"
-                parent=if node2
-                  document_structure_check_info(node3,node2)
-                  @collapsed_lv3=@collapsed_lv2+1
-                  node2
-                elsif node1
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  puts %{parent is :A~ & this level #{dob.lv}
+              else
+                ocn_flag=false
+                node3="3:0;0"
+              end
+              parent=if node2
+                document_structure_check_info(node3,node2)
+                @collapsed_lv3=@collapsed_lv2+1
+                node2
+              elsif node1
+                warning_incorrect_parent_level_or_level(dob.obj)
+                puts %{parent is :A~ & this level #{dob.lv}
 either parent should be level :B~
 or this level should be level :B~ rather than #{dob.lv}}
-                  document_structure_check_info(node3,node1,:error)
-                  @collapsed_lv3=@collapsed_lv1+1
-                  node1
-                else
-                  document_structure_check_info(node3,node0,:error)
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  node0
-                end
-                collapsed_level=@collapsed_lv3
-                node,ocn_sp=node3,"h#{ocnh}"
-              elsif ln==4 \
-              or ln=~@md.lv4; ocnh4+=1
+                document_structure_check_info(node3,node1,:error)
+                @collapsed_lv3=@collapsed_lv1+1
+                node1
+              else
+                document_structure_check_info(node3,node0,:error)
+                warning_incorrect_parent_level_or_level(dob.obj)
+                node0
+              end
+              collapsed_level=@collapsed_lv3
+              node,ocn_sp=node3,"h#{ocnh}"
+            elsif ln==4 \
+            or ln=~@md.lv4
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh4+=1
                 node4="4:#{ocnh4};#{ocn}"
-                parent=if node3
-                  document_structure_check_info(node4,node3)
-                  @collapsed_lv4=@collapsed_lv3+1
-                  node3
-                elsif node2
-                  document_structure_check_info(node4,node2)
-                  @collapsed_lv4=@collapsed_lv2+1
-                  node2
-                elsif node1
-                  document_structure_check_info(node4,node1)
-                  @collapsed_lv4=@collapsed_lv1+1
-                  node1
-                else
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node4,node0,:error)
-                  node0
-                end
-                collapsed_level=@collapsed_lv4
-                node,ocn_sp=node4,"h#{ocnh}"
-              elsif ln==5 \
-              or ln=~@md.lv5; ocnh5+=1
+              else
+                ocn_flag=false
+                node4="4:0;0"
+              end
+              parent=if node3
+                document_structure_check_info(node4,node3)
+                @collapsed_lv4=@collapsed_lv3+1
+                node3
+              elsif node2
+                document_structure_check_info(node4,node2)
+                @collapsed_lv4=@collapsed_lv2+1
+                node2
+              elsif node1
+                document_structure_check_info(node4,node1)
+                @collapsed_lv4=@collapsed_lv1+1
+                node1
+              else
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node4,node0,:error)
+                node0
+              end
+              collapsed_level=@collapsed_lv4
+              node,ocn_sp=node4,"h#{ocnh}"
+            elsif ln==5 \
+            or ln=~@md.lv5
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh5+=1
                 node5="5:#{ocnh5};#{ocn}"
-                parent=if node4
-                  document_structure_check_info(node5,node4)
-                  @collapsed_lv5=@collapsed_lv4+1
-                  node4
-                elsif node3
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node5,node3,:error)
-                  @collapsed_lv5=@collapsed_lv3+1
-                  node3
-                elsif node2
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node5,node2,:error)
-                  @collapsed_lv5=@collapsed_lv2+1
-                  node2
-                elsif node1
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node5,node1,:error)
-                  @collapsed_lv5=@collapsed_lv1+1
-                  node1
-                else
-                  document_structure_check_info(node5,node0,:error)
-                  node0
-                end
-                collapsed_level=@collapsed_lv5
-                node,ocn_sp=node5,"h#{ocnh}"
-              elsif ln==6 \
-              or ln=~@md.lv6; ocnh6+=1
+              else
+                ocn_flag=false
+                node5="5:0;0"
+              end
+              parent=if node4
+                document_structure_check_info(node5,node4)
+                @collapsed_lv5=@collapsed_lv4+1
+                node4
+              elsif node3
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node5,node3,:error)
+                @collapsed_lv5=@collapsed_lv3+1
+                node3
+              elsif node2
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node5,node2,:error)
+                @collapsed_lv5=@collapsed_lv2+1
+                node2
+              elsif node1
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node5,node1,:error)
+                @collapsed_lv5=@collapsed_lv1+1
+                node1
+              else
+                document_structure_check_info(node5,node0,:error)
+                node0
+              end
+              collapsed_level=@collapsed_lv5
+              node,ocn_sp=node5,"h#{ocnh}"
+            elsif ln==6 \
+            or ln=~@md.lv6
+              if not dob.obj =~/~#|-#/
+                ocn_flag=true
+                ocnh6+=1
                 node6="6:#{ocnh6};#{ocn}"
-                parent=if node5
-                  document_structure_check_info(node6,node5)
-                  @collapsed_lv6=@collapsed_lv5+1
-                  node5
-                elsif node4
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  puts "parent is level 4~ & this level #{dob.lv}
+              else
+                ocn_flag=false
+                node6="6:0;0"
+              end
+              parent=if node5
+                document_structure_check_info(node6,node5)
+                @collapsed_lv6=@collapsed_lv5+1
+                node5
+              elsif node4
+                warning_incorrect_parent_level_or_level(dob.obj)
+                puts "parent is level 4~ & this level #{dob.lv}
 either parent should be level 5~
 or this level should be 5~ rather #{dob.lv}" #level 6
-                  document_structure_check_info(node6,node4,:error)
-                  @collapsed_lv6=@collapsed_lv4+1
-                  node4
-                elsif node3
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node6,node3,:error)
-                  @collapsed_lv6=@collapsed_lv3+1
-                  node3
-                elsif node2
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node6,node2,:error)
-                  @collapsed_lv6=@collapsed_lv2+1
-                  node2
-                elsif node1
-                  warning_incorrect_parent_level_or_level(dob.obj)
-                  document_structure_check_info(node6,node1,:error)
-                  @collapsed_lv6=@collapsed_lv1+1
-                  node1
-                else
-                  document_structure_check_info(node6,node0,:error)
-                  node0
-                end
-                collapsed_level=@collapsed_lv6
-                node,ocn_sp=node6,"h#{ocnh}"
+                document_structure_check_info(node6,node4,:error)
+                @collapsed_lv6=@collapsed_lv4+1
+                node4
+              elsif node3
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node6,node3,:error)
+                @collapsed_lv6=@collapsed_lv3+1
+                node3
+              elsif node2
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node6,node2,:error)
+                @collapsed_lv6=@collapsed_lv2+1
+                node2
+              elsif node1
+                warning_incorrect_parent_level_or_level(dob.obj)
+                document_structure_check_info(node6,node1,:error)
+                @collapsed_lv6=@collapsed_lv1+1
+                node1
+              else
+                document_structure_check_info(node6,node0,:error)
+                node0
               end
+              collapsed_level=@collapsed_lv6
+              node,ocn_sp=node6,"h#{ocnh}"
+            end
+          else
+            if not dob.obj =~/~#|-#/
+              ocn_flag=true
             else
-              ocno+=1
-              if dob.is==:table
-                ocnt+=1
-                ocn_sp,parent="t#{ocnt}",node
-              elsif dob.is==:code
-                ocnc+=1
-                ocn_sp,parent="c#{ocnc}",node
-              elsif dob.is==:group \
-              || dob.is==:block \
-              || dob.is==:alt \
-              || dob.is==:verse
-                ocng+=1 #group, poem
-                ocn_sp,parent="g#{ocng}",node
-              elsif dob.is==:image #check
-                ocni+=1
-                ocn_sp,parent="i#{ocni}",node
-              else ocnp+=1                                 #paragraph
-                ocn_sp,parent="p#{ocnp}",node
-              end
+              ocn_flag=false
             end
-            if dob.is==:heading
-              dob.ln,dob.node,dob.ocn,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,ocn,ocn_dv,ocn_sp,parent,collapsed_level
+            ocno+=1
+            if dob.is==:table
+              ocnt+=1
+              ocn_sp,parent="t#{ocnt}",node
+            elsif dob.is==:code
+              ocnc+=1
+              ocn_sp,parent="c#{ocnc}",node
+            elsif dob.is==:group \
+            || dob.is==:block \
+            || dob.is==:alt \
+            || dob.is==:verse
+              ocng+=1 #group, poem
+              ocn_sp,parent="g#{ocng}",node
+            elsif dob.is==:image #check
+              ocni+=1
+              ocn_sp,parent="i#{ocni}",node
+            else ocnp+=1                                 #paragraph
+              ocn_sp,parent="p#{ocnp}",node
+            end
+          end
+          if dob.is==:heading
+            if ocn_flag==true
+              dob.ln,dob.node,dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,ocn,ocn_flag,ocn_dv,ocn_sp,parent,collapsed_level
             else
-              if dob.of !=:meta \
-              && dob.of !=:comment \
-              && dob.of !=:layout
-                dob.ocn,dob.odv,dob.osp,dob.parent=ocn,ocn_dv,ocn_sp,parent
+              ocnu+=1
+              dob.obj=dob.obj.gsub(/#{Mx[:fa_o]}[~-]##{Mx[:fa_c]}/,'') if dob.obj
+              ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}"
+              dob.ln,dob.node,dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,nil,ocn_flag,ocn_dv,ocn_sp,parent,collapsed_level
+            end
+          else
+            if dob.of !=:meta \
+            && dob.of !=:comment \
+            && dob.of !=:layout
+              if ocn_flag == true
+                dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent=ocn,ocn_flag,ocn_dv,ocn_sp,parent
+              else
+                ocnu+=1
+                dob.obj=dob.obj.gsub(/#{Mx[:fa_o]}[~-]##{Mx[:fa_c]}/,'') if dob.obj
+                ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}"
+                dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent=nil,ocn_flag,ocn_dv,ocn_sp,parent
               end
             end
-          else ocnu+=1
-            dob.obj=dob.obj.gsub(/#{Mx[:fa_o]}~##{Mx[:fa_c]}/,'') if dob.obj
-            ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}"
-            dob.ocn,dob.odv,dob.osp=ocn,ocn_dv,ocn_sp
           end
           h
         elsif dob.obj=~/#{Mx[:pa_non_object_no_heading]}/
-- 
cgit v1.2.3