packcr 0.0.4 → 0.0.7

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/exe/packcr +3 -0
  3. data/lib/packcr/broadcast.rb +17 -0
  4. data/lib/packcr/cli.rb +27 -0
  5. data/lib/packcr/code_block.rb +2 -4
  6. data/lib/packcr/context.rb +66 -61
  7. data/lib/packcr/generated/context.rb +440 -0
  8. data/lib/packcr/generated/node/action_node.rb +60 -0
  9. data/lib/packcr/generated/node/alternate_node.rb +98 -0
  10. data/lib/packcr/generated/node/capture_node.rb +39 -0
  11. data/lib/packcr/generated/node/charclass_node.rb +372 -0
  12. data/lib/packcr/generated/node/eof_node.rb +20 -0
  13. data/lib/packcr/generated/node/error_node.rb +67 -0
  14. data/lib/packcr/generated/node/expand_node.rb +30 -0
  15. data/lib/packcr/generated/node/predicate_node.rb +140 -0
  16. data/lib/packcr/generated/node/quantity_node.rb +167 -0
  17. data/lib/packcr/generated/node/reference_node.rb +70 -0
  18. data/lib/packcr/generated/node/rule_node.rb +63 -0
  19. data/lib/packcr/generated/node/sequence_node.rb +42 -0
  20. data/lib/packcr/generated/node/string_node.rb +60 -0
  21. data/lib/packcr/generator.rb +14 -11
  22. data/lib/packcr/node/action_node.rb +18 -7
  23. data/lib/packcr/node/alternate_node.rb +22 -12
  24. data/lib/packcr/node/capture_node.rb +14 -12
  25. data/lib/packcr/node/charclass_node.rb +44 -24
  26. data/lib/packcr/node/eof_node.rb +25 -0
  27. data/lib/packcr/node/error_node.rb +20 -13
  28. data/lib/packcr/node/expand_node.rb +18 -9
  29. data/lib/packcr/node/predicate_node.rb +19 -26
  30. data/lib/packcr/node/quantity_node.rb +31 -24
  31. data/lib/packcr/node/reference_node.rb +31 -9
  32. data/lib/packcr/node/root_node.rb +61 -0
  33. data/lib/packcr/node/rule_node.rb +29 -3
  34. data/lib/packcr/node/sequence_node.rb +48 -31
  35. data/lib/packcr/node/string_node.rb +19 -16
  36. data/lib/packcr/node.rb +34 -5
  37. data/lib/packcr/parser.rb +4493 -3896
  38. data/lib/packcr/stream.rb +22 -22
  39. data/lib/packcr/templates/context/header.c.erb +29 -0
  40. data/lib/packcr/templates/context/source.c.erb +1069 -0
  41. data/lib/packcr/templates/context/source.rb.erb +341 -0
  42. data/lib/packcr/templates/node/action.c.erb +16 -0
  43. data/lib/packcr/templates/node/action.rb.erb +21 -0
  44. data/lib/packcr/templates/node/alternate.c.erb +34 -0
  45. data/lib/packcr/templates/node/alternate.rb.erb +39 -0
  46. data/lib/packcr/templates/node/capture.c.erb +17 -0
  47. data/lib/packcr/templates/node/capture.rb.erb +14 -0
  48. data/lib/packcr/templates/node/charclass.c.erb +47 -0
  49. data/lib/packcr/templates/node/charclass.rb.erb +49 -0
  50. data/lib/packcr/templates/node/charclass_any.c.erb +5 -0
  51. data/lib/packcr/templates/node/charclass_any.rb.erb +7 -0
  52. data/lib/packcr/templates/node/charclass_fail.c.erb +1 -0
  53. data/lib/packcr/templates/node/charclass_fail.rb.erb +1 -0
  54. data/lib/packcr/templates/node/charclass_one.c.erb +19 -0
  55. data/lib/packcr/templates/node/charclass_one.rb.erb +23 -0
  56. data/lib/packcr/templates/node/charclass_utf8.c.erb +49 -0
  57. data/lib/packcr/templates/node/charclass_utf8.rb.erb +50 -0
  58. data/lib/packcr/templates/node/charclass_utf8_reverse.rb.erb +51 -0
  59. data/lib/packcr/templates/node/eof.c.erb +1 -0
  60. data/lib/packcr/templates/node/eof.rb.erb +3 -0
  61. data/lib/packcr/templates/node/error.c.erb +28 -0
  62. data/lib/packcr/templates/node/error.rb.erb +34 -0
  63. data/lib/packcr/templates/node/expand.c.erb +16 -0
  64. data/lib/packcr/templates/node/expand.rb.erb +16 -0
  65. data/lib/packcr/templates/node/predicate.c.erb +30 -0
  66. data/lib/packcr/templates/node/predicate.rb.erb +28 -0
  67. data/lib/packcr/templates/node/predicate_neg.c.erb +23 -0
  68. data/lib/packcr/templates/node/predicate_neg.rb.erb +22 -0
  69. data/lib/packcr/templates/node/quantity_many.c.erb +45 -0
  70. data/lib/packcr/templates/node/quantity_many.rb.erb +47 -0
  71. data/lib/packcr/templates/node/quantity_one.c.erb +21 -0
  72. data/lib/packcr/templates/node/quantity_one.rb.erb +23 -0
  73. data/lib/packcr/templates/node/reference.c.erb +17 -0
  74. data/lib/packcr/templates/node/reference.rb.erb +21 -0
  75. data/lib/packcr/templates/node/reference_reverse.rb.erb +21 -0
  76. data/lib/packcr/templates/node/rule.c.erb +26 -0
  77. data/lib/packcr/templates/node/rule.rb.erb +30 -0
  78. data/lib/packcr/templates/node/sequence.c.erb +12 -0
  79. data/lib/packcr/templates/node/sequence.rb.erb +12 -0
  80. data/lib/packcr/templates/node/string_many.c.erb +11 -0
  81. data/lib/packcr/templates/node/string_many.rb.erb +10 -0
  82. data/lib/packcr/templates/node/string_one.c.erb +8 -0
  83. data/lib/packcr/templates/node/string_one.rb.erb +10 -0
  84. data/lib/packcr/util.rb +21 -24
  85. data/lib/packcr/version.rb +1 -1
  86. data/lib/packcr.rb +9 -13
  87. metadata +117 -10
  88. data/lib/packcr/buffer.rb +0 -47
@@ -0,0 +1,11 @@
1
+ if (
2
+ pcc_refill_buffer(ctx, <%= n %>) < <%= n %> ||
3
+ <%- (n - 1).times do |i| -%>
4
+ (ctx->buffer.buf + ctx->position_offset)[<%= i %>] != '<%= Packcr.escape_character(value[i]) %>' ||
5
+ <%- end -%>
6
+ (ctx->buffer.buf + ctx->position_offset)[<%= n - 1 %>] != '<%= Packcr.escape_character(value[n - 1]) %>'
7
+ ) goto L<%= format("%04d", onfail) %>;
8
+ <%- if gen.location -%>
9
+ pcc_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, n);
10
+ <%- end -%>
11
+ ctx->position_offset += <%= n %>;
@@ -0,0 +1,10 @@
1
+ if (
2
+ refill_buffer(<%= n %>) < <%= n %> ||
3
+ @buffer[@position_offset, <%= n %>] != <%= value[0, n].dump %>
4
+ )
5
+ throw(<%= onfail %>)
6
+ end
7
+ <%- if gen.location -%>
8
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, <%= n %>)
9
+ <%- end -%>
10
+ @position_offset += <%= n %>
@@ -0,0 +1,8 @@
1
+ if (
2
+ pcc_refill_buffer(ctx, 1) < 1 ||
3
+ ctx->buffer.buf[ctx->position_offset] != '<%= Packcr.escape_character(value[0]) %>'
4
+ ) goto L<%= format("%04d", onfail) %>;
5
+ <%- if gen.location -%>
6
+ pcc_location_forward(&ctx->position_offset_loc, ctx->buffer.buf + ctx->position_offset, 1);
7
+ <%- end -%>
8
+ ctx->position_offset++;
@@ -0,0 +1,10 @@
1
+ if (
2
+ refill_buffer(1) < 1 ||
3
+ @buffer[@position_offset] != "<%= Packcr.escape_character(value[0]) %>"
4
+ )
5
+ throw(<%= onfail %>)
6
+ end
7
+ <%- if gen.location -%>
8
+ @position_offset_loc = @position_offset_loc.forward(@buffer, @position_offset, 1)
9
+ <%- end -%>
10
+ @position_offset += 1
data/lib/packcr/util.rb CHANGED
@@ -2,17 +2,13 @@ require "erb"
2
2
 
3
3
  class Packcr
4
4
  module Util
5
- def is_identifier_string(str)
6
- str.match?(/\A(?!\d)\w+\z/)
7
- end
8
-
9
5
  def unescape_string(str, is_charclass)
10
6
  if is_charclass
11
7
  str.gsub!("\\" * 2) { "\\" * 4 }
12
- str.gsub!("\"" ) { "\\\"" }
8
+ str.gsub!("\"") { "\\\"" }
13
9
  end
14
10
  str.gsub!(/\\(.)/) do
15
- c = $1
11
+ c = ::Regexp.last_match(1)
16
12
  case c
17
13
  when "0"
18
14
  "\\x00"
@@ -23,7 +19,7 @@ class Packcr
23
19
  end
24
20
  end
25
21
  str.gsub!(/[^\x00-\x7f]/) do
26
- "\\x%02x" % $&.ord
22
+ format("\\x%02x", ::Regexp.last_match(0).ord)
27
23
  end
28
24
  str.replace "\"#{str}\"".undump
29
25
  end
@@ -35,19 +31,20 @@ class Packcr
35
31
  def escape_string(str)
36
32
  str = str.b
37
33
  str.gsub(/(\0+)|(\e+)|("+)|('+)|(\\+)|((?:(?![\0\e"'\\])[ -~])+)|([\x01-\x1a\x1c-\x1f\x7f-\xff]+)/n) do
38
- n = $&.size
39
- next "\\0" * n if $1
40
- next "\\x1b" * n if $2
41
- next "\\\"" * n if $3
42
- next "\\\'" * n if $4
43
- next "\\\\" * n if $5
44
- next $6 if $6
45
- $7.dump[1..-2].downcase
34
+ n = ::Regexp.last_match(0).size
35
+ next "\\0" * n if ::Regexp.last_match(1)
36
+ next "\\x1b" * n if ::Regexp.last_match(2)
37
+ next "\\\"" * n if ::Regexp.last_match(3)
38
+ next "\\'" * n if ::Regexp.last_match(4)
39
+ next "\\\\" * n if ::Regexp.last_match(5)
40
+ next ::Regexp.last_match(6) if ::Regexp.last_match(6)
41
+
42
+ ::Regexp.last_match(7).dump[1..-2].downcase
46
43
  end
47
44
  end
48
45
 
49
46
  def dump_integer_value(value)
50
- if value == nil
47
+ if value.nil?
51
48
  $stdout.print "void"
52
49
  else
53
50
  $stdout.print value
@@ -62,16 +59,12 @@ class Packcr
62
59
  $stdout.print escape_string(str)
63
60
  end
64
61
 
65
- def find_trailing_blanks(str)
66
- str =~ /[ \v\f\t\n\r]*\z/
67
- end
68
-
69
62
  def unify_indent_spaces(spaces)
70
63
  offset = 0
71
64
  spaces.tr!("\v\f", " ")
72
65
  spaces.gsub!(/\t+/) do
73
- chars = $`.length
74
- o = 8 * $&.length - (offset + chars) % 8
66
+ chars = ::Regexp.last_match.pre_match.length
67
+ o = (8 * ::Regexp.last_match(0).length) - ((offset + chars) % 8)
75
68
  offset = (7 - chars) % 8
76
69
  " " * o
77
70
  end
@@ -83,15 +76,19 @@ class Packcr
83
76
  erb = ERB.new(File.read(template_path), trim_mode: "%-")
84
77
  erb.filename = template_path
85
78
  result = erb.result(b)
79
+ format_code(result, indent: indent, unwrap: unwrap)
80
+ end
81
+
82
+ def format_code(result, indent: 0, unwrap: false)
86
83
  if unwrap
87
84
  result.gsub!(/\A\{|\}\z/, "")
88
85
  indent -= 4
89
86
  end
90
87
  result.gsub!(/^(?!$)/, " " * indent)
91
- result.gsub!(/^( *?) {0,4}<<<</) { $1 }
88
+ result.gsub!(/^( *?) {0,4}<<<</) { ::Regexp.last_match(1) }
92
89
  result
93
90
  end
94
91
  end
95
92
 
96
93
  extend Util
97
- end
94
+ end
@@ -1,3 +1,3 @@
1
1
  class Packcr
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.7".freeze
3
3
  end
data/lib/packcr.rb CHANGED
@@ -1,15 +1,3 @@
1
- class Packcr
2
- end
3
-
4
- require "packcr/util"
5
- require "packcr/code_block"
6
- require "packcr/stream"
7
- require "packcr/generator"
8
- require "packcr/buffer"
9
- require "packcr/node"
10
- require "packcr/context"
11
- require "packcr/version"
12
-
13
1
  class Packcr
14
2
  CODE_REACH__BOTH = 0
15
3
  CODE_REACH__ALWAYS_SUCCEED = 1
@@ -22,7 +10,7 @@ class Packcr
22
10
 
23
11
  def run
24
12
  Context.new(@path.to_s, **@opt) do |ctx|
25
- if !ctx.parse
13
+ if !ctx.parse_all
26
14
  raise "PackCR error: can't parse"
27
15
  end
28
16
  if !ctx.generate
@@ -31,3 +19,11 @@ class Packcr
31
19
  end
32
20
  end
33
21
  end
22
+
23
+ require "packcr/util"
24
+ require "packcr/code_block"
25
+ require "packcr/stream"
26
+ require "packcr/generator"
27
+ require "packcr/node"
28
+ require "packcr/context"
29
+ require "packcr/version"
metadata CHANGED
@@ -1,61 +1,168 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: packcr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - wanabe
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-06 00:00:00.000000000 Z
11
+ date: 2023-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: test-unit
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.5'
19
+ version: '13.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.5'
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-parameterized
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.43.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.43.0
27
69
  description:
28
70
  email:
29
- executables: []
71
+ executables:
72
+ - packcr
30
73
  extensions: []
31
74
  extra_rdoc_files: []
32
75
  files:
76
+ - exe/packcr
33
77
  - lib/packcr.rb
34
- - lib/packcr/buffer.rb
78
+ - lib/packcr/broadcast.rb
79
+ - lib/packcr/cli.rb
35
80
  - lib/packcr/code_block.rb
36
81
  - lib/packcr/context.rb
82
+ - lib/packcr/generated/context.rb
83
+ - lib/packcr/generated/node/action_node.rb
84
+ - lib/packcr/generated/node/alternate_node.rb
85
+ - lib/packcr/generated/node/capture_node.rb
86
+ - lib/packcr/generated/node/charclass_node.rb
87
+ - lib/packcr/generated/node/eof_node.rb
88
+ - lib/packcr/generated/node/error_node.rb
89
+ - lib/packcr/generated/node/expand_node.rb
90
+ - lib/packcr/generated/node/predicate_node.rb
91
+ - lib/packcr/generated/node/quantity_node.rb
92
+ - lib/packcr/generated/node/reference_node.rb
93
+ - lib/packcr/generated/node/rule_node.rb
94
+ - lib/packcr/generated/node/sequence_node.rb
95
+ - lib/packcr/generated/node/string_node.rb
37
96
  - lib/packcr/generator.rb
38
97
  - lib/packcr/node.rb
39
98
  - lib/packcr/node/action_node.rb
40
99
  - lib/packcr/node/alternate_node.rb
41
100
  - lib/packcr/node/capture_node.rb
42
101
  - lib/packcr/node/charclass_node.rb
102
+ - lib/packcr/node/eof_node.rb
43
103
  - lib/packcr/node/error_node.rb
44
104
  - lib/packcr/node/expand_node.rb
45
105
  - lib/packcr/node/predicate_node.rb
46
106
  - lib/packcr/node/quantity_node.rb
47
107
  - lib/packcr/node/reference_node.rb
108
+ - lib/packcr/node/root_node.rb
48
109
  - lib/packcr/node/rule_node.rb
49
110
  - lib/packcr/node/sequence_node.rb
50
111
  - lib/packcr/node/string_node.rb
51
112
  - lib/packcr/parser.rb
52
113
  - lib/packcr/stream.rb
114
+ - lib/packcr/templates/context/header.c.erb
115
+ - lib/packcr/templates/context/source.c.erb
116
+ - lib/packcr/templates/context/source.rb.erb
117
+ - lib/packcr/templates/node/action.c.erb
118
+ - lib/packcr/templates/node/action.rb.erb
119
+ - lib/packcr/templates/node/alternate.c.erb
120
+ - lib/packcr/templates/node/alternate.rb.erb
121
+ - lib/packcr/templates/node/capture.c.erb
122
+ - lib/packcr/templates/node/capture.rb.erb
123
+ - lib/packcr/templates/node/charclass.c.erb
124
+ - lib/packcr/templates/node/charclass.rb.erb
125
+ - lib/packcr/templates/node/charclass_any.c.erb
126
+ - lib/packcr/templates/node/charclass_any.rb.erb
127
+ - lib/packcr/templates/node/charclass_fail.c.erb
128
+ - lib/packcr/templates/node/charclass_fail.rb.erb
129
+ - lib/packcr/templates/node/charclass_one.c.erb
130
+ - lib/packcr/templates/node/charclass_one.rb.erb
131
+ - lib/packcr/templates/node/charclass_utf8.c.erb
132
+ - lib/packcr/templates/node/charclass_utf8.rb.erb
133
+ - lib/packcr/templates/node/charclass_utf8_reverse.rb.erb
134
+ - lib/packcr/templates/node/eof.c.erb
135
+ - lib/packcr/templates/node/eof.rb.erb
136
+ - lib/packcr/templates/node/error.c.erb
137
+ - lib/packcr/templates/node/error.rb.erb
138
+ - lib/packcr/templates/node/expand.c.erb
139
+ - lib/packcr/templates/node/expand.rb.erb
140
+ - lib/packcr/templates/node/predicate.c.erb
141
+ - lib/packcr/templates/node/predicate.rb.erb
142
+ - lib/packcr/templates/node/predicate_neg.c.erb
143
+ - lib/packcr/templates/node/predicate_neg.rb.erb
144
+ - lib/packcr/templates/node/quantity_many.c.erb
145
+ - lib/packcr/templates/node/quantity_many.rb.erb
146
+ - lib/packcr/templates/node/quantity_one.c.erb
147
+ - lib/packcr/templates/node/quantity_one.rb.erb
148
+ - lib/packcr/templates/node/reference.c.erb
149
+ - lib/packcr/templates/node/reference.rb.erb
150
+ - lib/packcr/templates/node/reference_reverse.rb.erb
151
+ - lib/packcr/templates/node/rule.c.erb
152
+ - lib/packcr/templates/node/rule.rb.erb
153
+ - lib/packcr/templates/node/sequence.c.erb
154
+ - lib/packcr/templates/node/sequence.rb.erb
155
+ - lib/packcr/templates/node/string_many.c.erb
156
+ - lib/packcr/templates/node/string_many.rb.erb
157
+ - lib/packcr/templates/node/string_one.c.erb
158
+ - lib/packcr/templates/node/string_one.rb.erb
53
159
  - lib/packcr/util.rb
54
160
  - lib/packcr/version.rb
55
161
  homepage: https://github.com/wanabe/packcr
56
162
  licenses:
57
163
  - MIT
58
- metadata: {}
164
+ metadata:
165
+ rubygems_mfa_required: 'true'
59
166
  post_install_message:
60
167
  rdoc_options: []
61
168
  require_paths:
@@ -64,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
171
  requirements:
65
172
  - - ">="
66
173
  - !ruby/object:Gem::Version
67
- version: '0'
174
+ version: 2.7.0
68
175
  required_rubygems_version: !ruby/object:Gem::Requirement
69
176
  requirements:
70
177
  - - ">="
data/lib/packcr/buffer.rb DELETED
@@ -1,47 +0,0 @@
1
-
2
- class Packcr
3
- class Buffer
4
- def initialize
5
- @buf = +"".b
6
- end
7
-
8
- def len
9
- @buf.length
10
- end
11
-
12
- def [](index)
13
- @buf[index].ord
14
- end
15
-
16
- def count_characters(s, e)
17
- # UTF-8 multibyte character support but without checking UTF-8 validity
18
- n = 0
19
- i = s
20
- while i < e
21
- c = self[i]
22
- if c == 0
23
- break
24
- end
25
- n += 1
26
- i += (c < 0x80) ? 1 : ((c & 0xe0) == 0xc0) ? 2 : ((c & 0xf0) == 0xe0) ? 3 : ((c & 0xf8) == 0xf0) ? 4 : 1
27
- end
28
- return n
29
- end
30
-
31
- def add(ch)
32
- @buf.concat(ch)
33
- end
34
-
35
- def to_s
36
- @buf
37
- end
38
-
39
- def []=(pos, ch)
40
- @buf[pos] = ch
41
- end
42
-
43
- def add_pos(offset)
44
- @buf[0, offset] = ""
45
- end
46
- end
47
- end