class SiSU_AO_MiscArrangeText::SI

Public Class Methods

new(md,data) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 57
def initialize(md,data)
  @md,@data=md,data
end

Public Instance Methods

conditional_headings(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 60
def conditional_headings(para)
  para=para.gsub(/^(:?A~)\s*$/,'\1~ @title @author').            #conditional header
    gsub(/^((?:[1-9]|:?[A-D])~\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
curly_braces(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 138
def curly_braces(para)
  block_open,block_close,text=nil,nil,nil
  para=if para =~/\A(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?\n.+?\n\}(?:code|box|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
    block_open,text,block_close=
      /\A((?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?)\n(.+?)\n(\}(?:code|box|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.
      match(para)[1..3]
    para=[]
    para << block_open << text << block_close
  elsif para =~/\A(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?\n.+?\Z/m
    block_open,text=
      /\A((?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|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|box|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
    text,block_close=
      /\A(.+?)\n(\}(?:code|box|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
markup_blocks(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 72
def markup_blocks(para)
  def ticks(para)
    block_open,block_close,text=nil,nil,nil
    if para =~/\A```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?\n.+?\n```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m
      @flag=:close
      block_open,text,block_close=
        /\A(```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?)\n(.+?)\n(```([ ]+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.
        match(para)[1..3]
      ((para=~/^```[ ]+table(?:~h)?\s+/) \
      and (para !~/^```[ ]+table(?:~h)?\s+c\d+/)) \
      ? para
      : (para=[]; para << block_open << text << block_close)
    elsif para =~/\A```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?\n.*?\Z/m #look at, study
      @flag=:open
      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+[~-][#])?(\s*=\{.+?\})?\s*\Z/m \
    and @flag==:open
      @flag=:close
      text,block_close=
        /\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
      else
        para << block_close
      end
    else para
    end
    para
  end
  def ticks_remove(para)
    unless @md.opt.act[:quiet][:set] ==:on
      SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
       mark("ticks not recognized, ticks removed from pargraph\n#{para}")
    end
    para=para.gsub(/```[ ]+\S+[ ]*/m,'').
      gsub(/```\s*/m,'').
      strip
  end
  def ticks_quote(para)
    @flag=:quote_open
    text=para
    para=[]
    if text =~ /```[ ]+quote/m
      para << '`:quote_open`'
      text=text.gsub(/```[ ]+quote/m,'')
    end
    text=if text =~/(?:\n|\A)=\{.+?\}/m                               #exclude book index from indent markup
      txt,bkidx,tail=/(.+?)((?:\n|\A)=\{.+?\}$)(.*)/m.match(text).captures
      txt=txt.gsub(/(?:\n|\A)([^`\n]+)/m,'_1 \1')
      txt + bkidx + tail
    else text.gsub(/(?:\n|\A)([^`\n]+)/m,'_1 \1')
    end
    para << text.gsub(/```/m,'')
    if text =~/```/m
      @flag=:quote_close
      para << '`:quote_close`'
    end
    para
  end
  def curly_braces(para)
    block_open,block_close,text=nil,nil,nil
    para=if para =~/\A(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?\n.+?\n\}(?:code|box|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
      block_open,text,block_close=
        /\A((?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?)\n(.+?)\n(\}(?:code|box|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.
        match(para)[1..3]
      para=[]
      para << block_open << text << block_close
    elsif para =~/\A(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{ .+?\n.+?\Z/m
      block_open,text=
        /\A((?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|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|box|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
      text,block_close=
        /\A(.+?)\n(\}(?:code|box|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=if (para =~/\A```[ ]+quote/m \
  and @flag !=:open) \
  or @flag==:quote_open
    ticks_quote(para)
  elsif para =~/\A```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?\n.*?\Z/m \
  or @flag==:open
    ticks(para)
  elsif para =~/```/m
    ticks_remove(para)
  else
    para
  end
  para=if para =~/^(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table)\{|^\}(?:code|box|poem|alt|group|block|table)/m
    curly_braces(para)
  else
    para
  end
end
prepare_text() click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 188
def prepare_text
  data=@data
  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.map do |para|
    para=conditional_headings(para)
    markup_blocks(para)
  end.flatten
end
ticks(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 73
def ticks(para)
  block_open,block_close,text=nil,nil,nil
  if para =~/\A```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?\n.+?\n```(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m
    @flag=:close
    block_open,text,block_close=
      /\A(```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?)\n(.+?)\n(```([ ]+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.
      match(para)[1..3]
    ((para=~/^```[ ]+table(?:~h)?\s+/) \
    and (para !~/^```[ ]+table(?:~h)?\s+c\d+/)) \
    ? para
    : (para=[]; para << block_open << text << block_close)
  elsif para =~/\A```[ ]+(?:code(?:\.[a-z][0-9a-z_]+)?|box(?:\.[a-z_]+)?|poem|alt|group|block|table).*?\n.*?\Z/m #look at, study
    @flag=:open
    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+[~-][#])?(\s*=\{.+?\})?\s*\Z/m \
  and @flag==:open
    @flag=:close
    text,block_close=
      /\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
    else
      para << block_close
    end
  else para
  end
  para
end
ticks_quote(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 117
def ticks_quote(para)
  @flag=:quote_open
  text=para
  para=[]
  if text =~ /```[ ]+quote/m
    para << '`:quote_open`'
    text=text.gsub(/```[ ]+quote/m,'')
  end
  text=if text =~/(?:\n|\A)=\{.+?\}/m                               #exclude book index from indent markup
    txt,bkidx,tail=/(.+?)((?:\n|\A)=\{.+?\}$)(.*)/m.match(text).captures
    txt=txt.gsub(/(?:\n|\A)([^`\n]+)/m,'_1 \1')
    txt + bkidx + tail
  else text.gsub(/(?:\n|\A)([^`\n]+)/m,'_1 \1')
  end
  para << text.gsub(/```/m,'')
  if text =~/```/m
    @flag=:quote_close
    para << '`:quote_close`'
  end
  para
end
ticks_remove(para) click to toggle source
# File lib/sisu/ao_misc_arrange.rb, line 108
def ticks_remove(para)
  unless @md.opt.act[:quiet][:set] ==:on
    SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
     mark("ticks not recognized, ticks removed from pargraph\n#{para}")
  end
  para=para.gsub(/```[ ]+\S+[ ]*/m,'').
    gsub(/```\s*/m,'').
    strip
end