diff options
| author | Ralph Amissah <ralph@amissah.com> | 2011-07-26 20:22:49 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2011-07-26 20:22:49 -0400 | 
| commit | 5e292103d5da448844c7c5bc38b920874d895107 (patch) | |
| tree | 6db0d80632c93a7f89dc8ecfe0db57bc7bd54fae | |
| parent | v3: emacs syntax highlighting sisu-mode.el (diff) | |
v3: dal, indent, control of first line of indent & rest of paragraph
* implements hanging indent, and possibility to set first line step indent
* __[1-9] hanging indent (initial indent 0); paragraph text indent [1-9]
* _[0-9]?_[1-9] initial indent; paragraph text indent
* __[1-9]! bold words \\ part of hanging indent paragraph text
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v3 | 20 | ||||
| -rw-r--r-- | lib/sisu/v3/dal_doc_objects.rb | 14 | ||||
| -rw-r--r-- | lib/sisu/v3/dal_doc_str.rb | 66 | ||||
| -rw-r--r-- | lib/sisu/v3/dal_syntax.rb | 20 | 
4 files changed, 103 insertions, 17 deletions
| diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3 index 740611a8..56e737bc 100644 --- a/data/doc/sisu/CHANGELOG_v3 +++ b/data/doc/sisu/CHANGELOG_v3 @@ -20,6 +20,26 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_3.0.14.orig.tar.gz    sisu_3.0.14-1.dsc    sisu_3.0.14-1.debian.tar.gz +  * hanging indent partially implemented, added markup possibilities + +    __[1-9] hanging indent (initial indent 0); paragraph text indent [1-9] + +    _[0-9]?_[1-9] initial indent; paragraph text indent + +    * done: dal; +      not done: , plaintext, html, xhtml, xml sax, xml dom, epub, pdf, odf, +      man, info +      check: po4a, html_lite (used in sql search results) +    * syntax highlighting done: vim (sisu.vim), emacs (sisu-mode.el) + +  * indent added bold words markup syntax (_[1-9]!) (_[0-9]?_[1-9]!) +    for indents + +    __[1-9]! bold words +    part of hanging indent paragraph text + +    __[1-9]! bold words \\ part of hanging indent paragraph text +    * param, manifest, qrcode, epub, added creator.editor field    * sql db, constants, cgi-sql, structure changed, creator editor field added diff --git a/lib/sisu/v3/dal_doc_objects.rb b/lib/sisu/v3/dal_doc_objects.rb index ad5f8bb7..8a330f13 100644 --- a/lib/sisu/v3/dal_doc_objects.rb +++ b/lib/sisu/v3/dal_doc_objects.rb @@ -167,10 +167,10 @@ module SiSU_document_structure      end    end    class Object_para -    attr_accessor :obj,:is,:tags,:of,:name,:idx,:bullet_,:indent,:ocn,:odv,:osp,:parent,:note_,:image_,:ocn_,:digest,:tmp +    attr_accessor :obj,:is,:tags,:of,:name,:idx,:bullet_,:indent,:hang,:ocn,:odv,:osp,:parent,:note_,:image_,:ocn_,:digest,:tmp      def initialize        @of='para' -      @is=@obj=@name=@idx=@bullet_=@indent=@size=@ocn=@odv=@osp=@parent=@note_=@image_=@ocn_=@digest=@tmp=nil +      @is=@obj=@name=@idx=@bullet_=@indent=@hang=@size=@ocn=@odv=@osp=@parent=@note_=@image_=@ocn_=@digest=@tmp=nil        @tags=[]      end      def paragraph(h,o=nil) @@ -185,6 +185,7 @@ module SiSU_document_structure        osp=    h[:osp]     || ((defined? o.osp)     ? o.osp     : nil)        parent= h[:parent]  || ((defined? o.parent)  ? o.parent  : nil)          #[Node parent]        indent= h[:indent].to_s || ((defined? o.indent) ? o.indent.to_s : nil)   #Integer, indent level +      hang=   h[:hang].to_s || ((defined? o.hang)  ? o.hang.to_s : nil)        #Integer, hanging indent level        bullet_=h[:bullet_] || ((defined? o.bullet_) ? o.bullet_ : false)        #Bool, bulleted?        note_=  h[:note_]   || ((defined? o.note_)   ? o.note_   : false)        #Bool, endnotes/footnotes? (processing optimization)        image_= h[:image_]  || ((defined? o.image_)  ? o.image_  : false)        #Bool, images? (processing optimization) @@ -193,7 +194,7 @@ module SiSU_document_structure        end        digest= h[:digest]  || ((defined? o.digest)  ? o.digest  : nil)          #hash digests, either sha256 or md5        tmp=    h[:tmp]     || ((defined? o.tmp)     ? o.tmp     : nil)          #available for processing, empty after use -      @of,@is,@name,@tags,@obj,@indent,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp +      @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,hang,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp        self      end      def docinfo(h,o=nil) @@ -208,6 +209,7 @@ module SiSU_document_structure        osp=    h[:osp]     || ((defined? o.osp)     ? o.osp     : nil)        parent= h[:parent]  || ((defined? o.parent)  ? o.parent  : nil)          #[Node parent]        indent= nil                                                              #Integer, indent level +      hang= nil                                                              #Integer, indent level        bullet_=false                                                            #Bool, bulleted?        note_=  false                                                            #Bool, endnotes/footnotes? (processing optimization)        image_= h[:image_]  || ((defined? o.image_)  ? o.image_  : false)        #Bool, images? (processing optimization) @@ -216,7 +218,7 @@ module SiSU_document_structure        end        digest= h[:digest]  || ((defined? o.digest)  ? o.digest  : nil)          #hash digests, either sha256 or md5        tmp=    h[:tmp]     || ((defined? o.tmp)     ? o.tmp     : nil)          #available for processing, empty after use -      @of,@is,@name,@tags,@obj,@indent,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp +      @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,hang,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp        self      end    end @@ -325,10 +327,10 @@ module SiSU_document_structure      end    end    class Object_table -    attr_accessor :obj,:is,:of,:lv,:tags,:name,:idx,:indent,:size,:ocn,:number,:head_,:cols,:widths,:odv,:osp,:parent,:note_,:ocn_,:digest,:tmp +    attr_accessor :obj,:is,:of,:lv,:tags,:name,:idx,:indent,:hang,:size,:ocn,:number,:head_,:cols,:widths,:odv,:osp,:parent,:note_,:ocn_,:digest,:tmp      def initialize        @of='block' -      @is=@obj=@lv=@name=@idx=@indent=@size=@ocn,@number,@head_,@cols,@widths=@odv=@osp=@parent=@note_=@ocn_=@digest=@tmp=nil +      @is=@obj=@lv=@name=@idx=@indent=@hang=@size=@ocn,@number,@head_,@cols,@widths=@odv=@osp=@parent=@note_=@ocn_=@digest=@tmp=nil        @tags=[]      end      def table(h,o=nil) diff --git a/lib/sisu/v3/dal_doc_str.rb b/lib/sisu/v3/dal_doc_str.rb index ed289015..52425437 100644 --- a/lib/sisu/v3/dal_doc_str.rb +++ b/lib/sisu/v3/dal_doc_str.rb @@ -92,8 +92,36 @@ module SiSU_document_structure_extract      def bullet_test(str)        bool=((str=~/\*/) ? true : false)      end -    def indent_test(str) -      num=((str=~/^_([1-9])/) ? $1 : 0) +    def hang_and_indent_test(str) +      hang_indent=if str=~/^_([1-9])[^_]/ +        [$1,$1] +      elsif str=~/^__([1-9])/ +        [0,$1] +      elsif str=~/^_([0-9])_([0-9])/ +        [$1,$2] +      else +        [0,0] +      end +      hang,indent=hang_indent[0],hang_indent[1] +      [hang,indent] +    end +    def hang_and_indent_def_test(str1,str2) +      hang_indent=if str1=~/^_([1-9])[^_]/ +        [$1,$1] +      elsif str1=~/^__([1-9])/ +        [0,$1] +      elsif str1=~/^_([0-9])_([0-9])/ +        [$1,$2] +      else +        [0,0] +      end +      obj=if str2 =~/^(.+?)\s+\\\\(?:\s+|\n)/ +        str2.gsub(/^(.+?)(\s+\\\\(?:\s+|\n))/,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2") +      else +        str2.gsub(/^(.+?)\n/,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\n") +      end +      hang,indent=hang_indent[0],hang_indent[1] +      [hang,indent,obj]      end      def endnote_test?(str)        bool=((str=~/~\{.+?\}~|~\[.+?\]~/) ? true : false) @@ -171,16 +199,37 @@ module SiSU_document_structure_extract                SiSU_document_structure::Object_heading.new.heading(h)              else nil              end -          when /^(?:_[1-9]|_[1-9]?\*)\s+/                  #indented and/or bullet paragraph -            t_o=if t_o=~/^(_(?:[1-9]?\*|[1-9])\s+)(.+)/m +          when /^_(?:[1-9]!?|[1-9]?\*)\s+/                  #indented and/or bullet paragraph +            t_o=if t_o=~/^(_(?:[1-9]?\*|[1-9]!?)\s+)(.+)/m                tst,obj=$1,$2 -              indent=indent_test(tst) +              if t_o=~/^_[1-9]!\s+.+/m +                hang,indent,obj=hang_and_indent_def_test(tst,obj) +              else +                hang,indent=hang_and_indent_test(tst) +              end                bullet=bullet_test(tst)                image=image_test(obj)                note=endnote_test?(obj)                obj,tags=extract_tags(obj)                unless obj=~/\A\s*\Z/m -                h={ bullet_: bullet, indent: indent, obj: obj, idx: idx, note_: note, image_: image, tags: tags } +                h={ bullet_: bullet, hang: hang, indent: indent, obj: obj, idx: idx, note_: note, image_: image, tags: tags } +                SiSU_document_structure::Object_para.new.paragraph(h) +              end +            else nil +            end +          when /^_[0-9]?_[0-9]!?\s+/                  #hanging indent paragraph +            t_o=if t_o=~/^(_[0-9]?_[0-9]!?\s+)(.+)/m +              tst,obj=$1,$2 +              if t_o=~/^_[0-9]?_[0-9]!\s+.+/m +                hang,indent,obj=hang_and_indent_def_test(tst,obj) +              else +                hang,indent=hang_and_indent_test(tst) +              end +              image=image_test(obj) +              note=endnote_test?(obj) +              obj,tags=extract_tags(obj) +              unless obj=~/\A\s*\Z/m +                h={ hang: hang, indent: indent, obj: obj, idx: idx, note_: note, image_: image, tags: tags }                  SiSU_document_structure::Object_para.new.paragraph(h)                end              else nil @@ -196,7 +245,7 @@ module SiSU_document_structure_extract              note=endnote_test?(t_o)              obj,tags=extract_tags(t_o)              unless obj=~/\A\s*\Z/m -              h={ bullet_: false, indent: 0, obj: obj, idx: idx, note_: note, image_: image, tags: tags } +              h={ bullet_: false, indent: 0, hang: 0, obj: obj, idx: idx, note_: note, image_: image, tags: tags }                SiSU_document_structure::Object_para.new.paragraph(h)              end            end @@ -725,7 +774,8 @@ module SiSU_document_structure_extract      end      def structure_markup                                   #build structure where structure provided only in meta header        @dob=if @dob.is =~/para/ \ -      and @dob.indent !~/[1-9]/ \ +      and ((@dob.hang !~/[1-9]/ and @dob.indent !~/[1-9]/) \ +      or (@dob.hang != @dob.indent)) \        and not @dob.bullet_          @dob=case @dob.obj          when /^#{@md.lv1}/ diff --git a/lib/sisu/v3/dal_syntax.rb b/lib/sisu/v3/dal_syntax.rb index 4595d6e1..bb1aacbe 100644 --- a/lib/sisu/v3/dal_syntax.rb +++ b/lib/sisu/v3/dal_syntax.rb @@ -398,9 +398,19 @@ module SiSU_Syntax          dob.obj.gsub!(/=\{(.+?)\}/,            "#{Mx[:idx_o]}\\1#{Mx[:idx_c]}")          dob.obj.gsub!(/^\s*_([1-9])\*\s*/, -          "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:gl_bullet]}")                                                                                                              #bullets, shortcut +          "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:gl_bullet]}")                                                                                                              #bullets, shortcut          dob.obj.gsub!(/^\s*_([1-9])\s+/, -          "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}")                                                                                                                               #indent +          "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}")                                                                                                                               #indent +        dob.obj.gsub!(/^\s*_([1-9])!\s+(.+?)\s*$/, +          "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} ")                                                                                                                               #indent bold +        dob.obj.gsub!(/^\s*__([1-9])\s+/, +          "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}")                                                                                                                               #hang +        dob.obj.gsub!(/^\s*__([1-9])!\s+(.+?)\s*$/, +          "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} ")                                                                                                                          #hangdef +        dob.obj.gsub!(/^\s*_([0-9])_([0-9])\s+/, +          "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}")                                                                                                                               #hang +        dob.obj.gsub!(/^\s*_([0-9])_([0-9])!\s+(.+?)\s*$/, +          "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\3#{Mx[:fa_bold_c]} ")                                                                                                                          #hangdef          dob.obj.gsub!(/<:hi>/,"#{Mx[:fa_hilite_o]}") #'<span style="background-color: rgb(255,240,196)">')   # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200)          dob.obj.gsub!(/<:\/hi>/,"#{Mx[:fa_hilite_c]}") #'</span>')          dob.obj.gsub!(/(#{Mx[:gr_o]}verse#{Mx[:gr_c]}.+)/m,"\\1\n") @@ -517,7 +527,11 @@ module SiSU_Syntax          line.gsub!(/^\s*_\([1-9]\)\(\*\+\)\s*/,            "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:fa_o]}\\2#{Mx[:fa_c_o]}")                            #bullets, shortcut          line.gsub!(/^\s*_\([1-9]\)\s+/, -          "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}") +          "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}") #watch +        line.gsub!(/^\s*__\([1-9]\)\s+/, +          "#{Mx[:pa_o]}:h\\1#{Mx[:pa_c]}") #watch +        #line.gsub!(/^\s*__\([1-9]\)!\s+/, +        #  "#{Mx[:pa_o]}:hd\\1#{Mx[:pa_c]}") #watch          line.gsub!(/#{Mx[:br_line]}\s*_[12]\s+/,            "#{Mx[:br_line]} ")                                                                      #indent used in endnotes, not implemented, replace when ready with: line.gsub!(/(?:<br>|<br \/>)\s*_([12])\s+/,'<br><:i\1> ')        end | 
