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

#_append(name) ⇒ Object



100
101
102
103
104
105
# File 'lib/standard.rb', line 100

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

#_defObject



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/standard.rb', line 141

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



212
213
214
215
216
217
218
# File 'lib/standard.rb', line 212

def _include
  file = @_args.first

  _check_existence(file, "No such include file '#{file}'")
  @parent.process_file(file)
  _optional_blank_line
end

#_next_output(tag = "sec", num = nil) ⇒ Object



134
135
136
137
138
139
# File 'lib/standard.rb', line 134

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

#_output(name) ⇒ Object



93
94
95
96
97
98
# File 'lib/standard.rb', line 93

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

#_seek(file) ⇒ Object



192
193
194
195
196
197
198
199
200
201
# File 'lib/standard.rb', line 192

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

#appendObject



113
114
115
116
# File 'lib/standard.rb', line 113

def append
  file = @_args[0]
  _append(file)
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



402
403
404
405
406
407
# File 'lib/standard.rb', line 402

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

#cleanupObject



124
125
126
127
128
129
130
131
132
# File 'lib/standard.rb', line 124

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



269
270
271
272
273
274
# File 'lib/standard.rb', line 269

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



285
286
287
288
289
# File 'lib/standard.rb', line 285

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

#dlistObject



342
343
344
345
346
347
348
349
350
351
352
# File 'lib/standard.rb', line 342

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



321
322
323
324
325
# File 'lib/standard.rb', line 321

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

#heredocObject



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/standard.rb', line 169

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

#inheritObject



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

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



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

def invoke(str)
end


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

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


240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
# File 'lib/standard.rb', line 240

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
    end
  end

  @_mixins << name
  meths = grab_file(file)
  modname = name.gsub("/","_").capitalize
  string = "module ::#{modname}\n#{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



335
336
337
338
339
340
# File 'lib/standard.rb', line 335

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

#newpageObject



327
328
329
330
# File 'lib/standard.rb', line 327

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

#next_outputObject



118
119
120
121
122
# File 'lib/standard.rb', line 118

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

#noparaObject



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

def nopara
  @_nopara = true
end

#nopassObject



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

def nopass
  @_nopass = true
end

#old_dlistObject



354
355
356
357
358
359
360
361
362
363
364
365
# File 'lib/standard.rb', line 354

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

#outdirObject



80
81
82
83
# File 'lib/standard.rb', line 80

def outdir
  @_outdir = @_args.first
  _optional_blank_line
end

#outdir!Object

FIXME ?



85
86
87
88
89
90
91
# File 'lib/standard.rb', line 85

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

#outputObject



107
108
109
110
111
# File 'lib/standard.rb', line 107

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

#paraObject



306
307
308
309
310
311
312
313
314
315
# File 'lib/standard.rb', line 306

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



291
292
293
294
295
296
297
298
299
300
# File 'lib/standard.rb', line 291

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

def quit
  @output.close
  exit
end

#rObject



276
277
278
# File 'lib/standard.rb', line 276

def r
  _out @_data  # No processing at all
end

#rawObject



280
281
282
283
# File 'lib/standard.rb', line 280

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



203
204
205
206
207
208
209
210
# File 'lib/standard.rb', line 203

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



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/standard.rb', line 153

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

#xtableObject

Borrowed from bookish - FIXME



373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
# File 'lib/standard.rb', line 373

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