Module: Livetext::Standard

Included in:
Processor
Defined in:
lib/standard.rb

Constant Summary collapse

SimpleFormats =

Move this?

{ b: %w[<b> </b>],
i: %w[<i> </i>],
t: ["<font size=+1><tt>", "</tt></font>"],
s: %w[<strike> </strike>] }

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_dataObject (readonly)

Returns the value of attribute _data.



9
10
11
# File 'lib/standard.rb', line 9

def _data
  @_data
end

Instance Method Details

#_defObject

def _next_output(tag = “sec”, num = nil)

  @_file_num = num ? num : @_file_num + 1
  @_file_num = @_file_num.to_i
  name = "#{'%03d' % @_file_num}-#{tag}.html"
  _output(name)
end


146
147
148
149
150
151
152
153
154
155
156
# File 'lib/standard.rb', line 146

def _def
  name = @_args[0]
  str = "def #{name}\n"
  raise "Illegal name '#{name}'" if _disallowed?(name)
  str += _body_text(true)
  str += "\nend\n"
  eval str
rescue => err
  _error!(err)
#   puts @body
end

#_includeObject



234
235
236
237
238
239
# File 'lib/standard.rb', line 234

def _include
  file = @_args.first
  _check_existence(file, "No such include file '#{file}'")
  @parent.process_file(file)
  _optional_blank_line
end

#_include_file(file) ⇒ Object



241
242
243
244
# File 'lib/standard.rb', line 241

def _include_file(file)
  @_args = [file]
  _include
end

#_seek(file) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
# File 'lib/standard.rb', line 206

def _seek(file)
 if File.exist?(file)
  return file
else
    value = nil
  value = _seek("../#{file}") unless Dir.pwd == "/"
end
 return value
rescue
 return nil
end

#backtraceObject



25
26
27
28
29
# File 'lib/standard.rb', line 25

def backtrace
  arg = @_args.first
  @backtrace = true
  @backtrace = false if arg == "off"
end


67
68
69
70
71
72
73
# File 'lib/standard.rb', line 67

def banner
  str = _format(@_data)
  n = str.length - 1
  puts "-"*n
  puts str
  puts "-"*n
end

#bitsObject

dumb name - bold, italic, teletype, striketrough



17
18
19
20
21
22
23
# File 'lib/standard.rb', line 17

def bits  # dumb name - bold, italic, teletype, striketrough
  b0, b1, i0, i1, t0, t1, s0, s1 = *@_args
  SimpleFormats[:b] = [b0, b1]
  SimpleFormats[:i] = [i0, i1]
  SimpleFormats[:t] = [t0, t1]
  SimpleFormats[:s] = [s0, s1]
end

#brObject



432
433
434
435
436
437
# File 'lib/standard.rb', line 432

def br
  n = _args.first || "1"
  out = ""
  n.to_i.times { out << "<br>" }
  _out out
end

#cleanupObject

def outdir

  @_outdir = @_args.first
  _optional_blank_line
end

def outdir!  # FIXME ?
  @_outdir = @_args.first
  raise "No output directory specified" if @_outdir.nil?
  raise "No output directory specified" if @_outdir.empty?
  system("rm -f #@_outdir/*.html")
  _optional_blank_line
end

def _output(name)
  @_outdir ||= "."  # FIXME
  @output.puts @body
  @body = ""
  @output.close unless @output == STDOUT
  @output = File.open(@_outdir + "/" + name, "w")
  @output.puts "<meta charset='UTF-8'>\n\n"
end

def _append(name)
  @_outdir ||= "."  # FIXME
  @output.close unless @output == STDOUT
  @output = File.open(@_outdir + "/" + name, "a")
  @output.puts "<meta charset='UTF-8'>\n\n"
end

def output
  name = @_args.first
  _debug "Redirecting output to: #{name}"
  _output(name)
end

def append
  file = @_args[0]
  _append(file)
end

def next_output
  tag, num = @_args
  _next_output(tag, num)
  _optional_blank_line
end


129
130
131
132
133
134
135
136
137
# File 'lib/standard.rb', line 129

def cleanup
  @_args.each do |item| 
    if ::File.directory?(item)
      system("rm -f #{item}/*")
    else
      ::FileUtils.rm(item)
    end
  end
end

#commentObject



31
32
33
# File 'lib/standard.rb', line 31

def comment
  _body
end

#copyObject



299
300
301
302
303
304
# File 'lib/standard.rb', line 299

def copy
  file = @_args.first
  _check_existence(file, "No such file '#{file}' to copy")
  _out grab_file(file)
  _optional_blank_line
end

#data=(val) ⇒ Object



11
12
13
14
15
# File 'lib/standard.rb', line 11

def data=(val)
  @_data = val
  @_args = val.split rescue []
  @_mixins = []
end

#debugObject



315
316
317
318
319
# File 'lib/standard.rb', line 315

def debug
  arg = @_args.first
  self._debug = true
  self._debug = false if arg == "off"
end

#dlistObject



372
373
374
375
376
377
378
379
380
381
382
# File 'lib/standard.rb', line 372

def dlist
  delim = _args.first
  _out "<dl>"
  _body do |line|
    line = _format(line)
    term, defn = line.split(delim)
    _out "<dt>#{term}</dt>"
    _out "<dd>#{defn}</dd>"
  end
  _out "</dl>"
end

#erroutObject



57
58
59
# File 'lib/standard.rb', line 57

def errout
  TTY.puts @_data
end

#funcObject



41
42
43
44
45
46
47
48
49
50
# File 'lib/standard.rb', line 41

def func
  funcname = @_args[0]
  _error! "Illegal name '#{funcname}'" if _disallowed?(funcname)
  func_def = <<-EOS
    def #{funcname}(param)
      #{_body_text(true)}
    end
EOS
  Livetext::Functions.class_eval func_def
end

#headingObject



351
352
353
354
355
# File 'lib/standard.rb', line 351

def heading
  _print "<center><font size=+1><b>"
  _print @_data
  _print "</b></font></center>"
end

#heredocObject



183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/standard.rb', line 183

def heredoc
  var = @_args[0]
  str = _body_text
  s2 = ""
  str.each_line do |s|
    s2 << s.chomp + "<br>"
  end
  indent = @parent.indentation.last
  indented = " " * indent
  #  s2 = ""
  #  str.each_line do |line|
  #    if line.start_with?(indented)
  #      line.replace(line[indent..-1])
  #    else
  #      STDERR.puts "Error? heredoc not indented?"
  #      return
  #    end
  #    s2 << line
  #  end
  @parent._setvar(var, s2.chomp)
  _optional_blank_line
end

#in_outObject

FIXME dumb name!



227
228
229
230
231
232
# File 'lib/standard.rb', line 227

def in_out  # FIXME dumb name!
  file, dest = *@_args
  _check_existence(file, "No such include file '#{file}'")
  @parent.process_file(file, dest)
  _optional_blank_line
end

#inheritObject



246
247
248
249
250
251
252
253
254
255
# File 'lib/standard.rb', line 246

def inherit
  file = @_args.first
  upper = "../#{file}"
  good = (File.exist?(upper) || File.exist?(file))
  _error!("File #{file} not found (local or parent)") unless good

  @parent.process_file(upper) if File.exist?(upper)
  @parent.process_file(file)  if File.exist?(file)
  _optional_blank_line
end

#invoke(str) ⇒ Object



362
363
# File 'lib/standard.rb', line 362

def invoke(str)
end


397
398
399
400
401
# File 'lib/standard.rb', line 397

def link
  url = _args.first
  text = _args[2..-1].join(" ")
  _out "<a href='#{url}'>#{text}</a>"
end

#mixinObject

def include! # FIXME huh?

file = @_args.first
return unless File.exist?(file)

lines = @parent.process_file(file)

#? File.delete(file)

  _optional_blank_line
end


266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
# File 'lib/standard.rb', line 266

def mixin
  name = @_args.first   # Expect a module name
  file = "#{Plugins}/" + name.downcase + ".rb"
  return if @_mixins.include?(name)
  file = "./#{name}.rb" unless File.exist?(file)
  if File.exist?(file)
    # Just keep going...
  else
    if File.expand_path(".") != "/"
      Dir.chdir("..") { mixin }
      return
    else
      STDERR.puts "No such mixin '#{name}"
      puts @body
      exit!
    end
  end

  @_mixins << name
  meths = grab_file(file)
  modname = name.gsub("/","_").capitalize
  string = "module ::#{modname}; #{meths}\nend"
# puts "==========="
# string.each_line.with_index {|line, i| puts "#{'%3d' % (i+1)} : #{line}" }
# puts "==========="
  eval(string)
  newmod = Object.const_get("::" + modname)
  self.extend(newmod)
  init = "init_#{name}"
  self.send(init) if self.respond_to? init
  _optional_blank_line
end

#monoObject



365
366
367
368
369
370
# File 'lib/standard.rb', line 365

def mono
  _out "<pre>"
  _body(true) {|line| _out line }
  _out "</pre>"
  _optional_blank_line
end

#newpageObject



357
358
359
360
# File 'lib/standard.rb', line 357

def newpage
  _out '<p style="page-break-after:always;"></p>'
  _out "<p/>"
end

#noparaObject



347
348
349
# File 'lib/standard.rb', line 347

def nopara
  @_nopara = true
end

#nopassObject



332
333
334
# File 'lib/standard.rb', line 332

def nopass
  @_nopass = true
end

#old_dlistObject



384
385
386
387
388
389
390
391
392
393
394
395
# File 'lib/standard.rb', line 384

def old_dlist
  delim = _args.first
  _out "<table>"
  _body do |line|
    line = _format(line)
    term, defn = line.split(delim)
    _out "<tr>"
    _out "<td width=3%><td width=10%>#{term}</td><td>#{defn}</td>"
    _out "</tr>"
  end
  _out "</table>"
end

#paraObject



336
337
338
339
340
341
342
343
344
345
# File 'lib/standard.rb', line 336

def para
  # FIXME - add check for args size (helpers); _onoff helper??
  onoff = _args.first
  case onoff
    when nil;   @_nopara = false
    when "on";  @_nopara = false
    when "off"; @_nopara = true
    else _error!("Unknown arg '#{onoff}'")
  end
end

#passthruObject



321
322
323
324
325
326
327
328
329
330
# File 'lib/standard.rb', line 321

def passthru
  # FIXME - add check for args size (helpers); _onoff helper??
  onoff = _args.first
  case onoff
    when nil;   @_nopass = false
    when "on";  @_nopass = false
    when "off"; @_nopass = true
    else _error!("Unknown arg '#{onoff}'")
  end
end

#quitObject



75
76
77
78
79
80
# File 'lib/standard.rb', line 75

def quit
  puts @body
  @body = ""
  @output.close
#   exit!
end

#rObject



306
307
308
# File 'lib/standard.rb', line 306

def r
  _out @_data  # No processing at all
end

#rawObject



310
311
312
313
# File 'lib/standard.rb', line 310

def raw
  # No processing at all (terminate with __EOF__)
  _raw_body {|x| _out x }  # no formatting
end

#sayObject



61
62
63
64
65
# File 'lib/standard.rb', line 61

def say
  str = _format(@_data)
  TTY.puts str
  _optional_blank_line
end

#seekObject



218
219
220
221
222
223
224
225
# File 'lib/standard.rb', line 218

def seek
  # like include, but search upward as needed
  file = @_args.first
file = _seek(file)
  _error!(file, "No such include file '#{file}'") unless file
  @parent.process_file(file)
  _optional_blank_line
end

#setObject



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/standard.rb', line 158

def set
  assigns = @_data.chomp.split(/, */)
  # Do a better way?
  # FIXME *Must* allow for vars/functions
  assigns.each do |a| 
    var, val = a.split("=")
    var.strip!
    val.strip!
    val = val[1..-2] if val[0] == ?" && val[-1] == ?"
    val = val[1..-2] if val[0] == ?' && val[-1] == ?'
    val = FormatLine.var_func_parse(val)
    @parent._setvar(var, val)
  end
  _optional_blank_line
end

#shellObject



35
36
37
38
39
# File 'lib/standard.rb', line 35

def shell
  cmd = @_data
  _errout("Running: #{cmd}")
  system(cmd)
end

#shell!Object



52
53
54
55
# File 'lib/standard.rb', line 52

def shell!
  cmd = @_data
  system(cmd)
end

#variablesObject



174
175
176
177
178
179
180
181
# File 'lib/standard.rb', line 174

def variables
  _body.each do |line|
    next if line.strip.empty?
    var, val = line.split(" ", 2)
    val = FormatLine.var_func_parse(val)
    @parent._setvar(var, val)
  end
end

#xtableObject

Borrowed from bookish - FIXME



403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
# File 'lib/standard.rb', line 403

def xtable   # Borrowed from bookish - FIXME
  title = @_data
  delim = " :: "
  _out "<br><center><table width=90% cellpadding=5>"
  lines = _body(true)
  maxw = nil
  lines.each do |line|
    line = _format(line)
    line.gsub!(/\n+/, "<br>")
    cells = line.split(delim)
    wide = cells.map {|x| x.length }
    maxw = [0] * cells.size
    maxw = maxw.map.with_index {|x, i| [x, wide[i]].max }
  end

  sum = maxw.inject(0, :+)
  maxw.map! {|x| (x/sum*100).floor }

  lines.each do |line|
    cells = line.split(delim)
    _out "<tr>"
    cells.each.with_index do |cell, i| 
      _out "  <td valign=top>#{cell}</td>"
    end
    _out "</tr>"
  end
  _out "</table></center>"
end