asciidoctor-diagram 2.0.2 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.adoc +78 -1
  3. data/README.adoc +25 -507
  4. data/Rakefile +1 -1
  5. data/docs/antora.yml +3 -0
  6. data/{images → docs/modules/ROOT/images}/asciidoctor-diagram-classes.png +0 -0
  7. data/docs/modules/ROOT/images/asciidoctor-diagram-process.png +0 -0
  8. data/docs/modules/ROOT/pages/index.adoc +21 -0
  9. data/docs/modules/ROOT/partials/advanced.adoc +319 -0
  10. data/docs/modules/ROOT/partials/create_diagram.adoc +132 -0
  11. data/docs/modules/ROOT/partials/generate.adoc +15 -0
  12. data/docs/modules/ROOT/partials/installation.adoc +19 -0
  13. data/docs/modules/ROOT/partials/uris.adoc +40 -0
  14. data/examples/features.adoc +1 -1
  15. data/lib/asciidoctor-diagram.rb +4 -0
  16. data/lib/asciidoctor-diagram/a2s/converter.rb +10 -6
  17. data/lib/asciidoctor-diagram/blockdiag/converter.rb +1 -1
  18. data/lib/asciidoctor-diagram/bpmn/converter.rb +3 -3
  19. data/lib/asciidoctor-diagram/diagram_converter.rb +9 -1
  20. data/lib/asciidoctor-diagram/diagram_processor.rb +92 -48
  21. data/lib/asciidoctor-diagram/diagram_source.rb +71 -24
  22. data/lib/asciidoctor-diagram/diagrams.rb +7 -0
  23. data/lib/asciidoctor-diagram/diagrams/converter.rb +49 -0
  24. data/lib/asciidoctor-diagram/diagrams/extension.rb +14 -0
  25. data/lib/asciidoctor-diagram/ditaa/converter.rb +20 -7
  26. data/lib/asciidoctor-diagram/ditaa/ditaa-1.3.20.jar +0 -0
  27. data/lib/asciidoctor-diagram/dpic.rb +7 -0
  28. data/lib/asciidoctor-diagram/dpic/converter.rb +30 -0
  29. data/lib/asciidoctor-diagram/dpic/extension.rb +14 -0
  30. data/lib/asciidoctor-diagram/gnuplot/converter.rb +8 -8
  31. data/lib/asciidoctor-diagram/graphviz/converter.rb +2 -2
  32. data/lib/asciidoctor-diagram/http/converter.rb +52 -14
  33. data/lib/asciidoctor-diagram/http/server.rb +11 -6
  34. data/lib/asciidoctor-diagram/lilypond/converter.rb +13 -3
  35. data/lib/asciidoctor-diagram/meme/converter.rb +22 -16
  36. data/lib/asciidoctor-diagram/mermaid/converter.rb +45 -14
  37. data/lib/asciidoctor-diagram/msc/converter.rb +2 -2
  38. data/lib/asciidoctor-diagram/pikchr.rb +7 -0
  39. data/lib/asciidoctor-diagram/pikchr/converter.rb +33 -0
  40. data/lib/asciidoctor-diagram/pikchr/extension.rb +14 -0
  41. data/lib/asciidoctor-diagram/plantuml/converter.rb +68 -43
  42. data/lib/asciidoctor-diagram/plantuml/plantuml-1.3.20.jar +0 -0
  43. data/lib/asciidoctor-diagram/smcat/converter.rb +3 -3
  44. data/lib/asciidoctor-diagram/svgbob/converter.rb +6 -2
  45. data/lib/asciidoctor-diagram/symbolator.rb +7 -0
  46. data/lib/asciidoctor-diagram/symbolator/converter.rb +23 -0
  47. data/lib/asciidoctor-diagram/symbolator/extension.rb +14 -0
  48. data/lib/asciidoctor-diagram/syntrax/converter.rb +9 -6
  49. data/lib/asciidoctor-diagram/tikz/converter.rb +20 -1
  50. data/lib/asciidoctor-diagram/umlet/converter.rb +11 -2
  51. data/lib/asciidoctor-diagram/util/cli.rb +16 -1
  52. data/lib/asciidoctor-diagram/util/cli_generator.rb +30 -8
  53. data/lib/asciidoctor-diagram/util/gif.rb +2 -2
  54. data/lib/asciidoctor-diagram/util/java.rb +118 -3
  55. data/lib/asciidoctor-diagram/util/java_jruby.rb +4 -1
  56. data/lib/asciidoctor-diagram/util/java_socket.rb +8 -109
  57. data/lib/asciidoctor-diagram/util/pdf.rb +2 -2
  58. data/lib/asciidoctor-diagram/util/png.rb +2 -2
  59. data/lib/{server-1.3.15.jar → asciidoctor-diagram/util/server-1.3.20.jar} +0 -0
  60. data/lib/asciidoctor-diagram/util/svg.rb +66 -18
  61. data/lib/asciidoctor-diagram/vega/converter.rb +2 -2
  62. data/lib/asciidoctor-diagram/version.rb +1 -1
  63. data/spec/a2s_spec.rb +6 -144
  64. data/spec/blockdiag_spec.rb +6 -204
  65. data/spec/bpmn_spec.rb +52 -92
  66. data/spec/bytefield_spec.rb +6 -144
  67. data/spec/diagrams_spec.rb +23 -0
  68. data/spec/ditaa_spec.rb +6 -144
  69. data/spec/dpic_spec.rb +19 -0
  70. data/spec/erd_spec.rb +6 -203
  71. data/spec/gnuplot_spec.rb +10 -263
  72. data/spec/graphviz_spec.rb +6 -145
  73. data/spec/lilypond_spec.rb +6 -144
  74. data/spec/mermaid_spec.rb +69 -211
  75. data/spec/msc_spec.rb +6 -203
  76. data/spec/nomnoml_spec.rb +7 -145
  77. data/spec/pikchr_spec.rb +69 -0
  78. data/spec/plantuml_spec.rb +63 -553
  79. data/spec/shaape_spec.rb +12 -224
  80. data/spec/shared_examples.rb +603 -0
  81. data/spec/smcat_spec.rb +6 -144
  82. data/spec/svgbob_spec.rb +6 -144
  83. data/spec/symbolator_spec.rb +23 -0
  84. data/spec/syntrax_spec.rb +7 -217
  85. data/spec/test_helper.rb +4 -29
  86. data/spec/tikz_spec.rb +68 -18
  87. data/spec/umlet_spec.rb +3 -59
  88. data/spec/vega_spec.rb +6 -119
  89. data/spec/wavedrom_spec.rb +3 -200
  90. metadata +82 -18
  91. data/README_zh-CN.adoc +0 -336
  92. data/images/asciidoctor-diagram-process.png +0 -0
  93. data/lib/batik-all-1.10.jar +0 -0
  94. data/lib/ditaa-1.3.15.jar +0 -0
  95. data/lib/ditaamini-0.12.jar +0 -0
  96. data/lib/jlatexmath-minimal-1.0.5.jar +0 -0
  97. data/lib/plantuml-1.3.15.jar +0 -0
  98. data/lib/plantuml.jar +0 -0
  99. data/spec/bpmn-example.xml +0 -44
@@ -13,6 +13,11 @@ module Asciidoctor
13
13
  [:pdf, :svg]
14
14
  end
15
15
 
16
+ def collect_options(source)
17
+ {
18
+ :preamble => source.attr('preamble') == 'true'
19
+ }
20
+ end
16
21
 
17
22
  def convert(source, format, options)
18
23
  latexpath = source.find_command('pdflatex')
@@ -23,14 +28,28 @@ module Asciidoctor
23
28
  svgpath = nil
24
29
  end
25
30
 
31
+ if options[:preamble]
32
+ preamble, body = source.to_s.split(/^~~~~$/, 2)
33
+ unless body
34
+ body = preamble
35
+ preamble = ''
36
+ end
37
+ else
38
+ preamble = ''
39
+ body = source.to_s
40
+ end
41
+
26
42
  latex = <<'END'
27
43
  \documentclass[border=2bp, tikz]{standalone}
28
44
  \usepackage{tikz}
45
+ END
46
+ latex << preamble
47
+ latex << <<'END'
29
48
  \begin{document}
30
49
  \begingroup
31
50
  \tikzset{every picture/.style={scale=1}}
32
51
  END
33
- latex << source.to_s
52
+ latex << body
34
53
  latex << <<'END'
35
54
  \endgroup
36
55
  \end{document}
@@ -1,6 +1,7 @@
1
1
  require_relative '../diagram_converter'
2
2
  require_relative '../util/cli_generator'
3
3
  require_relative '../util/platform'
4
+ require_relative '../util/java'
4
5
 
5
6
  module Asciidoctor
6
7
  module Diagram
@@ -15,8 +16,16 @@ module Asciidoctor
15
16
  end
16
17
 
17
18
  def convert(source, format, options)
18
- generate_file(source.find_command('umlet'), 'uxf', format.to_s, source.to_s) do |tool_path, input_path, output_path|
19
- [tool_path, '-action=convert', "-format=#{format.to_s}", "-filename=#{Platform.native_path(input_path)}", "-output=#{Platform.native_path(output_path)}"]
19
+ java = ::Asciidoctor::Diagram::Java.java
20
+
21
+ umlet = source.find_command('umlet')
22
+ ext = File.extname(umlet)
23
+ if ext == '' || ext != '.jar'
24
+ umlet = File.expand_path(File.basename(umlet, '.*') + '.jar', File.dirname(umlet))
25
+ end
26
+
27
+ generate_file(java, 'uxf', format.to_s, source.to_s) do |tool_path, input_path, output_path|
28
+ [tool_path, '-jar', Platform.native_path(umlet), '-action=convert', "-format=#{format.to_s}", "-filename=#{Platform.native_path(input_path)}", "-output=#{Platform.native_path(output_path)}"]
20
29
  end
21
30
  end
22
31
  end
@@ -12,7 +12,16 @@ module Asciidoctor
12
12
  opts = args.pop.dup if args.last.is_a? Hash
13
13
  in_data = opts && opts[:stdin_data]
14
14
 
15
+ if Hash === args.first
16
+ env = args.shift.dup
17
+ else
18
+ env = {}
19
+ end
20
+
15
21
  pb = java.lang.ProcessBuilder.new(*args)
22
+ env.each_pair do |key, value|
23
+ pb.environment.put(key, value)
24
+ end
16
25
  p = pb.start
17
26
 
18
27
  stdout = ""
@@ -67,12 +76,18 @@ module Asciidoctor
67
76
  opts = {}
68
77
  end
69
78
 
79
+ if Hash === args.first
80
+ env = args.shift.dup
81
+ else
82
+ env = {}
83
+ end
84
+
70
85
  # When the first argument is an array, we force capture3 (or better the underlying Kernel#spawn)
71
86
  # to use a non-shell execution variant.
72
87
  cmd = File.basename(args[0])
73
88
  args[0] = [args[0], cmd]
74
89
 
75
- stdout, stderr, status = Open3.capture3(*args, opts)
90
+ stdout, stderr, status = Open3.capture3(env, *args, opts)
76
91
 
77
92
  exit = status.exitstatus
78
93
 
@@ -1,3 +1,4 @@
1
+ require 'asciidoctor/logging'
1
2
  require 'tempfile'
2
3
  require_relative 'cli'
3
4
 
@@ -5,21 +6,25 @@ module Asciidoctor
5
6
  module Diagram
6
7
  # @private
7
8
  module CliGenerator
8
- def generate_stdin(tool, format, code)
9
- tool_name = File.basename(tool)
9
+ include Asciidoctor::Logging
10
10
 
11
- target_file = Tempfile.new([tool_name, ".#{format}"])
11
+ def generate_stdin(tool, format, code)
12
+ target_file = Tempfile.new([File.basename(tool), ".#{format}"])
12
13
  begin
13
14
  target_file.close
14
-
15
- opts = yield tool, target_file.path
16
-
17
- generate(opts, target_file.path, :stdin_data => code)
15
+ generate_stdin_file(tool, code, target_file.path) do |t|
16
+ yield t, target_file.path
17
+ end
18
18
  ensure
19
19
  target_file.unlink
20
20
  end
21
21
  end
22
22
 
23
+ def generate_stdin_file(tool, code, target_file_path)
24
+ opts = yield tool
25
+ generate(opts, target_file_path, :stdin_data => code)
26
+ end
27
+
23
28
  def generate_stdin_stdout(tool, code)
24
29
  if block_given?
25
30
  opts = yield tool
@@ -51,20 +56,37 @@ module Asciidoctor
51
56
  end
52
57
  end
53
58
 
59
+ def generate_file_stdout(tool, input_ext, code)
60
+ tool_name = File.basename(tool)
61
+
62
+ source_file = Tempfile.new([tool_name, ".#{input_ext}"])
63
+ begin
64
+ File.write(source_file.path, code)
65
+
66
+ opts = yield tool, source_file.path
67
+ generate(opts, :stdout)
68
+ ensure
69
+ source_file.unlink
70
+ end
71
+ end
72
+
54
73
  private
55
74
  def generate(opts, target_file, open3_opts = {})
56
75
  case opts
57
76
  when Array
58
77
  args = opts
59
78
  out_file = nil
79
+ env = {}
60
80
  when Hash
61
81
  args = opts[:args]
62
82
  out_file = opts[:out_file]
83
+ env = opts[:env] || {}
63
84
  else
64
85
  raise "Block passed to generate_file should return an Array or a Hash"
65
86
  end
66
87
 
67
- result = ::Asciidoctor::Diagram::Cli.run(*args, open3_opts)
88
+ logger.debug "Executing #{args} with options #{open3_opts} and environment #{env}"
89
+ result = ::Asciidoctor::Diagram::Cli.run(env, *args, open3_opts)
68
90
 
69
91
  data = target_file == :stdout ? result[:out] : read_result(target_file, out_file)
70
92
 
@@ -7,14 +7,14 @@ module Asciidoctor
7
7
  GIF87A_SIGNATURE = 'GIF87a'.force_encoding(Encoding::ASCII_8BIT)
8
8
  GIF89A_SIGNATURE = 'GIF89a'.force_encoding(Encoding::ASCII_8BIT)
9
9
 
10
- def self.get_image_size(data)
10
+ def self.post_process_image(data, optimise)
11
11
  bio = BinaryIO.new(data)
12
12
  gif_signature = bio.read_string(6)
13
13
  raise "Invalid GIF signature" unless gif_signature == GIF87A_SIGNATURE || gif_signature == GIF89A_SIGNATURE
14
14
 
15
15
  width = bio.read_uint16_le
16
16
  height = bio.read_uint16_le
17
- [width, height]
17
+ [data, width, height]
18
18
  end
19
19
  end
20
20
  end
@@ -5,9 +5,7 @@ module Asciidoctor
5
5
  # @private
6
6
  module Java
7
7
  def self.classpath
8
- @classpath ||= [
9
- File.expand_path(File.join('../..', 'server-1.3.15.jar'), File.dirname(__FILE__))
10
- ]
8
+ @classpath ||= Dir[File.join(File.dirname(__FILE__), '*.jar')]
11
9
  end
12
10
 
13
11
  CRLF = "\r\n".encode(Encoding::US_ASCII)
@@ -53,6 +51,10 @@ module Asciidoctor
53
51
  io.set_encoding Encoding::US_ASCII
54
52
  status_line = io.readline(CRLF)
55
53
  status_line_parts = STATUS_LINE.match status_line
54
+ unless status_line_parts
55
+ raise "Unexpected HTTP status line: #{status_line}"
56
+ end
57
+
56
58
  resp[:code] = status_line_parts[1].to_i
57
59
  resp[:reason] = status_line_parts[2]
58
60
 
@@ -88,6 +90,119 @@ module Asciidoctor
88
90
  raise "#{prefix_msg}: #{response[:reason]}"
89
91
  end
90
92
  end
93
+
94
+ def self.java
95
+ @java_exe ||= find_java
96
+ raise "Could not find Java executable" unless @java_exe
97
+ @java_exe
98
+ end
99
+
100
+ private
101
+ def self.find_java
102
+ case ::Asciidoctor::Diagram::Platform.os
103
+ when :windows
104
+ path_to(ENV['JAVA_HOME'], 'bin/java.exe') || registry_lookup || ::Asciidoctor::Diagram::Which.which('java')
105
+ when :macosx
106
+ path_to(ENV['JAVA_HOME'], 'bin/java') || path_to(::Asciidoctor::Diagram::Cli.run('/usr/libexec/java_home')[:out].strip, 'bin/java') || ::Asciidoctor::Diagram::Which.which('java')
107
+ else
108
+ path_to(ENV['JAVA_HOME'], 'bin/java') || ::Asciidoctor::Diagram::Which.which('java')
109
+ end
110
+ end
111
+
112
+ def self.path_to(java_home, java_binary)
113
+ exe_path = File.expand_path(java_binary, java_home)
114
+ if File.executable?(exe_path)
115
+ exe_path
116
+ else
117
+ nil
118
+ end
119
+ end
120
+
121
+ JDK_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit'
122
+ JRE_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment'
123
+
124
+ def self.registry_lookup
125
+ registry_current(JRE_KEY) || registry_current(JDK_KEY) || registry_any()
126
+ end
127
+
128
+ def self.registry_current(key)
129
+ current_version = registry_query(key, 'CurrentVersion')
130
+ if current_version
131
+ java_home = registry_query("#{key}\\#{current_version}", 'JavaHome')
132
+ java_exe(java_home)
133
+ else
134
+ nil
135
+ end
136
+ end
137
+
138
+ def self.registry_any()
139
+ java_homes = registry_query('HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft', 'JavaHome', :recursive => true).values
140
+ java_homes.map { |path| java_exe(path) }.find { |exe| !exe.nil? }
141
+ end
142
+
143
+ def self.java_exe(java_home)
144
+ java = File.expand_path('bin/java.exe', java_home)
145
+
146
+ if File.executable?(java)
147
+ java
148
+ else
149
+ nil
150
+ end
151
+ end
152
+
153
+ def self.registry_query(key, value = nil, opts = {})
154
+ args = ['reg', 'query']
155
+ args << key
156
+ args << '/v' << value unless value.nil?
157
+ args << '/s' if opts[:recursive]
158
+
159
+ begin
160
+ lines = ::Asciidoctor::Diagram::Cli.run(*args)[:out].lines.reject { |l| l.strip.empty? }.each
161
+ rescue
162
+ lines = [].each
163
+ end
164
+
165
+ result = {}
166
+
167
+ while true
168
+ begin
169
+ begin
170
+ k = lines.next
171
+ rescue StopIteration
172
+ break
173
+ end
174
+
175
+ unless k.start_with? key
176
+ next
177
+ end
178
+
179
+ v = nil
180
+ begin
181
+ v = lines.next.strip if lines.peek.start_with?(' ')
182
+ rescue StopIteration
183
+ break
184
+ end
185
+
186
+ if !k.valid_encoding? || (v && !v.valid_encoding?)
187
+ next
188
+ end
189
+
190
+ if v && (md = /([^\s]+)\s+(REG_[^\s]+)\s+(.+)/.match(v))
191
+ v_name = md[1]
192
+ v_value = md[3]
193
+ result["#{k}\\#{v_name}"] = v_value
194
+ else
195
+ result[k] = v
196
+ end
197
+ end
198
+ end
199
+
200
+ if value && !opts[:recursive]
201
+ result.values[0]
202
+ else
203
+ result
204
+ end
205
+ end
91
206
  end
92
207
  end
93
208
  end
@@ -10,7 +10,10 @@ module Asciidoctor
10
10
  return
11
11
  end
12
12
 
13
- classpath.flatten.each { |j| require j }
13
+ classpath.flatten.each do |j|
14
+ raise "Classpath item #{j} does not exist" unless File.exist?(j)
15
+ require j
16
+ end
14
17
  @loaded = true
15
18
  end
16
19
 
@@ -10,9 +10,14 @@ module Asciidoctor
10
10
  module Java
11
11
  class CommandServer
12
12
  def initialize(java, classpath)
13
+ classpath.each do |file|
14
+ raise "Classpath item #{file} does not exist" unless File.exist?(file)
15
+ end
16
+
13
17
  args = []
14
18
  args << '-Djava.awt.headless=true'
15
19
  args << '-Djava.net.useSystemProxies=true'
20
+ args << '-Dfile.encoding=UTF-8'
16
21
  args << '-cp'
17
22
  args << classpath.flatten.map { |jar| ::Asciidoctor::Diagram::Platform.host_os_path(jar).strip }.join(::Asciidoctor::Diagram::Platform.host_os_path_separator)
18
23
  args << 'org.asciidoctor.diagram.StdInOutCommandServer'
@@ -41,11 +46,8 @@ module Asciidoctor
41
46
  end
42
47
 
43
48
  def self.instance
44
- @java_exe ||= find_java
45
- raise "Could not find Java executable" unless @java_exe
46
-
47
49
  unless defined?(@command_server) && @command_server
48
- server = CommandServer.new(@java_exe, classpath)
50
+ server = CommandServer.new(java, classpath)
49
51
  @command_server = server
50
52
  at_exit do
51
53
  server.shutdown
@@ -61,113 +63,10 @@ module Asciidoctor
61
63
  # headers = req[:headers] ||= {}
62
64
  # headers['Host'] = "localhost:#{svr.port}"
63
65
  format_request(req, svr.io)
64
- parse_response(svr.io)
65
- end
66
-
67
- private
68
- def self.find_java
69
- case ::Asciidoctor::Diagram::Platform.os
70
- when :windows
71
- path_to(ENV['JAVA_HOME'], 'bin/java.exe') || registry_lookup || ::Asciidoctor::Diagram::Which.which('java')
72
- when :macosx
73
- path_to(ENV['JAVA_HOME'], 'bin/java') || path_to(::Asciidoctor::Diagram::Cli.run('/usr/libexec/java_home')[:out].strip, 'bin/java') || ::Asciidoctor::Diagram::Which.which('java')
74
- else
75
- path_to(ENV['JAVA_HOME'], 'bin/java') || ::Asciidoctor::Diagram::Which.which('java')
76
- end
77
- end
78
-
79
- def self.path_to(java_home, java_binary)
80
- exe_path = File.expand_path(java_binary, java_home)
81
- if File.executable?(exe_path)
82
- exe_path
83
- else
84
- nil
85
- end
86
- end
87
-
88
- JDK_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit'
89
- JRE_KEY = 'HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment'
90
-
91
- def self.registry_lookup
92
- registry_current(JRE_KEY) || registry_current(JDK_KEY) || registry_any()
93
- end
94
-
95
- def self.registry_current(key)
96
- current_version = registry_query(key, 'CurrentVersion')
97
- if current_version
98
- java_home = registry_query("#{key}\\#{current_version}", 'JavaHome')
99
- java_exe(java_home)
100
- else
101
- nil
102
- end
103
- end
104
-
105
- def self.registry_any()
106
- java_homes = registry_query('HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft', 'JavaHome', :recursive => true).values
107
- java_homes.map { |path| java_exe(path) }.find { |exe| !exe.nil? }
108
- end
109
-
110
- def self.java_exe(java_home)
111
- java = File.expand_path('bin/java.exe', java_home)
112
-
113
- if File.executable?(java)
114
- java
115
- else
116
- nil
117
- end
118
- end
119
-
120
- def self.registry_query(key, value = nil, opts = {})
121
- args = ['reg', 'query']
122
- args << key
123
- args << '/v' << value unless value.nil?
124
- args << '/s' if opts[:recursive]
125
-
126
66
  begin
127
- lines = ::Asciidoctor::Diagram::Cli.run(*args)[:out].lines.reject { |l| l.strip.empty? }.each
67
+ parse_response(svr.io)
128
68
  rescue
129
- lines = [].each
130
- end
131
-
132
- result = {}
133
-
134
- while true
135
- begin
136
- begin
137
- k = lines.next
138
- rescue StopIteration
139
- break
140
- end
141
-
142
- unless k.start_with? key
143
- next
144
- end
145
-
146
- v = nil
147
- begin
148
- v = lines.next.strip if lines.peek.start_with?(' ')
149
- rescue StopIteration
150
- break
151
- end
152
-
153
- if !k.valid_encoding? || (v && !v.valid_encoding?)
154
- next
155
- end
156
-
157
- if v && (md = /([^\s]+)\s+(REG_[^\s]+)\s+(.+)/.match(v))
158
- v_name = md[1]
159
- v_value = md[3]
160
- result["#{k}\\#{v_name}"] = v_value
161
- else
162
- result[k] = v
163
- end
164
- end
165
- end
166
-
167
- if value && !opts[:recursive]
168
- result.values[0]
169
- else
170
- result
69
+ raise "Error processing request #{req}\nEncoding of input is #{req[:body].encoding}"
171
70
  end
172
71
  end
173
72
  end