livetext 0.9.20 → 0.9.21

Sign up to get free protection for your applications and to get access to all the features.
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 #