packcr 0.0.4 → 0.0.7

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