rundoc 4.0.0 → 4.1.1

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.
@@ -23,7 +23,7 @@ class IntegrationWebsiteTest < Minitest::Test
23
23
  output_dir: screenshots_dir.parent,
24
24
  screenshots_dirname: screenshots_dirname
25
25
  )
26
- actual = parsed.to_md.gsub(Rundoc::CodeSection::AUTOGEN_WARNING, "")
26
+ actual = parsed.to_md.gsub(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "")
27
27
 
28
28
  expected = "![Screenshot of https://example.com/](screenshots/screenshot_1.png)"
29
29
  assert_equal expected, actual.strip
@@ -14,10 +14,11 @@ class CodeSectionTest < Minitest::Test
14
14
 
15
15
  Dir.mktmpdir do |dir|
16
16
  Dir.chdir(dir) do
17
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
18
- result = Rundoc::CodeSection.new(
19
- match,
20
- keyword: ":::",
17
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
18
+ result = Rundoc::FencedCodeBlock.new(
19
+ fence: match[:fence],
20
+ lang: match[:lang],
21
+ code: match[:contents],
21
22
  context: default_context
22
23
  ).render
23
24
  assert_equal "", result
@@ -33,13 +34,14 @@ class CodeSectionTest < Minitest::Test
33
34
 
34
35
  RUBY
35
36
 
36
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
37
- result = Rundoc::CodeSection.new(
38
- match,
39
- keyword: ":::",
37
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
38
+ result = Rundoc::FencedCodeBlock.new(
39
+ fence: match[:fence],
40
+ lang: match[:lang],
41
+ code: match[:contents],
40
42
  context: default_context
41
43
  ).render
42
- assert_equal contents, result.gsub(Rundoc::CodeSection::AUTOGEN_WARNING, "\n")
44
+ assert_equal contents, result.gsub(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "\n")
43
45
  end
44
46
 
45
47
  def test_show_command_hide_render
@@ -49,15 +51,16 @@ class CodeSectionTest < Minitest::Test
49
51
  ```
50
52
  RUBY
51
53
 
52
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
53
- code_section = Rundoc::CodeSection.new(
54
- match,
55
- keyword: ":::",
54
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
55
+ code_section = Rundoc::FencedCodeBlock.new(
56
+ fence: match[:fence],
57
+ lang: match[:lang],
58
+ code: match[:contents],
56
59
  context: default_context
57
60
  )
58
61
  code_section.render
59
62
 
60
- code_command = code_section.commands.first
63
+ code_command = code_section.executed_commands.first
61
64
  assert_equal true, code_command.render_command
62
65
  assert_equal false, code_command.render_result
63
66
 
@@ -67,15 +70,16 @@ class CodeSectionTest < Minitest::Test
67
70
  ```
68
71
  RUBY
69
72
 
70
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
71
- code_section = Rundoc::CodeSection.new(
72
- match,
73
- keyword: ":::",
73
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
74
+ code_section = Rundoc::FencedCodeBlock.new(
75
+ fence: match[:fence],
76
+ lang: match[:lang],
77
+ code: match[:contents],
74
78
  context: default_context
75
79
  )
76
80
  code_section.render
77
81
 
78
- code_command = code_section.commands.first
82
+ code_command = code_section.executed_commands.first
79
83
  assert_equal true, code_command.render_command
80
84
  assert_equal false, code_command.render_result
81
85
  end
@@ -87,16 +91,17 @@ class CodeSectionTest < Minitest::Test
87
91
  ```
88
92
  RUBY
89
93
 
90
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
91
- code_section = Rundoc::CodeSection.new(
92
- match,
93
- keyword: ":::",
94
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
95
+ code_section = Rundoc::FencedCodeBlock.new(
96
+ fence: match[:fence],
97
+ lang: match[:lang],
98
+ code: match[:contents],
94
99
  context: default_context
95
100
  )
96
101
  code_section.render
97
102
 
98
- puts code_section.commands.inspect
99
- code_command = code_section.commands.first
103
+ puts code_section.executed_commands.inspect
104
+ code_command = code_section.executed_commands.first
100
105
  assert_equal true, code_command.render_command
101
106
  assert_equal true, code_command.render_result
102
107
  end
@@ -108,15 +113,16 @@ class CodeSectionTest < Minitest::Test
108
113
  ```
109
114
  RUBY
110
115
 
111
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
112
- code_section = Rundoc::CodeSection.new(
113
- match,
114
- keyword: ":::",
116
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
117
+ code_section = Rundoc::FencedCodeBlock.new(
118
+ fence: match[:fence],
119
+ lang: match[:lang],
120
+ code: match[:contents],
115
121
  context: default_context
116
122
  )
117
123
  code_section.render
118
124
 
119
- code_command = code_section.commands.first
125
+ code_command = code_section.executed_commands.first
120
126
  assert_equal false, code_command.render_command
121
127
  assert_equal false, code_command.render_result
122
128
 
@@ -126,15 +132,16 @@ class CodeSectionTest < Minitest::Test
126
132
  ```
127
133
  RUBY
128
134
 
129
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
130
- code_section = Rundoc::CodeSection.new(
131
- match,
132
- keyword: ":::",
135
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
136
+ code_section = Rundoc::FencedCodeBlock.new(
137
+ fence: match[:fence],
138
+ lang: match[:lang],
139
+ code: match[:contents],
133
140
  context: default_context
134
141
  )
135
142
  code_section.render
136
143
 
137
- code_command = code_section.commands.first
144
+ code_command = code_section.executed_commands.first
138
145
  assert_equal false, code_command.render_command
139
146
  assert_equal false, code_command.render_result
140
147
  end
@@ -146,15 +153,16 @@ class CodeSectionTest < Minitest::Test
146
153
  ```
147
154
  RUBY
148
155
 
149
- match = contents.match(Rundoc::Parser::CODEBLOCK_REGEX)
150
- code_section = Rundoc::CodeSection.new(
151
- match,
152
- keyword: ":::",
156
+ match = contents.match(Rundoc::Document::CODEBLOCK_REGEX)
157
+ code_section = Rundoc::FencedCodeBlock.new(
158
+ fence: match[:fence],
159
+ lang: match[:lang],
160
+ code: match[:contents],
153
161
  context: default_context
154
162
  )
155
163
  code_section.render
156
164
 
157
- code_command = code_section.commands.first
165
+ code_command = code_section.executed_commands.first
158
166
  assert_equal false, code_command.render_command
159
167
  assert_equal true, code_command.render_result
160
168
  end
@@ -17,7 +17,7 @@ class ParserTest < Minitest::Test
17
17
  Dir.chdir(dir) do
18
18
  expected = "sup\n\n```\n$ mkdir foo\n$ ls\nfoo\n```\n\nyo\n"
19
19
  parsed = parse_contents(contents)
20
- actual = parsed.to_md.gsub(Rundoc::CodeSection::AUTOGEN_WARNING, "")
20
+ actual = parsed.to_md.gsub(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "")
21
21
  assert_equal expected, actual
22
22
  end
23
23
  end
@@ -39,7 +39,7 @@ class ParserTest < Minitest::Test
39
39
  Dir.chdir(dir) do
40
40
  expected = "sup\n\nIn file `foo/code.rb` write:\n\n```\na = 1 + 1\nb = a * 2\n```\nyo\n"
41
41
  parsed = parse_contents(contents)
42
- actual = parsed.to_md.gsub(Rundoc::CodeSection::AUTOGEN_WARNING, "")
42
+ actual = parsed.to_md.gsub(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "")
43
43
  assert_equal expected, actual
44
44
  end
45
45
  end
@@ -57,7 +57,7 @@ class ParserTest < Minitest::Test
57
57
  Dir.chdir(dir) do
58
58
  expected = "\nIn file `foo/newb.rb` write:\n\n```\nputs 'hello world'\n$ cat foo/newb.rb\nputs 'hello world'\n```\n"
59
59
  parsed = parse_contents(contents)
60
- actual = parsed.to_md.gsub(Rundoc::CodeSection::AUTOGEN_WARNING, "")
60
+ actual = parsed.to_md.gsub(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "")
61
61
  assert_equal expected, actual
62
62
  end
63
63
  end
@@ -240,22 +240,6 @@ class PegParserTest < Minitest::Test
240
240
  end
241
241
 
242
242
  def test_no_args
243
- # input = String.new
244
- # input << %Q{rundoc}
245
- # parser = Rundoc::PegParser.new.no_args_method
246
- # tree = parser.parse_with_debug(input)
247
- # actual = @transformer.apply(tree)
248
- # assert_equal("rundoc", actual.to_s)
249
-
250
- # input = String.new
251
- # input << %Q{:::-- rundoc\n}
252
- # parser = Rundoc::PegParser.new.command
253
- # tree = parser.parse_with_debug(input)
254
-
255
- # actual = @transformer.apply(tree)
256
- # assert_equal :rundoc, actual.keyword
257
- # assert_nil(actual.original_args)
258
-
259
243
  input = +""
260
244
  input << %(:::-- rundoc\n)
261
245
  input << %(email = ENV['HEROKU_EMAIL'] || `heroku auth:whoami`\n)
@@ -333,19 +317,7 @@ class PegParserTest < Minitest::Test
333
317
  actual = @transformer.apply(tree)
334
318
  assert_equal ["rails server", {name: "server"}], actual.original_args
335
319
 
336
- # input = +""
337
- # input << %Q{background.start("rails server", name: "server")}
338
- # parser = Rundoc::PegParser.new.method_call
339
-
340
- # tree = parser.parse_with_debug(input)
341
-
342
- # puts tree.inspect
343
-
344
- # actual = @transformer.apply(tree)
345
- # assert_equal :"background.start", actual.keyword
346
-
347
320
  # ================
348
-
349
321
  input = +""
350
322
  input << %{call("foo", "bar")}
351
323
 
@@ -358,7 +330,6 @@ class PegParserTest < Minitest::Test
358
330
  assert_equal ["foo", "bar"], actual.original_args
359
331
 
360
332
  # ======================
361
-
362
333
  input = +""
363
334
  input << %{call("foo", "bar", biz: "baz")}
364
335
 
@@ -372,14 +343,10 @@ class PegParserTest < Minitest::Test
372
343
  def test_positional_args_code_block
373
344
  input = +""
374
345
  input << %{:::>> background.start("rails server", name: "server")\n}
375
- # input << %Q{:::-- background.stop(name: "server")\n}
376
346
 
377
347
  parser = Rundoc::PegParser.new.command
378
348
 
379
349
  tree = parser.parse_with_debug(input)
380
-
381
- # puts tree.inspect
382
-
383
350
  actual = @transformer.apply(tree)
384
351
  assert_equal :"background.start", actual.keyword
385
352
  assert_equal ["rails server", {name: "server"}], actual.original_args
@@ -4,36 +4,20 @@ class RegexTest < Minitest::Test
4
4
  def setup
5
5
  end
6
6
 
7
- def test_indent_regex
8
- contents = <<~RUBY
9
- foo
10
-
11
- $ cd
12
- yo
13
- sup
14
-
15
- bar
16
- RUBY
17
-
18
- regex = Rundoc::Parser::INDENT_BLOCK
19
- parsed = contents.match(/#{regex}/).to_s
20
- assert_equal "\n $ cd\n yo\n sup\n", parsed
21
- end
22
-
23
7
  def test_github_regex
24
8
  contents = <<~RUBY
25
9
  foo
26
-
10
+
27
11
  ```
28
12
  $ cd
29
13
  yo
30
14
  sup
31
15
  ```
32
-
16
+
33
17
  bar
34
18
  RUBY
35
19
 
36
- regex = Rundoc::Parser::GITHUB_BLOCK
20
+ regex = Rundoc::Document::GITHUB_BLOCK
37
21
  parsed = contents.match(/#{regex}/m).to_s
38
22
  assert_equal "```\n$ cd\nyo\nsup\n```\n", parsed
39
23
  end
@@ -41,74 +25,40 @@ class RegexTest < Minitest::Test
41
25
  def test_github_tagged_regex
42
26
  contents = <<~RUBY
43
27
  foo
44
-
28
+
45
29
  ```ruby
46
30
  $ cd
47
31
  yo
48
32
  sup
49
33
  ```
50
-
34
+
51
35
  bar
52
36
  RUBY
53
37
 
54
- regex = Rundoc::Parser::GITHUB_BLOCK
38
+ regex = Rundoc::Document::GITHUB_BLOCK
55
39
  parsed = contents.match(/#{regex}/m).to_s
56
40
  assert_equal "```ruby\n$ cd\nyo\nsup\n```\n", parsed
57
41
  end
58
42
 
59
- def test_command_regex
60
- regex = Rundoc::Parser::COMMAND_REGEX.call(":::")
61
-
62
- contents = ":::$ mkdir schneems"
63
- match = contents.match(regex)
64
- assert_equal "", match[:tag]
65
- assert_equal "$", match[:command]
66
- assert_equal "mkdir schneems", match[:statement]
67
-
68
- contents = ":::=$ mkdir schneems"
69
- match = contents.match(regex)
70
- assert_equal "=", match[:tag]
71
- assert_equal "$", match[:command]
72
- assert_equal "mkdir schneems", match[:statement]
73
-
74
- contents = ":::= $ mkdir schneems"
75
- match = contents.match(regex)
76
- assert_equal "=", match[:tag]
77
- assert_equal "$", match[:command]
78
- assert_equal "mkdir schneems", match[:statement]
79
-
80
- contents = ":::-$ mkdir schneems"
81
- match = contents.match(regex)
82
- assert_equal "-", match[:tag]
83
- assert_equal "$", match[:command]
84
- assert_equal "mkdir schneems", match[:statement]
85
-
86
- contents = ":::- $ mkdir schneems"
87
- match = contents.match(regex)
88
- assert_equal "-", match[:tag]
89
- assert_equal "$", match[:command]
90
- assert_equal "mkdir schneems", match[:statement]
91
- end
92
-
93
43
  def test_codeblock_regex
94
44
  contents = <<~RUBY
95
45
  foo
96
-
46
+
97
47
  ```
98
48
  :::>$ mkdir
99
49
  ```
100
-
50
+
101
51
  zoo
102
-
52
+
103
53
  ```
104
54
  :::>$ cd ..
105
55
  something
106
56
  ```
107
-
57
+
108
58
  bar
109
59
  RUBY
110
60
 
111
- regex = Rundoc::Parser::CODEBLOCK_REGEX
61
+ regex = Rundoc::Document::CODEBLOCK_REGEX
112
62
 
113
63
  actual = contents.partition(regex)
114
64
  expected = ["foo\n\n",
@@ -133,7 +83,7 @@ class RegexTest < Minitest::Test
133
83
  ```java
134
84
  :::>> write app/controllers/Application.java
135
85
  package controllers;
136
-
86
+
137
87
  import static java.util.concurrent.TimeUnit.SECONDS;
138
88
  import models.Pinger;
139
89
  import play.libs.Akka;
@@ -146,7 +96,7 @@ class RegexTest < Minitest::Test
146
96
  import akka.actor.ActorRef;
147
97
  import akka.actor.Cancellable;
148
98
  import akka.actor.Props;
149
-
99
+
150
100
  public class Application extends Controller {
151
101
  public static WebSocket<String> pingWs() {
152
102
  return new WebSocket<String>() {
@@ -159,7 +109,7 @@ class RegexTest < Minitest::Test
159
109
  Akka.system().dispatcher(),
160
110
  null
161
111
  );
162
-
112
+
163
113
  in.onClose(new Callback0() {
164
114
  @Override
165
115
  public void invoke() throws Throwable {
@@ -167,14 +117,14 @@ class RegexTest < Minitest::Test
167
117
  }
168
118
  });
169
119
  }
170
-
120
+
171
121
  };
172
122
  }
173
-
123
+
174
124
  public static Result pingJs() {
175
125
  return ok(views.js.ping.render());
176
126
  }
177
-
127
+
178
128
  public static Result index() {
179
129
  return ok(index.render());
180
130
  }
@@ -182,7 +132,7 @@ class RegexTest < Minitest::Test
182
132
  ```
183
133
  RUBY
184
134
 
185
- regex = Rundoc::Parser::CODEBLOCK_REGEX
135
+ regex = Rundoc::Document::CODEBLOCK_REGEX
186
136
  match = contents.match(regex)
187
137
  assert_equal "java", match[:lang]
188
138
  assert_equal "```", match[:fence]
@@ -205,7 +155,7 @@ class RegexTest < Minitest::Test
205
155
  :::>> $ echo "hello"
206
156
  ```
207
157
  MD
208
- regex = Rundoc::Parser::CODEBLOCK_REGEX
158
+ regex = Rundoc::Document::CODEBLOCK_REGEX
209
159
  match = code_block_with_newline.match(regex)
210
160
  assert_equal expected, match.to_s.strip
211
161
 
data/test/test_helper.rb CHANGED
@@ -19,12 +19,11 @@ class Minitest::Test
19
19
  source_path: nil,
20
20
  screenshots_dirname: nil
21
21
  )
22
-
23
22
  Rundoc::Context::Execution.new(
24
- output_dir: output_dir || Pathname("/dev/null"),
25
- source_path: source_path || Pathname("/dev/null"),
23
+ output_dir: output_dir || Pathname(File::NULL),
24
+ source_path: source_path || Pathname(File::NULL),
26
25
  with_contents_dir: nil,
27
- screenshots_dirname: screenshots_dirname || Pathname("/dev/null")
26
+ screenshots_dirname: screenshots_dirname || Pathname(File::NULL)
28
27
  )
29
28
  end
30
29
 
@@ -39,7 +38,7 @@ class Minitest::Test
39
38
  source_path: source_path,
40
39
  screenshots_dirname: screenshots_dirname
41
40
  )
42
- Rundoc::Parser.new(
41
+ Rundoc::Document.new(
43
42
  contents,
44
43
  context: context
45
44
  )
@@ -60,7 +59,7 @@ class Minitest::Test
60
59
  end
61
60
 
62
61
  def strip_autogen_warning(string)
63
- string.gsub!(Rundoc::CodeSection::AUTOGEN_WARNING, "")
62
+ string.gsub!(Rundoc::FencedCodeBlock::AUTOGEN_WARNING, "")
64
63
  string.gsub!(/<!-- STOP.*STOP -->/m, "")
65
64
  string
66
65
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rundoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-30 00:00:00.000000000 Z
11
+ date: 2024-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -215,6 +215,7 @@ files:
215
215
  - lib/rundoc/code_command/file_command/remove.rb
216
216
  - lib/rundoc/code_command/no_such_command.rb
217
217
  - lib/rundoc/code_command/pipe.rb
218
+ - lib/rundoc/code_command/pre/erb.rb
218
219
  - lib/rundoc/code_command/print/erb.rb
219
220
  - lib/rundoc/code_command/print/text.rb
220
221
  - lib/rundoc/code_command/raw.rb
@@ -227,10 +228,10 @@ files:
227
228
  - lib/rundoc/code_command/website/screenshot.rb
228
229
  - lib/rundoc/code_command/website/visit.rb
229
230
  - lib/rundoc/code_command/write.rb
230
- - lib/rundoc/code_section.rb
231
231
  - lib/rundoc/context/after_build.rb
232
232
  - lib/rundoc/context/execution.rb
233
- - lib/rundoc/parser.rb
233
+ - lib/rundoc/document.rb
234
+ - lib/rundoc/fenced_code_block.rb
234
235
  - lib/rundoc/peg_parser.rb
235
236
  - lib/rundoc/version.rb
236
237
  - rundoc.gemspec
@@ -264,6 +265,7 @@ files:
264
265
  - test/integration/after_build_test.rb
265
266
  - test/integration/background_stdin_test.rb
266
267
  - test/integration/failure_test.rb
268
+ - test/integration/pre_erb_test.rb
267
269
  - test/integration/print_test.rb
268
270
  - test/integration/require_test.rb
269
271
  - test/integration/website_test.rb
@@ -1,155 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rundoc
4
- # A code secttion respesents a block of fenced code
5
- #
6
- # A document can have multiple code sections
7
- class CodeSection
8
- class ParseError < StandardError
9
- def initialize(options = {})
10
- keyword = options[:keyword]
11
- command = options[:command]
12
- line_number = options[:line_number]
13
- block = options[:block].lines.map do |line|
14
- if line == command
15
- " > #{line}"
16
- else
17
- " #{line}"
18
- end
19
- end.join("")
20
-
21
- msg = "Error parsing (line:#{line_number}):\n"
22
- msg << "> '#{command.strip}'\n"
23
- msg << "No such registered command: '#{keyword}'\n"
24
- msg << "registered commands: #{Rundoc.known_commands.inspect}\n\n"
25
- msg << block
26
- msg << "\n"
27
- super(msg)
28
- end
29
- end
30
-
31
- COMMAND_REGEX = Rundoc::Parser::COMMAND_REGEX # todo: move whole thing
32
- AUTOGEN_WARNING = "\n<!-- STOP. This document is autogenerated. Do not manually modify. See the top of the doc for more details. -->"
33
- attr_accessor :original, :fence, :lang, :code, :commands, :keyword
34
-
35
- PARTIAL_RESULT = []
36
- PARTIAL_ENV = {}
37
-
38
- def initialize(match, keyword:, context:)
39
- @original = match.to_s
40
- @commands = []
41
- @stack = []
42
- @keyword = keyword
43
- @context = context
44
- @fence = match[:fence]
45
- @lang = match[:lang]
46
- @code = match[:contents]
47
- parse_code_command
48
- PARTIAL_RESULT.clear
49
- PARTIAL_ENV.clear
50
- end
51
-
52
- def render
53
- result = []
54
- env = {}
55
- env[:commands] = []
56
- env[:fence_start] = "#{fence}#{lang}"
57
- env[:fence_end] = "#{fence}#{AUTOGEN_WARNING}"
58
- env[:before] = []
59
- env[:after] = []
60
- env[:context] = @context
61
-
62
- @stack.each do |s|
63
- unless s.respond_to?(:call)
64
- result << s
65
- next
66
- end
67
-
68
- code_command = s
69
- code_output = code_command.call(env) || ""
70
- code_line = code_command.to_md(env) || ""
71
-
72
- env[:commands] << {object: code_command, output: code_output, command: code_line}
73
-
74
- tmp_result = []
75
- tmp_result << code_line if code_command.render_command?
76
- tmp_result << code_output if code_command.render_result?
77
-
78
- result << tmp_result unless code_command.hidden?
79
-
80
- PARTIAL_RESULT.replace(result)
81
- PARTIAL_ENV.replace(env)
82
- end
83
-
84
- return "" if hidden?
85
-
86
- self.class.to_doc(result: result, env: env)
87
- end
88
-
89
- def self.partial_result_to_doc
90
- to_doc(result: PARTIAL_RESULT, env: PARTIAL_ENV)
91
- end
92
-
93
- def self.to_doc(result:, env:)
94
- array = [env[:before]]
95
-
96
- result.flatten!
97
- result.compact!
98
- result.map! { |s| s.respond_to?(:rstrip) ? s.rstrip : s }
99
- result.reject!(&:empty?)
100
- result.map!(&:to_s)
101
-
102
- if !result.empty?
103
- array << env[:fence_start]
104
- array << result
105
- array << env[:fence_end]
106
- end
107
- array << env[:after]
108
-
109
- array.flatten!
110
- array.compact!
111
- array.map! { |s| s.respond_to?(:rstrip) ? s.rstrip : s }
112
- array.reject!(&:empty?)
113
- array.map!(&:to_s)
114
-
115
- array.join("\n") << "\n"
116
- end
117
-
118
- # all of the commands are hidden
119
- def hidden?
120
- !not_hidden?
121
- end
122
-
123
- # one or more of the commands are not hidden
124
- def not_hidden?
125
- return true if commands.empty?
126
- commands.map(&:not_hidden?).detect { |c| c }
127
- end
128
-
129
- def parse_code_command
130
- parser = Rundoc::PegParser.new.code_block
131
- tree = parser.parse(@code)
132
- actual = Rundoc::PegTransformer.new.apply(tree)
133
- actual = [actual] unless actual.is_a?(Array)
134
- actual.each do |code_command|
135
- @stack << "\n" if commands.last.is_a?(Rundoc::CodeCommand)
136
- @stack << code_command
137
- commands << code_command
138
- end
139
- rescue ::Parslet::ParseFailed => e
140
- raise "Could not compile code:\n#{@code}\nReason: #{e.message}"
141
- end
142
-
143
- # def check_parse_error(command, code_block)
144
- # return unless code_command = @stack.last
145
- # return unless code_command.is_a?(Rundoc::CodeCommand::NoSuchCommand)
146
- # @original.lines.each_with_index do |line, index|
147
- # next unless line == command
148
- # raise ParseError.new(keyword: code_command.keyword,
149
- # block: code_block,
150
- # command: command,
151
- # line_number: index.next)
152
- # end
153
- # end
154
- end
155
- end