Class: SiSU_AO_MiscArrangeText::SI

Inherits:
Object
  • Object
show all
Defined in:
lib/sisu/ao_misc_arrange.rb

Instance Method Summary collapse

Constructor Details

#initialize(md, data) ⇒ SI

Returns a new instance of SI.



59
60
61
# File 'lib/sisu/ao_misc_arrange.rb', line 59

def initialize(md,data)
  @md,@data=md,data
end

Instance Method Details

#conditional_headings(para) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sisu/ao_misc_arrange.rb', line 62

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) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/sisu/ao_misc_arrange.rb', line 140

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) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/sisu/ao_misc_arrange.rb', line 74

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_textObject



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/sisu/ao_misc_arrange.rb', line 190

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) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/sisu/ao_misc_arrange.rb', line 75

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) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/sisu/ao_misc_arrange.rb', line 119

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) ⇒ Object



110
111
112
113
114
115
116
117
118
# File 'lib/sisu/ao_misc_arrange.rb', line 110

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