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



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

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



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

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

#_seek(file) ⇒ Object



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

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



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

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



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

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



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

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

#dlistObject



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

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 = "    def \#{funcname}(param)\n      \#{_body_text(true)}\n    end\n"
  Livetext::Functions.class_eval func_def
end

#headingObject



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

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

#heredocObject



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

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!



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

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



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

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



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

def invoke(str)
end


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

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


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
298
# File 'lib/standard.rb', line 267

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



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

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

#newpageObject



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

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

#noparaObject



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

def nopara
  @_nopara = true
end

#nopassObject



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

def nopass
  @_nopass = true
end

#old_dlistObject



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

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



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

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



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

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



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

def r
  _out @_data  # No processing at all
end

#rawObject



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

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



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

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
173
# 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("=")
STDERR.puts "-- var=val  #{[var, val].inspect}"
    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



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

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



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
431
# File 'lib/standard.rb', line 404

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