livetext 0.9.20 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/livetext CHANGED
@@ -82,8 +82,6 @@ loop do
82
82
  when "-i", "--install"
83
83
  lib = ARGV.shift
84
84
  system("cp #{lib} #{Livetext::Path}/../plugin/")
85
- # when /-.*/
86
- # raise "Unknown argument '#{arg}'"
87
85
  when Object
88
86
  x.process_file(arg, true) # , @backtrace)
89
87
  end
data/imports/markdown.rb CHANGED
@@ -9,12 +9,12 @@ module Markdown
9
9
  SimpleFormats[:s] = %w[<strike> </strike>]
10
10
 
11
11
 
12
- def h1(args = nil, body = nil); _out "# #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end # atx style for now
13
- def h2(args = nil, body = nil); _out "## #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
14
- def h3(args = nil, body = nil); _out "### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
15
- def h4(args = nil, body = nil); _out "#### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
16
- def h5(args = nil, body = nil); _out "##### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
17
- def h6(args = nil, body = nil); _out "###### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
12
+ def h1(args = nil, body = nil); _out "# #{Livetext.interpolate(@_data)}"; _optional_blank_line end # atx style for now
13
+ def h2(args = nil, body = nil); _out "## #{Livetext.interpolate(@_data)}"; _optional_blank_line end
14
+ def h3(args = nil, body = nil); _out "### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
15
+ def h4(args = nil, body = nil); _out "#### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
16
+ def h5(args = nil, body = nil); _out "##### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
17
+ def h6(args = nil, body = nil); _out "###### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
18
18
 
19
19
  def title(args = nil, body = nil)
20
20
  h1
@@ -3,44 +3,43 @@
3
3
 
4
4
  require_relative '../lib/livetext/importable'
5
5
 
6
- class MarkdownImportable < LiveText::Importable
7
-
8
- SimpleFormats[:b] = %w[* *]
9
- SimpleFormats[:i] = %w[_ _]
10
- SimpleFormats[:t] = %w[` `]
11
- SimpleFormats[:s] = %w[<strike> </strike>]
12
-
13
- def h1; _out "# #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end # atx style for now
14
- def h2; _out "## #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
15
- def h3; _out "### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
16
- def h4; _out "#### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
17
- def h5; _out "##### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
18
- def h6; _out "###### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
19
-
20
- def title
21
- h1
22
- end
6
+ class MarkdownImportable < LiveText::Importable
7
+
8
+ SimpleFormats[:b] = %w[* *]
9
+ SimpleFormats[:i] = %w[_ _]
10
+ SimpleFormats[:t] = %w[` `]
11
+ SimpleFormats[:s] = %w[<strike> </strike>]
12
+
13
+ def h1; _out "# #{Livetext.interpolate(@_data)}"; _optional_blank_line end # atx style for now
14
+ def h2; _out "## #{Livetext.interpolate(@_data)}"; _optional_blank_line end
15
+ def h3; _out "### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
16
+ def h4; _out "#### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
17
+ def h5; _out "##### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
18
+ def h6; _out "###### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
19
+
20
+ def title
21
+ h1
22
+ end
23
23
 
24
- def section
25
- h3
26
- end
24
+ def section
25
+ h3
26
+ end
27
27
 
28
- def bq # block quote
29
- _body {|line| _out "> #{line}" }
30
- end
28
+ def bq # block quote
29
+ _body {|line| _out "> #{line}" }
30
+ end
31
31
 
32
- def list
33
- _body {|line| _out " * #{line}" }
34
- end
32
+ def list
33
+ _body {|line| _out " * #{line}" }
34
+ end
35
35
 
36
- def olist # Doesn't handle paragraphs yet
37
- n = 0
38
- _body do |line|
39
- n += 1
40
- _out "#{n}. #{_format(line)}"
41
- end
36
+ def olist # Doesn't handle paragraphs yet
37
+ n = 0
38
+ _body do |line|
39
+ n += 1
40
+ _out "#{n}. #{_format(line)}"
42
41
  end
43
-
44
- alias nlist olist
45
42
  end
43
+
44
+ alias nlist olist
46
45
  end
data/imports/tutorial.rb CHANGED
@@ -85,7 +85,7 @@ module Tutorial
85
85
  def testcase(args = nil, body = nil)
86
86
  name = _args.first
87
87
  _out "\n<font size=+1><b>Test: </font><font size=+2><tt>#{name}</tt></font></b></h3><br>"
88
- src, exp = "test/data/#{name}/source.lt3", "test/data/#{name}/expected-output.txt"
88
+ src, exp = "test/snapshots/#{name}/source.lt3", "test/snapshots/#{name}/expected-output.txt"
89
89
  @_args = [src, exp] # Better way to do this??
90
90
  put_table(src, exp)
91
91
  _out "<br>"
data/lib/cmdargs.rb CHANGED
@@ -4,44 +4,53 @@ require_relative 'livetext'
4
4
  Weird concepts to understand here...
5
5
 
6
6
  1. A Livetext dot-command (flush left) usually looks like:
7
- .foobar
7
+ .foobar
8
+
8
9
  2. A dot-command (left-indented) usually looks like:
9
- $.foobar
10
+ $.foobar
11
+
10
12
  3. More generally, it may have any number of parameters (0, 1, ...)
11
- .redirect somefile.txt append
13
+ .redirect somefile.txt append
14
+
12
15
  4. Variables and functions *can* appear (rare in practice??)
13
- .redirect somefile$my_suffix $$my_mode
16
+ .redirect somefile$my_suffix $$my_mode
17
+
14
18
  5. A trailing # comment may appear
15
19
  a. Stripped... saved in #raw ? #data ? #comment ? elsewhere?
16
20
  b. NOT the "dot" as a comment!
21
+
17
22
  6. .foobar # This here is a comment
23
+
18
24
  7. #data accessor returns all data on the .foo line...
19
25
  a. ...After the initial space
20
- b. ...Including spaces
26
+ b. ...Including later spaces
21
27
  c. Including comment??
22
28
  d. .foo This is o n l y a test.
23
29
  # #data returns: "This is o n l y a test."
24
30
  e. What about formatting???
25
31
  f. What about: comments? variables? functions?
26
32
 
27
- 7. Some commands have NO body while others have an OPTIONAL or REQUIRED body
33
+ 8. Some commands have NO body while others have an OPTIONAL or REQUIRED body
28
34
  a. Assume .cmd1 definition forbids a body (then a body is an error)
29
35
  .cmd1 # may NOT have a body
30
36
  b. Assume .cmd2 definition PERMITS a body
31
37
  .cmd2 # may or MAY NOT have body/.end
32
- c. Assume .cmd3 definition PERMITS a body
38
+ c. Assume .cmd3 definition REQUIRES a body
33
39
  .cmd3 # REQUIRES a body/.end
34
40
  . stuff...
35
41
  .end
36
- 8. Inside a body:
37
- 8a. Leading dot has no special meaning (though the associated method may parse it!)
38
- 8b. BUG? Currently leading dot is a comment INSIDE a body?
39
- 8a. No leading char is special (though the associated method may parse it!)
40
- 8a. No trailing #-comments (though the associated method may parse it!)
41
- 8c. ?? We should or shouldn't look for variables/functions? or make it an option?
42
- 8d. .end may naturally not be used (but see .raw where it may)
43
- 9. the args accessor is a simple array of strings
44
42
 
43
+ 9. Inside a body:
44
+ a. Leading dot has no special meaning (though the associated method may parse it!)
45
+ b. BUG? Currently leading dot is a comment INSIDE a body?
46
+ c. No leading char is special (though the associated method may parse it!)
47
+ d. No trailing #-comments (though the associated method may parse it!)
48
+ e. ?? We should or shouldn't look for variables/functions? or make it an option?
49
+ f. .end may naturally not be used (but see .raw where it may)
50
+
51
+ 10. The args accessor is a simple array of strings
52
+ a. there is also raw_args (without variables/functions, etc.)
53
+ b. Much of this HAS NOT been thought through yet!
45
54
 
46
55
  =end
47
56
 
@@ -64,11 +73,11 @@ class Livetext::CmdData
64
73
  @nargs = nargs # not really "needed"
65
74
  check_num_args(nargs)
66
75
 
67
- # @varfunc = _var_func_parse(data.dup)
76
+ # @varfunc = Livetext.interpolate(data.dup)
68
77
  end
69
78
 
70
79
  def check_num_args(num)
71
- num_range = /(\d{0,2})(\.\.)(\d{0,2})/
80
+ num_range = /(\d{0,2})(\.\.)(\d{0,2})/ # Not "really" right...
72
81
  min, max = 0, 9999
73
82
  md = num_range.match(@nargs).to_a
74
83
  bad_args = nil
data/lib/formatline.rb CHANGED
@@ -52,7 +52,7 @@ class FormatLine < StringParser
52
52
  marker peek
53
53
  add peek
54
54
  when LF
55
- break if @i >= line.size - 1
55
+ break if eos? # @i >= line.size - 1
56
56
  when nil
57
57
  break
58
58
  else
@@ -117,11 +117,11 @@ class FormatLine < StringParser
117
117
  if [:colon, :brackets].include? arg[0]
118
118
  arg = gen.next # for real
119
119
  param = arg[1]
120
- param = FormatLine.var_func_parse(param)
120
+ param = Livetext.interpolate(param)
121
121
  end
122
122
  @out << funcall(val, param)
123
123
  when :b, :i, :t, :s
124
- val = FormatLine.var_func_parse(val)
124
+ val = Livetext.interpolate(val)
125
125
  @out << embed(sym, val)
126
126
  else
127
127
  add_token :str
@@ -199,7 +199,7 @@ class FormatLine < StringParser
199
199
  str = Null.dup
200
200
  grab
201
201
  loop do
202
- break if eos? # peek.nil?
202
+ break if peek.nil? # eos?
203
203
  str << peek
204
204
  break if terminate?(NoAlphaDot, next!)
205
205
  grab
data/lib/helpers.rb CHANGED
@@ -4,6 +4,9 @@ module Helpers
4
4
  Space = " "
5
5
  Sigil = "." # Can't change yet
6
6
 
7
+ ESCAPING = { "'" => '&#39;', '&' => '&amp;', '"' => '&quot;',
8
+ '<' => '&lt;', '>' => '&gt;' }
9
+
7
10
  def escape_html(string)
8
11
  enc = string.encoding
9
12
  unless enc.ascii_compatible?
@@ -12,12 +15,12 @@ module Helpers
12
15
  enc = Encoding::Converter.asciicompat_encoding(enc)
13
16
  string = enc ? string.encode(enc) : string.b
14
17
  end
15
- table = Hash[TABLE_FOR_ESCAPE_HTML__.map {|pair|pair.map {|s|s.encode(enc)}}]
18
+ table = Hash[ESCAPING.map {|pair|pair.map {|s|s.encode(enc)}}]
16
19
  string = string.gsub(/#{"['&\"<>]".encode(enc)}/, table)
17
20
  string.encode!(origenc) if origenc
18
21
  return string
19
22
  end
20
- string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
23
+ string.gsub(/['&\"<>]/, ESCAPING)
21
24
  end
22
25
 
23
26
  def find_file(name, ext=".rb")
@@ -61,7 +64,7 @@ module Helpers
61
64
  @body
62
65
  end
63
66
 
64
- def process_line(line) # FIXME inefficient?
67
+ def process_line(line)
65
68
  nomarkup = true
66
69
  case line # must apply these in order
67
70
  when Comment
@@ -90,6 +93,29 @@ module Helpers
90
93
  raise EndWithoutOpening()
91
94
  when @main.respond_to?(name)
92
95
  result = @main.send(name)
96
+
97
+ # NOTE: The above line is where the magic happens!
98
+ # A name like 'foobar' results in an invocation of
99
+ # @main.foobar (where @main is a Processor, and any
100
+ # new methods (e.g. from a mixin) are added to @main
101
+ #
102
+ # So all the functionality from _args and _raw_args
103
+ # and _data (among others?) will be encapsulated in
104
+ # 'some' kind of PORO which handles access to all
105
+ # these things as well as the 'body' between the
106
+ # command and its corresponding .end
107
+ #
108
+ # The 'body' functionality is so commonly used, I plan
109
+ # to pass it in separately as needed (even though the
110
+ # args object should make it available also).
111
+ #
112
+ # Every method corresponding to a dot commmand will
113
+ # get args and body passed in as needed. Every one of
114
+ # the signatures already has (args = nil, body = nil)
115
+ # but nothing is being passed in that way yet.
116
+ #
117
+ # Refer to lib/cmdargs.rb for more! This is *strictly*
118
+ # experimental and a "work in progress."
93
119
  else
94
120
  puts @body # earlier correct output, not flushed yet
95
121
  raise "Name '#{name}' is unknown"
@@ -105,8 +131,8 @@ module Helpers
105
131
  name, data = line.split(" ", 2)
106
132
  name = name[1..-1] # chop off sigil
107
133
  name = "dot_" + name if %w[include def].include?(name)
108
- @main.data = data
109
134
  @main.check_disallowed(name)
135
+ @main.data = data
110
136
  name
111
137
  end
112
138
 
data/lib/livetext.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Class Livetext skeleton (top level).
2
2
 
3
3
  class Livetext
4
- VERSION = "0.9.20"
4
+ VERSION = "0.9.21"
5
5
  Path = File.expand_path(File.join(File.dirname(__FILE__)))
6
6
 
7
7
  module Handler
@@ -27,7 +27,7 @@ class Livetext::ParseGeneral < StringParser
27
27
  lines.each do |line|
28
28
  next if line.strip.empty?
29
29
  var, value = line.split(" ", 2)
30
- val = FormatLine.var_func_parse(value)
30
+ val = Livetext.interpolate(value)
31
31
  var = prefix + "." + var if prefix
32
32
  pairs << [var, value]
33
33
  end
data/lib/parser/set.rb CHANGED
@@ -31,8 +31,8 @@ class Livetext::ParseSet < StringParser
31
31
  pairs = []
32
32
  char = nil
33
33
  loop do
34
- break if eos? # end of string
35
34
  char = skip_spaces
35
+ break if eos? # end of string
36
36
  raise "Expected alpha to start var name" unless char =~ /[a-z]/i
37
37
  pairs << assignment
38
38
  char = skip_spaces
@@ -56,7 +56,7 @@ class Livetext::ParseSet < StringParser
56
56
  var = get_var
57
57
  skip_equal
58
58
  value = get_value
59
- value = FormatLine.var_func_parse(value) # FIXME broken now?
59
+ value = Livetext.interpolate(value)
60
60
  pair = [var, value]
61
61
  pair
62
62
  end
data/lib/parser/string.rb CHANGED
@@ -15,12 +15,13 @@ class StringParser
15
15
  return nil if @eos
16
16
  char = @line[@i]
17
17
  @i += 1
18
- @eos = true if @i > @len
18
+ check_eos
19
19
  char
20
20
  end
21
21
 
22
22
  def ungrab
23
- @i -= 1 # FIXME what about eos...?
23
+ @i -= 1
24
+ check_eos
24
25
  end
25
26
 
26
27
  def next!
@@ -32,12 +33,7 @@ class StringParser
32
33
  @line[@i-1]
33
34
  end
34
35
 
35
- def last?
36
- @i > @len - 1
37
- end
38
-
39
36
  def eos?
40
- @eos = true if last? # duh?
41
37
  @eos
42
38
  end
43
39
 
@@ -52,11 +48,16 @@ class StringParser
52
48
  char = peek
53
49
  break if eos?
54
50
  break if char != " "
55
- grab
51
+ char = grab
56
52
  end
57
53
  char
58
54
  end
59
55
 
56
+ private
57
+
58
+ def check_eos
59
+ @eos = @i >= @len
60
+ end
60
61
  end
61
62
 
62
63
  =begin
data/lib/processor.rb CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  class Livetext
4
4
 
5
+ def self.interpolate(str)
6
+ FormatLine.var_func_parse(str)
7
+ end
8
+
5
9
  # Class Processor does the actual work of processing input.
6
10
 
7
11
  class Processor
@@ -11,17 +15,21 @@ class Livetext
11
15
  include Livetext::Standard
12
16
  include Livetext::UserAPI
13
17
 
14
- Disallowed = %i[ ! != !~ <=> == === =~ __binding__ __id__ __send__ class
15
- clone define_singleton_method display dup enum_for eql?
16
- equal? extend freeze frozen? hash inspect instance_eval
17
- instance_exec instance_of? instance_variable_defined?
18
- instance_variable_get instance_variable_set instance_variables is_a?
19
- kind_of? method methods nil? object_id
20
- pretty_inspect private_methods protected_methods public_method
21
- public_methods public_send remove_instance_variable
22
- respond_to? send singleton_class singleton_method
23
- singleton_methods taint tainted? tap to_enum
24
- to_s trust untaint untrust untrusted?]
18
+ Disallowed =
19
+ %i[ __binding__ __id__ __send__ class
20
+ clone display dup enum_for
21
+ eql? equal? extend freeze
22
+ frozen? hash inspect instance_eval
23
+ instance_exec instance_of? is_a? kind_of?
24
+ method methods nil? object_id
25
+ pretty_inspect private_methods protected_methods public_method
26
+ public_methods public_send respond_to? send
27
+ singleton_class singleton_method singleton_methods taint
28
+ tainted? tap to_enum to_s
29
+ trust untaint untrust untrusted?
30
+ define_singleton_method instance_variable_defined?
31
+ instance_variable_get instance_variable_set
32
+ remove_instance_variable instance_variables ]
25
33
 
26
34
  def initialize(parent, output = nil)
27
35
  @parent = parent
data/lib/standard.rb CHANGED
@@ -187,7 +187,7 @@ module Livetext::Standard
187
187
  text = _body.join("\n")
188
188
  rhs = ""
189
189
  text.each_line do |line|
190
- str = FormatLine.var_func_parse(line.chomp)
190
+ str = Livetext.interpolate(line.chomp)
191
191
  rhs << str + "<br>"
192
192
  end
193
193
  indent = @parent.indentation.last
data/lib/userapi.rb CHANGED
@@ -114,9 +114,9 @@ module Livetext::UserAPI
114
114
  end
115
115
 
116
116
  def _format(line)
117
- return "" if line == "\n"
117
+ return "" if line == "\n" || line.nil?
118
118
  line2 = FormatLine.parse!(line)
119
- line.replace(line2) unless line.nil?
119
+ line.replace(line2)
120
120
  line
121
121
  end
122
122
 
data/plugin/markdown.rb CHANGED
@@ -8,12 +8,12 @@ SimpleFormats[:t] = %w[` `]
8
8
  SimpleFormats[:s] = %w[<strike> </strike>]
9
9
 
10
10
 
11
- def h1(args = nil, body = nil); _out "# #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end # atx style for now
12
- def h2(args = nil, body = nil); _out "## #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
13
- def h3(args = nil, body = nil); _out "### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
14
- def h4(args = nil, body = nil); _out "#### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
15
- def h5(args = nil, body = nil); _out "##### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
16
- def h6(args = nil, body = nil); _out "###### #{FormatLine.var_func_parse(@_data)}"; _optional_blank_line end
11
+ def h1(args = nil, body = nil); _out "# #{Livetext.interpolate(@_data)}"; _optional_blank_line end # atx style for now
12
+ def h2(args = nil, body = nil); _out "## #{Livetext.interpolate(@_data)}"; _optional_blank_line end
13
+ def h3(args = nil, body = nil); _out "### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
14
+ def h4(args = nil, body = nil); _out "#### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
15
+ def h5(args = nil, body = nil); _out "##### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
16
+ def h6(args = nil, body = nil); _out "###### #{Livetext.interpolate(@_data)}"; _optional_blank_line end
17
17
 
18
18
  def title(args = nil, body = nil)
19
19
  h1
data/plugin/tutorial.rb CHANGED
@@ -52,8 +52,9 @@ def inout(args = nil, body = nil)
52
52
  end
53
53
 
54
54
  def put_table(src, exp)
55
- t1 = ::File.readlines(src) rescue (abort "t1 = #{src}")
56
- t2 = ::File.readlines(exp) rescue (abort "t2 = #{out}")
55
+ STDERR.puts "put_table: #{[src, exp].inspect}"
56
+ t1 = ::File.readlines(src) rescue (abort "Fail - src = #{src} t1 = #{src}")
57
+ t2 = ::File.readlines(exp) rescue (abort "Fail - src = #{exp} t2 = #{out}")
57
58
  t1 = t1.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
58
59
  t2 = t2.map {|x| " " + x.sub(/ +$/,"").gsub(/_/, "\\_") }.join
59
60
 
@@ -80,7 +81,7 @@ end
80
81
  def testcase(args = nil, body = nil)
81
82
  name = _args.first
82
83
  _out "\n<font size=+1><b>Test: </font><font size=+2><tt>#{name}</tt></font></b></h3><br>"
83
- src, exp = "test/data/#{name}/source.lt3", "test/data/#{name}/expected-output.txt"
84
+ src, exp = "test/snapshots/#{name}/source.lt3", "test/snapshots/#{name}/expected-output.txt"
84
85
  @_args = [src, exp] # Better way to do this??
85
86
  put_table(src, exp)
86
87
  _out "<br>"
@@ -0,0 +1,84 @@
1
+ # This file specifies which snapshots will/won't be run.
2
+
3
+ # Blank lines and comments are ignored.
4
+ # Other lines: name_of_snapshot and any comments here are ignored (no # needed)
5
+
6
+ # You can start by uncommenting one of these:
7
+ # Default INCLUDE all
8
+ # Default EXCLUDE all
9
+ # If you use neither, INCLUDE is the default (but explicit is better)
10
+
11
+ # If you include all, you can specify exclusions with an x:
12
+ # x my_test_name # this is a comment
13
+
14
+ # Likewise if you EXCLUDE all, you can specify inclusions with an i:
15
+ # i some_other_test # this is a comment
16
+
17
+ # The i and x (to include/exclude) must be the first token on
18
+ # the line (preceding the test name)
19
+
20
+ # Note that QUIT (on a line by itself) will stop processing the file
21
+
22
+ x error_no_such_inc # Output BEFORE error doesn't get passed through ("leading" output)
23
+ x error_no_such_copy # ^ Same behavior as error_no_such_inc
24
+ x error_no_such_mixin # ^ Same behavior as error_missing_end
25
+ x error_invalid_name # ^ Same behavior as error_no_such_inc
26
+ x error_missing_end # Output is duplicated somehow. Look for: puts @body or puts @main.body
27
+ x error_inc_line_num # Forgot what's wrong here
28
+
29
+ # Dummy command .icanhaz works like .mixin or .import
30
+
31
+ x icanhaz # "Leading" output doesn't get generated (same as error_no_such_inc)
32
+ icanhaz2 # works?
33
+
34
+ # Others (usually passing):
35
+
36
+ # import/include/mixin, others...
37
+
38
+ simple_copy #
39
+ x simple_import # not working yet (but *could* sub in .icanhaz)
40
+ simple_include #
41
+ simple_mixin #
42
+
43
+ # raw input
44
+
45
+ single_raw_line #
46
+ raw_lines #
47
+ raw_text_block #
48
+ copy_is_raw #
49
+
50
+ # comments
51
+
52
+ block_comment #
53
+ comments_ignored_1 #
54
+
55
+ # variables and heredocs
56
+
57
+ predef_vars #
58
+ simple_vars #
59
+ more_complex_vars #
60
+ table_with_heredocs #
61
+
62
+ # testing def
63
+
64
+ def_method #
65
+
66
+ # intraline formatting
67
+
68
+ basic_formatting #
69
+
70
+ # Errors
71
+
72
+ error_line_num #
73
+ error_mismatched_end #
74
+ error_name_not_permitted #
75
+
76
+ # functions
77
+
78
+ functions #
79
+
80
+ # More/misc...
81
+
82
+ example_alpha #
83
+ example_alpha2 #
84
+ hello_world #