From 27cce87ed33bd46ef298c848a45651ce782830a3 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Wed, 21 Aug 2013 23:18:00 -0400 Subject: v5: alternative open and close for blocks using line starting with "```" * e.g. open code block: "``` code" close code block: "```" start poem: "``` poem" end poem: "```" * remove need for an empty line between opening & closing of a text block --- data/doc/sisu/CHANGELOG_v5 | 6 + lib/sisu/v5/dal.rb | 4 +- lib/sisu/v5/dal_doc_str.rb | 223 +++++++++++++++--------- lib/sisu/v5/dal_expand_insertions.rb | 4 +- lib/sisu/v5/dal_misc_arrange.rb | 155 ++++++++++++++++ lib/sisu/v5/dal_substitutions_and_insertions.rb | 145 --------------- 6 files changed, 305 insertions(+), 232 deletions(-) create mode 100644 lib/sisu/v5/dal_misc_arrange.rb delete mode 100644 lib/sisu/v5/dal_substitutions_and_insertions.rb diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5 index a7c6e2cd..aaeb36f2 100644 --- a/data/doc/sisu/CHANGELOG_v5 +++ b/data/doc/sisu/CHANGELOG_v5 @@ -33,6 +33,12 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.0.12.orig.tar.xz * syntax add * switch ocn off and on for a block of content, line containing only off: "--~#" (omit headings where possible) "---#" on: "--+#" + * alternative open and close for blocks using line starting with "```", e.g. + open code block: "``` code" + close code block: "```" + start poem: "``` poem" + end poem: "```" + * remove need for an empty line between opening & closing of a text block * messages to terminal * code marker diff --git a/lib/sisu/v5/dal.rb b/lib/sisu/v5/dal.rb index 5bf9b87c..0a2a35b1 100644 --- a/lib/sisu/v5/dal.rb +++ b/lib/sisu/v5/dal.rb @@ -78,7 +78,7 @@ module SiSU_DAL require_relative 'dal_images' # dal_images.rb require_relative 'dal_metadata' # dal_metadata.rb require_relative 'dal_character_check' # dal_character_check.rb - require_relative 'dal_substitutions_and_insertions' # dal_substitutions_and_insertions.rb + require_relative 'dal_misc_arrange' # dal_misc_arrange.rb require_relative 'dal_expand_insertions' # dal_expand_insertions.rb require_relative 'prog_text_translation' # prog_text_translation.rb require_relative 'shared_sem' # shared_sem.rb @@ -479,7 +479,7 @@ module SiSU_DAL reset data=@data data=SiSU_DAL_Insertions::Insertions.new(@md,data).expand_insertions? # dal_expand_insertions.rb - data=SiSU_DAL_SubstituteAndInsert::SI.new(@md,data).substitutions_and_insertions? # dal_substitutions_and_insertions.rb + data=SiSU_DAL_MiscArrangeText::SI.new(@md,data).prepare_text # dal_misc_arrange.rb data,metadata=SiSU_DAL_DocumentStructureExtract::Build.new(@md,data).identify_parts # dal_doc_str.rb data=SiSU_DAL_Syntax::Markup.new(@md,data).songsheet # dal_syntax.rb data,endnote_array=SiSU_DAL_CharacterCheck::Check.new(data).character_check_and_oldstyle_endnote_array # dal_character_check.rb diff --git a/lib/sisu/v5/dal_doc_str.rb b/lib/sisu/v5/dal_doc_str.rb index c8174323..ebde930a 100644 --- a/lib/sisu/v5/dal_doc_str.rb +++ b/lib/sisu/v5/dal_doc_str.rb @@ -61,15 +61,33 @@ =end module SiSU_DAL_DocumentStructureExtract class Instantiate < SiSU_Param::Parameters::Instructions - @@flag={} #Beware!! + @@flag={ + ocn: :on, + code: :off, + poem: :off, + block: :off, + group: :off, + alt: :off, + table: :off, + table_to: :off, + } def initialize - @@flag['table_to']=false + @@flag[:table_to]=:off @@counter=@@column=@@columns=0 @@line_mode='' end end class Build - @@flag={} #Beware!! + @@flag={ + ocn: :on, + code: :off, + poem: :off, + block: :off, + group: :off, + alt: :off, + table: :off, + table_to: :off, + } def initialize(md,data) @md,@data=md,data SiSU_DAL_DocumentStructureExtract::Instantiate.new @@ -175,14 +193,15 @@ module SiSU_DAL_DocumentStructureExtract t_o=SiSU_DAL_DocumentStructure::ObjectFlag.new.flag_ocn(h) next end - t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") unless @@flag['code'] + t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") if @@flag[:code]==:off if t_o !~/^(?:code|poem|alt|group|block)\{|^\}(?:code|poem|alt|group|block)|^(?:table\{|\{table)[ ~]/ \ - and not @@flag['code'] \ - and not @@flag['poem'] \ - and not @@flag['group'] \ - and not @@flag['block'] \ - and not @@flag['alt'] \ - and not @@flag['table'] + and t_o !~/^```\s+(?:code|poem|alt|group|block)|^```(?:\s*[~-][#])?\s*$/ \ + and @@flag[:code]==:off \ + and @@flag[:poem]==:off \ + and @@flag[:group]==:off \ + and @@flag[:block]==:off \ + and @@flag[:alt]==:off \ + and @@flag[:table]==:off unless t_o =~/^(?:@\S+?:|%+)\s/ # extract book index for paragraph if any idx=if t_o=~/^=\{(.+)\}\s*$\Z/m; m=$1 t_o=t_o.gsub(/\n=\{.+\}\s*$\Z/m,'') @@ -326,39 +345,73 @@ module SiSU_DAL_DocumentStructureExtract SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) end end - elsif not @@flag['code'] - if t_o =~/^code\{/ - @@flag['code']=true + elsif @@flag[:code]==:off + if t_o =~/^(?:code\{|```\s+code)/ + @@flag[:code]=case t_o + when /^code\{/; :curls + when /^```\s+code/; :tics + else @@flag[:code] #error + end @@counter=1 - @codeblock_numbered=(t_o =~/^code\{#/) ? true : false + @codeblock_numbered=(t_o =~/^(?:code\{#|```\s+code\s[#])/) ? true : false h={ obj: 'code block start' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) - elsif t_o =~/^poem\{/ - @@flag['poem']=true + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + elsif t_o =~/^(?:poem\{|```\s+poem)/ + @@flag[:poem]=case t_o + when /^poem\{/; :curls + when /^```\s+poem/; :tics + else @@flag[:poem] #error + end h={ obj: 'poem start' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) tuned_file << t_o - elsif t_o =~/^group\{/ - @@flag['group']=true + elsif t_o =~/^(?:group\{|```\s+group)/ + @@flag[:group]=case t_o + when /^group\{/; :curls + when /^```\s+group/; :tics + else @@flag[:group] #error + end h={ obj: 'group text start' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) tuned_file << t_o - elsif t_o =~/^block\{/ - @@flag['block']=true + elsif t_o =~/^(?:block\{|```\s+block)/ + @@flag[:block]=case t_o + when /^block\{/; :curls + when /^```\s+block/; :tics + else @@flag[:block] #error + end h={ obj: 'block text start' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) tuned_file << t_o - elsif t_o =~/^alt\{/ - @@flag['alt']=true + elsif t_o =~/^(?:alt\{|```\s+alt)/ + @@flag[:alt]=case t_o + when /^alt\{/; :curls + when /^```\s+alt/; :tics + else @@flag[:alt] #error + end h={ obj: 'alt text start' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) tuned_file << t_o elsif t_o =~/^(?:table\{|\{table)[ ~]/ h={ obj: 'table start' } #introduce a counter - ins=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #ins=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + ins=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) tuned_file << ins if t_o=~/^table\{(?:~h)?\s+/ - @@flag['table']=true + @@flag[:table]=:curls + @rows='' + case t_o + when /table\{~h\s+c(\d+);\s+(.+)/ + cols=$1 + col=$2.scan(/\d+/) + heading=true + when /table\{\s+c(\d+);\s+(.+)/ + cols=$1 + col=$2.scan(/\d+/) + heading=false + end + @h={ head_: heading, cols: cols, widths: col, idx: idx } + elsif t_o=~/^```\s+table(?:~h)?\s+/ + @@flag[:table]=:tics @rows='' case t_o when /table\{~h\s+c(\d+);\s+(.+)/ @@ -427,21 +480,23 @@ module SiSU_DAL_DocumentStructureExtract end t_o end - if @@flag['table'] - if @@flag['table'] \ - and t_o =~/^\}table/ #two table representations should be consolidated as one - @@flag['table']=false + if @@flag[:table]==:curls or @@flag[:table]==:tics + if (@@flag[:table]==:curls \ + and t_o =~/^\}table/) \ + or (@@flag[:table]==:tics \ + and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:table]=:off headings,columns,widths,idx=@h[:head_],@h[:cols],@h[:widths],@h[:idx] @h={ head_: headings, cols: columns, widths: widths, idx: idx, obj: @rows } t_o=SiSU_DAL_DocumentStructure::ObjectTable.new.table(@h) tuned_file << t_o @h,@rows=nil,'' h={ obj: 'table end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) t_o else if t_o.is_a?(String) \ - and t_o !~/^table\{/ + and t_o !~/^(?:table\{|```\s+table)/ t_o=t_o.gsub(/^\n+/m,''). #check added for ruby 1.9.2 not needed in 1.8 series (tested in v2) gsub(/\n+/m,"#{Mx[:tc_p]}") @rows += t_o + Mx[:tc_c] @@ -449,9 +504,10 @@ module SiSU_DAL_DocumentStructureExtract t_o=nil end end - if @@flag['code'] - if t_o =~/^\}code/ - @@flag['code']=false + if @@flag[:code]==:curls or @@flag[:code]==:tics + if (@@flag[:code]==:curls and t_o =~/^\}code/) \ + or (@@flag[:code]==:tics and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:code]=:off obj=@tuned_code.join("\n") tags=[] h={ obj: obj, tags: tags, number_: @codeblock_numbered } @@ -459,66 +515,66 @@ module SiSU_DAL_DocumentStructureExtract @tuned_code=[] tuned_file << t_o h={ obj: 'code block end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) end - if @@flag['code'] \ + if (@@flag[:code]==:curls or @@flag[:code]==:tics) \ and t_o.is_a?(String) sub_array=t_o.dup + "#{Mx[:br_nl]}" - @line_mode=sub_array.scan(/.+/) @line_mode=[] sub_array.scan(/.+/) {|w| @line_mode << w if w =~/[\S]+/} - t_o=SiSU_DAL_DocumentStructureExtract::Build.new(@md,@line_mode).build_lines('code').join + t_o=SiSU_DAL_DocumentStructureExtract::Build.new(@md,@line_mode).build_lines(:code).join @tuned_code << t_o t_o=nil end - elsif @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['block'] \ - or @@flag['alt'] - if @@flag['poem'] \ - and t_o =~/^\}poem/ - @@flag['poem']=false + elsif (@@flag[:poem]==:curls or @@flag[:poem]==:tics) \ + or (@@flag[:group]==:curls or @@flag[:group]==:tics) \ + or (@@flag[:block]==:curls or @@flag[:block]==:tics) \ + or (@@flag[:alt]==:curls or @@flag[:alt]==:tics) + if (@@flag[:poem]==:curls and t_o =~/^\}poem/) \ + or (@@flag[:poem]==:tics and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:poem]=:off h={ obj: 'poem end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) - elsif ( @@flag['group'] \ - and t_o =~/^\}group/ ) - @@flag['group']=false + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + elsif (@@flag[:group]==:curls and t_o =~/^\}group/) \ + or (@@flag[:group]==:tics and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:group]=:off obj,tags=extract_tags(@tuned_block.join("\n")) h={ obj: obj, tags: tags } @tuned_block=[] t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.group(h) tuned_file << t_o h={ obj: 'group text end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) - elsif ( @@flag['block'] \ - and t_o =~/^\}block/ ) - @@flag['block']=false + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + elsif (@@flag[:block]==:curls and t_o =~/^\}block/) \ + or (@@flag[:block]==:tics and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:block]=:off obj,tags=extract_tags(@tuned_block.join("\n")) h={ obj: obj, tags: tags } @tuned_block=[] t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.block(h) tuned_file << t_o h={ obj: 'block text end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) - elsif ( @@flag['alt'] \ - and t_o =~/^\}alt/ ) - @@flag['alt']=false + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + elsif (@@flag[:alt]==:curls and t_o =~/^\}alt/) \ + or (@@flag[:alt]==:tics and t_o =~/^```(?:\s*[~-][#])?\s*$/) + @@flag[:alt]=:off obj,tags=extract_tags(@tuned_block.join("\n")) h={ obj: obj, tags: tags } t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.alt(h) @tuned_block=[] tuned_file << t_o h={ obj: 'alt text end' } #introduce a counter - t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) end - if @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['alt'] \ + if (@@flag[:poem]==:curls or @@flag[:poem]==:tics \ + or @@flag[:group]==:curls or @@flag[:group]==:tics \ + or @@flag[:alt]==:curls or @@flag[:alt]==:tics) \ and t_o =~/\S/ \ - and t_o !~/^(?:\}(?:verse|code|alt|group|block)|(?:verse|code|alt|group|block)\{)/ # fix logic + and t_o !~/^(?:\}(?:verse|code|alt|group|block)|(?:verse|code|alt|group|block)\{)/ \ + and t_o !~/^```\s+(?:code|poem|alt|group|block)|^```(?:\s*[~-][#])?\s*$/ # fix logic sub_array=t_o.dup @line_mode=sub_array.scan(/.+/) - type=if @@flag['poem'] + type=if @@flag[:poem]==:curls or @@flag[:poem]==:tics t_o=SiSU_DAL_DocumentStructureExtract::Build.new(@md,@line_mode).build_lines(type).join poem=t_o.split(/\n\n/) poem.each do |v| @@ -528,16 +584,16 @@ module SiSU_DAL_DocumentStructureExtract t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.verse(h) tuned_file << t_o end - 'poem' - else 'group' + :poem + else :group end end - @verse_count+=1 if @@flag['poem'] + @verse_count+=1 if @@flag[:poem]==:curls or @@flag[:poem]==:tics end - if not @@flag['code'] - if @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['alt'] + if @@flag[:code]==:off + if @@flag[:poem]==:curls or @@flag[:poem]==:tics \ + or @@flag[:group]==:curls or @@flag[:group]==:tics \ + or @@flag[:alt]==:curls or @@flag[:alt]==:tics if t_o.is_a?(String) t_o=t_o.gsub(/\n/m,"#{Mx[:br_nl]}"). gsub(/[ ][ ]/m,"#{Mx[:nbsp]*2}"). @@ -598,16 +654,17 @@ module SiSU_DAL_DocumentStructureExtract h={ obj: str, ocn_: false } SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) end - def build_lines(type='') + def build_lines(type=:none) lines,lines_new=@data,[] lines.each do |line| line=if line =~/\S/ \ - and line !~/^code\{|^\}code/ \ - and not line.is_a?(Hash) - @@counter+=1 if @@flag['code'] + and line !~/^(?:code\{|\}code)/ \ + and line !~/^(?:```\s+code|```(?:\s*[~-][#])?\s*$)/ \ + and not line.is_a?(Hash) #watch + @@counter+=1 if @@flag[:code]==:curls or @@flag[:code]==:tics line=line.gsub(/\s\s/,"#{Mx[:nbsp]*2}"). gsub(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") - line=line.gsub(/^/,"#{Mx[:gr_o]}codeline#{Mx[:gr_c]}") if type=='code' # REMOVE try sort for texpdf special case + line=line.gsub(/^/,"#{Mx[:gr_o]}codeline#{Mx[:gr_c]}") if type==:code # REMOVE try sort for texpdf special case line=if line =~/(?:https?|file|ftp):\/\/\S+$/ line.gsub(/\s*$/," #{Mx[:br_nl]}") else line.gsub(/\s*$/,"#{Mx[:br_nl]}") #unless type=='code' @@ -630,7 +687,7 @@ module SiSU_DAL_DocumentStructureExtract @dob end def structure_markup #build structure where structure provided only in meta header - @dob=if @dob.is ==:para \ + @dob=if @dob.is==:para \ && (((@dob.hang !~/[1-9]/) && (@dob.indent !~/[1-9]/)) \ || (@dob.hang != @dob.indent)) \ and not @dob.bullet_ @@ -672,7 +729,7 @@ module SiSU_DAL_DocumentStructureExtract parent=node1=node2=node3=node4=node5=node6=nil data.each do |dob| h={} - if (dob.obj !~ regex_exclude_ocn_and_node || dob.is ==:code) \ + if (dob.obj !~ regex_exclude_ocn_and_node || dob.is==:code) \ && (dob.of !=:comment \ && dob.of !=:layout \ && dob.of !=:meta) \ @@ -825,8 +882,8 @@ module SiSU_DAL_DocumentStructureExtract puts "<#{@s[0]}>" end data.each_with_index do |o,i| - if o.is ==:heading \ - || o.is ==:heading_insert + if o.is==:heading \ + || o.is==:heading_insert case o.ln when 1 tuned_file << tag_close(o.ln,hs) diff --git a/lib/sisu/v5/dal_expand_insertions.rb b/lib/sisu/v5/dal_expand_insertions.rb index ca234624..eb4f8363 100644 --- a/lib/sisu/v5/dal_expand_insertions.rb +++ b/lib/sisu/v5/dal_expand_insertions.rb @@ -332,9 +332,9 @@ module SiSU_DAL_Insertions tuned_file,tuned_file_tmp=[],[] codeblock_=false data.each do |para| - codeblock_=if para =~/^code\{/ + codeblock_=if para =~/^(?:code\{|```\s+code)/ true - elsif para =~/^\}code/ + elsif para =~/^(?:\}code|```)/m false else codeblock_ end diff --git a/lib/sisu/v5/dal_misc_arrange.rb b/lib/sisu/v5/dal_misc_arrange.rb new file mode 100644 index 00000000..c1751360 --- /dev/null +++ b/lib/sisu/v5/dal_misc_arrange.rb @@ -0,0 +1,155 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012, 2013 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + + + + + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + + + + * Download: + + + * Git + + + + * Ralph Amissah + + + + ** Description: system environment, resource control and configuration details + +=end +module SiSU_DAL_MiscArrangeText + class SI + def initialize(md,data) + @md,@data=md,data + end + def conditional_headings(para) + para=para.gsub(/^(:?A~)\s*$/,'\1~ @title @author'). #conditional header + gsub(/^((?:[1-9]|:?[A-C])~\S*)\s*$/,'\1~ [Note: heading marker::required title missing]~#') #conditional header for incorporated document 2004w12 + if para =~/^@\S+?:/ + para=para.gsub(/^@(\S+?):(\s+|$)/,"#{Mx[:meta_o]}\\1#{Mx[:meta_c]}\\2"). + gsub(/^@(\S+?):([+-])(\s+|$)/,"#{Mx[:meta_o]}\\1\\2#{Mx[:meta_c]}\\3") + end + para + end + def code_blocks(para) + def ticks(para) + block_open,block_close,text=nil,nil,nil + if para =~/\A(``` .+?)\n(.+?)\n(```(?: [~-][#])?)\s*\Z/m + block_open,text,block_close=/\A(``` .+?)\n(.+?)\n(```(?: [~-][#])?)\s*\Z/m.match(para)[1..3] + para=[] + para << block_open << text << block_close + elsif para =~/\A(``` .+?)\n(.*?)\Z/m #look at, study + block_open,text=/\A(```(?: .+?))\n(.*?)\Z/m.match(para)[1,2] + para=[] + if not text.to_s.empty? + para << block_open << text + else + para << block_open + end + elsif para =~/\A(.+?)\n(```(?:\s*[~-][#])?)\s*\Z/m + text,block_close=/\A(.+?)\n(```(?: [~-][#])?)\s*\Z/m.match(para)[1,2] + para=[] + if not text.to_s.empty? + para << text.to_s << block_close + else + para << block_close + end + else para + end + para + end + def curly_braces(para) + block_open,block_close,text=nil,nil,nil + para=if para =~/\A(?:code|poem|alt|group|block|table)\{ .+?\n.+?\n\}(?:code|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m + block_open,text,block_close=/\A((?:code|poem|alt|group|block|table)\{ .+?)\n(.+?)\n(\}(?:code|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.match(para)[1..3] + para=[] + para << block_open << text << block_close + elsif para =~/\A(?:code|poem|alt|group|block|table)\{ .+?\n.+?\Z/m + block_open,text=/\A((?:code|poem|alt|group|block|table)\{ .+?)\n(.+?)\Z/m.match(para)[1,2] + para=[] + if not text.to_s.empty? + para << block_open << text + else + para << block_open + end + elsif para =~/\A.+?\n\}(?:code|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m + text,block_close=/\A(.+?)\n(\}(?:code|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.match(para)[1,2] + para=[] + if not text.to_s.empty? + para << text.to_s << block_close + else + para << block_close + end + else para + end + para + end + para=para =~/^```/m \ + ? ticks(para) + : para + para=(para =~/^(?:code|poem|alt|group|block|table)\{|^\}(?:code|poem|alt|group|block|table)/m) \ + ? curly_braces(para) + : para + end + def prepare_text + data=@data + data_new=[],[] + if data[0] =~ /^#!\s*(?:\/usr\/bin\/env sisu|\/usr\/bin\/sisu)/ # remove bang from top #! (however file is stripped, so will be removed provided no content precedes it) + data[0]=data[0].gsub(/^#!\s*\/usr\/bin\/sisu/,''). + gsub(/^#!\s*\/usr\/bin\/env sisu/,'') + end + if data[0] =~ /^(SiSU\s+[\d.]*|sisu-[\d.]+)$/ # SiSU identifier + data[0]=data[0].gsub(/^(SiSU\s*[\d.]*)$/,'% \1'). + gsub(/^(sisu-[\d.]+)$/,'% \1') + end + data.each do |para| + para=conditional_headings(para) + data_new << code_blocks(para) + end + data_new=data_new.flatten + end + end +end +__END__ diff --git a/lib/sisu/v5/dal_substitutions_and_insertions.rb b/lib/sisu/v5/dal_substitutions_and_insertions.rb deleted file mode 100644 index eeabc1a5..00000000 --- a/lib/sisu/v5/dal_substitutions_and_insertions.rb +++ /dev/null @@ -1,145 +0,0 @@ -# encoding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011, 2012, 2013 Ralph Amissah, All Rights Reserved. - - * License: GPL 3 or later: - - SiSU, a framework for document structuring, publishing and search - - Copyright (C) Ralph Amissah - - This program is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation, either version 3 of the License, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - You should have received a copy of the GNU General Public License along with - this program. If not, see . - - If you have Internet connection, the latest version of the GPL should be - available at these locations: - - - - - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - - - - * Download: - - - * Git - - - - * Ralph Amissah - - - - ** Description: system environment, resource control and configuration details - -=end -module SiSU_DAL_SubstituteAndInsert - class SI - def initialize(md,data) - @md,@data=md,data - end - def substitutions_and_insertions? - data=@data - data_expand=[] - if data[0] =~ /^#!\s*(?:\/usr\/bin\/env sisu|\/usr\/bin\/sisu)/ # remove bang from top #! (however file is stripped, so will be removed provided no content precedes it) - data[0]=data[0].gsub(/^#!\s*\/usr\/bin\/sisu/,''). - gsub(/^#!\s*\/usr\/bin\/env sisu/,'') - end - if data[0] =~ /^(SiSU\s+[\d.]*|sisu-[\d.]+)$/ # SiSU identifier - data[0]=data[0].gsub(/^(SiSU\s*[\d.]*)$/,'% \1'). - gsub(/^(sisu-[\d.]+)$/,'% \1') - end - data.each do |para| - if para =~/<:(insert\d+)!?>/ \ - and para !~/^%\s+/ - ins=SiSU_Viz::Inserts.new - case para - when /^\s*<:(insert1)>\s*$/ - i=$1 - if defined? ins.insert1 - para=[] - ins.insert1.split(/\n\n/).each {|x| para << x } - end - when /^\s*<:(insert2)>\s*$/ - i=$1 - if defined? ins.insert2 - para=[] - ins.insert2.split(/\n\n/).each {|x| para << x } - end - when /^\s*<:(insert3)>\s*$/ - i=$1 - if defined? ins.insert3 - para=[] - ins.insert3.split(/\n\n/).each {|x| para << x << "\n"} - end - when /^\s*<:(insert4)>\s*$/ - i=$1 - if defined? ins.insert4 - para=[] - ins.insert4.split(/\n\n/).each {|x| para << x << "\n"} - end - when /^\s*<:(insert5)>\s*$/ - i=$1 - if defined? ins.insert5 - para=[] - ins.insert5.split(/\n\n/).each {|x| para << x << "\n"} - end - when /^\s*<:(insert6)>\s*$/ - i=$1 - if defined? ins.insert6 - para=[] - ins.insert6.split(/\n\n/).each {|x| para << x << "\n"} - end - when /^\s*<:(insert7)>\s*$/ - i=$1 - if defined? ins.insert7 - para=[] - ins.insert7.split(/\n\n/).each {|x| para << x << "\n"} - end - end - para.each {|x| data_expand << x } - else data_expand << para - end - data_expand=data_expand.flatten.compact - end - data_new=[] - data_expand.each do |para| - para=para.gsub(/^(:?A~)\s*$/,'\1~ @title @author'). #conditional header - gsub(/^((?:[1-9]|:?[A-C])~\S*)\s*$/,'\1~ [Note: heading marker::required title missing]~#') #conditional header for incorporated document 2004w12 - if para =~/^@\S+?:/ - para=para.gsub(/^@(\S+?):(\s+|$)/,"#{Mx[:meta_o]}\\1#{Mx[:meta_c]}\\2"). - gsub(/^@(\S+?):([+-])(\s+|$)/,"#{Mx[:meta_o]}\\1\\2#{Mx[:meta_c]}\\3") - end - data_new << para - end - data_new - end - end -end -__END__ -- cgit v1.2.3