crass 1.0.3 → 1.0.6

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 (41) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +8 -4
  3. data/HISTORY.md +21 -0
  4. data/LICENSE +1 -1
  5. data/README.md +0 -22
  6. data/Rakefile +5 -4
  7. data/crass.gemspec +8 -2
  8. data/lib/crass/parser.rb +15 -15
  9. data/lib/crass/tokenizer.rb +57 -38
  10. data/lib/crass/version.rb +1 -1
  11. metadata +9 -67
  12. data/test/css-parsing-tests/An+B.json +0 -156
  13. data/test/css-parsing-tests/LICENSE +0 -8
  14. data/test/css-parsing-tests/README.rst +0 -301
  15. data/test/css-parsing-tests/color3.json +0 -142
  16. data/test/css-parsing-tests/color3_hsl.json +0 -3890
  17. data/test/css-parsing-tests/color3_keywords.json +0 -803
  18. data/test/css-parsing-tests/component_value_list.json +0 -432
  19. data/test/css-parsing-tests/declaration_list.json +0 -44
  20. data/test/css-parsing-tests/make_color3_hsl.py +0 -17
  21. data/test/css-parsing-tests/make_color3_keywords.py +0 -191
  22. data/test/css-parsing-tests/one_component_value.json +0 -27
  23. data/test/css-parsing-tests/one_declaration.json +0 -46
  24. data/test/css-parsing-tests/one_rule.json +0 -36
  25. data/test/css-parsing-tests/rule_list.json +0 -48
  26. data/test/css-parsing-tests/stylesheet.json +0 -44
  27. data/test/css-parsing-tests/stylesheet_bytes.json +0 -146
  28. data/test/shared/parse_rules.rb +0 -463
  29. data/test/support/common.rb +0 -170
  30. data/test/support/serialization/animate.css +0 -3158
  31. data/test/support/serialization/bootstrap-theme.css +0 -384
  32. data/test/support/serialization/bootstrap.css +0 -6805
  33. data/test/support/serialization/html5-boilerplate.css +0 -268
  34. data/test/support/serialization/misc.css +0 -9
  35. data/test/support/serialization/pure.css +0 -1662
  36. data/test/test_crass.rb +0 -31
  37. data/test/test_css_parsing_tests.rb +0 -150
  38. data/test/test_parse_properties.rb +0 -310
  39. data/test/test_parse_rules.rb +0 -17
  40. data/test/test_parse_stylesheet.rb +0 -17
  41. data/test/test_serialization.rb +0 -71
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ef1bd09fd5e081df138061c200938cb6f197a62e
4
- data.tar.gz: 71f860902672bf678340a722bf6c811d63eab276
2
+ SHA256:
3
+ metadata.gz: def285e9f3d16e7222dce13f004b8ad8b936c76ecec909306cf15078f6ec8999
4
+ data.tar.gz: 6fbb08644b3ff290d66012bbfa9afa249ab565f9e67240e13d433715d1b535b7
5
5
  SHA512:
6
- metadata.gz: 95fd718bb11a892f968cf9690ae5653b7285accecd5e7deb456e31ff0b66a9241b0aa4f3fa91fcdde887a119555380315babbbe4cf2ed9aef8228b25e3c41155
7
- data.tar.gz: 2fb2f4e30b20d179ca512c524cfe70e80da3258457d2c2b4b046ac9106ad209b79377f75749463c20fc8b0a9e5863bea5dcca827deea0b974ba955c12e55b0f1
6
+ metadata.gz: 43daba64a022574e3ac4b439c5dca3cc329e2217e47df9eeaf79987748fa949feeaccb4745a212ebb9e91f01d4b5ec433947b57380efda233d078a9f1f1ea8ab
7
+ data.tar.gz: aa88544b1374fa5fb774970e5b714e6913c23e750a0e84767548e9c8076d25851f9f8861b38dfef0c9262a8c7785bce82436ad19c951ea4a9836fcee4a163199
data/.travis.yml CHANGED
@@ -1,7 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.2.8
5
- - 2.3.5
6
- - 2.4.2
3
+ - 2.3
4
+ - 2.4
5
+ - 2.5
6
+ - 2.6
7
7
  - ruby-head
8
+
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
data/HISTORY.md CHANGED
@@ -1,6 +1,27 @@
1
1
  Crass Change History
2
2
  ====================
3
3
 
4
+ 1.0.6 (2020-01-12)
5
+ ------------------
6
+
7
+ * Number values are now limited to a maximum of `Float::MAX` and a minimum of
8
+ negative `Float::MAX`. (#11)
9
+
10
+ * Added project metadata to the gemspec. (#9 - @orien)
11
+
12
+
13
+ 1.0.5 (2019-10-15)
14
+ ------------------
15
+
16
+ * Removed test files from the gem. (#8 - @t-richards)
17
+
18
+
19
+ 1.0.4 (2018-04-08)
20
+ ------------------
21
+
22
+ * Fixed whitespace warnings. (#7 - @yahonda)
23
+
24
+
4
25
  1.0.3 (2017-11-13)
5
26
  ------------------
6
27
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2017 Ryan Grove (ryan@wonko.com)
1
+ Copyright (c) 2020 Ryan Grove (ryan@wonko.com)
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of
4
4
  this software and associated documentation files (the ‘Software’), to deal in
data/README.md CHANGED
@@ -190,25 +190,3 @@ tokenizing and parsing rules that Crass implements.
190
190
  [simon]:http://exyr.org/about/
191
191
  [spec]:http://www.w3.org/TR/css-syntax-3/
192
192
  [tab]:http://www.xanthir.com/contact/
193
-
194
- License
195
- -------
196
-
197
- Copyright (c) 2017 Ryan Grove (ryan@wonko.com)
198
-
199
- Permission is hereby granted, free of charge, to any person obtaining a copy of
200
- this software and associated documentation files (the ‘Software’), to deal in
201
- the Software without restriction, including without limitation the rights to
202
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
203
- the Software, and to permit persons to whom the Software is furnished to do so,
204
- subject to the following conditions:
205
-
206
- The above copyright notice and this permission notice shall be included in all
207
- copies or substantial portions of the Software.
208
-
209
- THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
210
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
211
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
212
- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
213
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
214
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -5,12 +5,13 @@ Bundler::GemHelper.install_tasks
5
5
 
6
6
  Rake::TestTask.new
7
7
  task :default => [:test]
8
+ task :test => :set_rubyopts
9
+
10
+ task :set_rubyopts do
11
+ ENV['RUBYOPT'] ||= ""
12
+ ENV['RUBYOPT'] += " -w"
8
13
 
9
- task :test => :set_frozen_string_literal_option
10
- task :set_frozen_string_literal_option do
11
14
  if RUBY_ENGINE == "ruby" && RUBY_VERSION >= "2.3"
12
- warn "NOTE: Testing support for frozen string literals"
13
- ENV['RUBYOPT'] ||= ""
14
15
  ENV['RUBYOPT'] += " --enable-frozen-string-literal --debug=frozen-string-literal"
15
16
  end
16
17
  end
data/crass.gemspec CHANGED
@@ -11,13 +11,19 @@ Gem::Specification.new do |s|
11
11
  s.homepage = 'https://github.com/rgrove/crass/'
12
12
  s.license = 'MIT'
13
13
 
14
+ s.metadata = {
15
+ 'bug_tracker_uri' => 'https://github.com/rgrove/crass/issues',
16
+ 'changelog_uri' => "https://github.com/rgrove/crass/blob/v#{s.version}/HISTORY.md",
17
+ 'documentation_uri' => "https://www.rubydoc.info/gems/crass/#{s.version}",
18
+ 'source_code_uri' => "https://github.com/rgrove/crass/tree/v#{s.version}",
19
+ }
20
+
14
21
  s.platform = Gem::Platform::RUBY
15
22
  s.required_ruby_version = Gem::Requirement.new('>= 1.9.2')
16
23
 
17
24
  s.require_paths = ['lib']
18
25
 
19
- s.files = `git ls-files`.split($/)
20
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
26
+ s.files = `git ls-files -z`.split("\x0").grep_v(%r{^test/})
21
27
 
22
28
  # Development dependencies.
23
29
  s.add_development_dependency 'minitest', '~> 5.0.8'
data/lib/crass/parser.rb CHANGED
@@ -402,25 +402,25 @@ module Crass
402
402
  case token[:node]
403
403
  # Non-standard. Spec says to discard comments and whitespace, but we
404
404
  # keep them so we can serialize faithfully.
405
- when :comment, :whitespace
406
- rules << token
405
+ when :comment, :whitespace
406
+ rules << token
407
407
 
408
- when :cdc, :cdo
409
- unless flags[:top_level]
410
- @tokens.reconsume
411
- rule = consume_qualified_rule
412
- rules << rule if rule
413
- end
414
-
415
- when :at_keyword
416
- @tokens.reconsume
417
- rule = consume_at_rule
418
- rules << rule if rule
419
-
420
- else
408
+ when :cdc, :cdo
409
+ unless flags[:top_level]
421
410
  @tokens.reconsume
422
411
  rule = consume_qualified_rule
423
412
  rules << rule if rule
413
+ end
414
+
415
+ when :at_keyword
416
+ @tokens.reconsume
417
+ rule = consume_at_rule
418
+ rules << rule if rule
419
+
420
+ else
421
+ @tokens.reconsume
422
+ rule = consume_qualified_rule
423
+ rules << rule if rule
424
424
  end
425
425
  end
426
426
 
@@ -429,27 +429,36 @@ module Crass
429
429
  # 4.3.3. http://dev.w3.org/csswg/css-syntax/#consume-a-numeric-token
430
430
  def consume_numeric
431
431
  number = consume_number
432
+ repr = number[0]
433
+ value = number[1]
434
+ type = number[2]
435
+
436
+ if type == :integer
437
+ value = value.to_i
438
+ else
439
+ value = value.to_f
440
+ end
432
441
 
433
442
  if start_identifier?(@s.peek(3))
434
443
  create_token(:dimension,
435
- :repr => number[0],
436
- :type => number[2],
437
- :unit => consume_name,
438
- :value => number[1])
444
+ :repr => repr,
445
+ :type => type,
446
+ :unit => consume_name,
447
+ :value => value)
439
448
 
440
449
  elsif @s.peek == '%'
441
450
  @s.consume
442
451
 
443
452
  create_token(:percentage,
444
- :repr => number[0],
445
- :type => number[2],
446
- :value => number[1])
453
+ :repr => repr,
454
+ :type => type,
455
+ :value => value)
447
456
 
448
457
  else
449
458
  create_token(:number,
450
- :repr => number[0],
451
- :type => number[2],
452
- :value => number[1])
459
+ :repr => repr,
460
+ :type => type,
461
+ :value => value)
453
462
  end
454
463
  end
455
464
 
@@ -537,38 +546,38 @@ module Crass
537
546
 
538
547
  until @s.eos?
539
548
  case char = @s.consume
540
- when ')'
541
- break
549
+ when ')'
550
+ break
542
551
 
543
- when RE_WHITESPACE
544
- @s.scan(RE_WHITESPACE)
552
+ when RE_WHITESPACE
553
+ @s.scan(RE_WHITESPACE)
545
554
 
546
- if @s.eos? || @s.peek == ')'
547
- @s.consume
548
- break
549
- else
550
- return create_token(:bad_url, :value => value + consume_bad_url)
551
- end
555
+ if @s.eos? || @s.peek == ')'
556
+ @s.consume
557
+ break
558
+ else
559
+ return create_token(:bad_url, :value => value + consume_bad_url)
560
+ end
561
+
562
+ when '"', "'", '(', RE_NON_PRINTABLE
563
+ # Parse error.
564
+ return create_token(:bad_url,
565
+ :error => true,
566
+ :value => value + consume_bad_url)
552
567
 
553
- when '"', "'", '(', RE_NON_PRINTABLE
568
+ when '\\'
569
+ if valid_escape?
570
+ value << consume_escaped
571
+ else
554
572
  # Parse error.
555
573
  return create_token(:bad_url,
556
574
  :error => true,
557
- :value => value + consume_bad_url)
558
-
559
- when '\\'
560
- if valid_escape?
561
- value << consume_escaped
562
- else
563
- # Parse error.
564
- return create_token(:bad_url,
565
- :error => true,
566
- :value => value + consume_bad_url
567
- )
568
- end
575
+ :value => value + consume_bad_url
576
+ )
577
+ end
569
578
 
570
- else
571
- value << char
579
+ else
580
+ value << char
572
581
  end
573
582
  end
574
583
 
@@ -588,9 +597,19 @@ module Crass
588
597
  t = matches[:exponent_sign] == '-' ? -1 : 1
589
598
  e = matches[:exponent].to_i
590
599
 
591
- # I know this looks nutty, but it's exactly what's defined in the spec,
592
- # and it works.
593
- s * (i + f * 10**-d) * 10**(t * e)
600
+ # I know this formula looks nutty, but it's exactly what's defined in the
601
+ # spec, and it works.
602
+ value = s * (i + f * 10**-d) * 10**(t * e)
603
+
604
+ # Maximum and minimum values aren't defined in the spec, but are enforced
605
+ # here for sanity.
606
+ if value > Float::MAX
607
+ value = Float::MAX
608
+ elsif value < -Float::MAX
609
+ value = -Float::MAX
610
+ end
611
+
612
+ value
594
613
  end
595
614
 
596
615
  # Creates and returns a new token with the given _properties_.
data/lib/crass/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Crass
4
- VERSION = '1.0.3'
4
+ VERSION = '1.0.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crass
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Grove
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-13 00:00:00.000000000 Z
11
+ date: 2020-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -60,40 +60,14 @@ files:
60
60
  - lib/crass/token-scanner.rb
61
61
  - lib/crass/tokenizer.rb
62
62
  - lib/crass/version.rb
63
- - test/css-parsing-tests/An+B.json
64
- - test/css-parsing-tests/LICENSE
65
- - test/css-parsing-tests/README.rst
66
- - test/css-parsing-tests/color3.json
67
- - test/css-parsing-tests/color3_hsl.json
68
- - test/css-parsing-tests/color3_keywords.json
69
- - test/css-parsing-tests/component_value_list.json
70
- - test/css-parsing-tests/declaration_list.json
71
- - test/css-parsing-tests/make_color3_hsl.py
72
- - test/css-parsing-tests/make_color3_keywords.py
73
- - test/css-parsing-tests/one_component_value.json
74
- - test/css-parsing-tests/one_declaration.json
75
- - test/css-parsing-tests/one_rule.json
76
- - test/css-parsing-tests/rule_list.json
77
- - test/css-parsing-tests/stylesheet.json
78
- - test/css-parsing-tests/stylesheet_bytes.json
79
- - test/shared/parse_rules.rb
80
- - test/support/common.rb
81
- - test/support/serialization/animate.css
82
- - test/support/serialization/bootstrap-theme.css
83
- - test/support/serialization/bootstrap.css
84
- - test/support/serialization/html5-boilerplate.css
85
- - test/support/serialization/misc.css
86
- - test/support/serialization/pure.css
87
- - test/test_crass.rb
88
- - test/test_css_parsing_tests.rb
89
- - test/test_parse_properties.rb
90
- - test/test_parse_rules.rb
91
- - test/test_parse_stylesheet.rb
92
- - test/test_serialization.rb
93
63
  homepage: https://github.com/rgrove/crass/
94
64
  licenses:
95
65
  - MIT
96
- metadata: {}
66
+ metadata:
67
+ bug_tracker_uri: https://github.com/rgrove/crass/issues
68
+ changelog_uri: https://github.com/rgrove/crass/blob/v1.0.6/HISTORY.md
69
+ documentation_uri: https://www.rubydoc.info/gems/crass/1.0.6
70
+ source_code_uri: https://github.com/rgrove/crass/tree/v1.0.6
97
71
  post_install_message:
98
72
  rdoc_options: []
99
73
  require_paths:
@@ -109,40 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
83
  - !ruby/object:Gem::Version
110
84
  version: '0'
111
85
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.6.11
86
+ rubygems_version: 3.0.3
114
87
  signing_key:
115
88
  specification_version: 4
116
89
  summary: CSS parser based on the CSS Syntax Level 3 spec.
117
- test_files:
118
- - test/css-parsing-tests/An+B.json
119
- - test/css-parsing-tests/LICENSE
120
- - test/css-parsing-tests/README.rst
121
- - test/css-parsing-tests/color3.json
122
- - test/css-parsing-tests/color3_hsl.json
123
- - test/css-parsing-tests/color3_keywords.json
124
- - test/css-parsing-tests/component_value_list.json
125
- - test/css-parsing-tests/declaration_list.json
126
- - test/css-parsing-tests/make_color3_hsl.py
127
- - test/css-parsing-tests/make_color3_keywords.py
128
- - test/css-parsing-tests/one_component_value.json
129
- - test/css-parsing-tests/one_declaration.json
130
- - test/css-parsing-tests/one_rule.json
131
- - test/css-parsing-tests/rule_list.json
132
- - test/css-parsing-tests/stylesheet.json
133
- - test/css-parsing-tests/stylesheet_bytes.json
134
- - test/shared/parse_rules.rb
135
- - test/support/common.rb
136
- - test/support/serialization/animate.css
137
- - test/support/serialization/bootstrap-theme.css
138
- - test/support/serialization/bootstrap.css
139
- - test/support/serialization/html5-boilerplate.css
140
- - test/support/serialization/misc.css
141
- - test/support/serialization/pure.css
142
- - test/test_crass.rb
143
- - test/test_css_parsing_tests.rb
144
- - test/test_parse_properties.rb
145
- - test/test_parse_rules.rb
146
- - test/test_parse_stylesheet.rb
147
- - test/test_serialization.rb
148
- has_rdoc:
90
+ test_files: []
@@ -1,156 +0,0 @@
1
- [
2
-
3
- "", null,
4
- " \n", null,
5
-
6
- "odd", [2, 1],
7
- "even", [2, 0],
8
- "ödd", null,
9
- "éven", null,
10
- " /**/\t OdD /**/\n", [2, 1],
11
- " /**/\t EveN /**/\n", [2, 0],
12
-
13
-
14
- "3", [0, 3],
15
- "+2 ", [0, 2],
16
- " -14 ", [0, -14],
17
- "+ 2 ", null,
18
- "- 14 ", null,
19
- "3.1", null,
20
-
21
- "3N", [3, 0],
22
- "+2N ", [2, 0],
23
- " -14n ", [-14, 0],
24
- "+ 2N ", null,
25
- "- 14N ", null,
26
- "3.1N", null,
27
- "3 n", null,
28
-
29
- " N", [1, 0],
30
- " +n", [1, 0],
31
- " -n", [-1, 0],
32
- "+ n", null,
33
- "- n", null,
34
-
35
-
36
- "3N+1", [3, 1],
37
- "+2n+1 ", [2, 1],
38
- " -14n+1 ", [-14, 1],
39
- "+ 2N+1 ", null,
40
- "- 14n+1 ", null,
41
- "3.1n+1", null,
42
- "3 n+1", null,
43
-
44
- " n+1", [1, 1],
45
- " +N+1", [1, 1],
46
- " -n+1", [-1, 1],
47
- "+ N+1", null,
48
- "- N+1", null,
49
-
50
- "3n-1", [3, -1],
51
- "+2N-1 ", [2, -1],
52
- " -14n-1 ", [-14, -1],
53
- "+ 2N-1 ", null,
54
- "- 14N-1 ", null,
55
- "3.1n-1", null,
56
- "3 n-1", null,
57
- "3n-1foo", null,
58
-
59
- " n-1", [1, -1],
60
- " +n-1", [1, -1],
61
- " -n-1", [-1, -1],
62
- "+ n-1", null,
63
- "- n-1", null,
64
- " +n-1foo", null,
65
- " -n-1foo", null,
66
-
67
-
68
- "3N +1", [3, 1],
69
- "+2N +1 ", [2, 1],
70
- " -14n +1 ", [-14, 1],
71
- "+ 2N +1 ", null,
72
- "- 14n +1 ", null,
73
- "3.1N +1", null,
74
- "3 n +1", null,
75
- "3n foo", null,
76
- "3n + foo", null,
77
-
78
- " n +1", [1, 1],
79
- " +N +1", [1, 1],
80
- " -n +1", [-1, 1],
81
- "+ n +1", null,
82
- "- N +1", null,
83
-
84
- "3N -1", [3, -1],
85
- "+2n -1 ", [2, -1],
86
- " -14n -1 ", [-14, -1],
87
- "+ 2n -1 ", null,
88
- "- 14N -1 ", null,
89
- "3.1N -1", null,
90
- "3 N -1", null,
91
-
92
- " N -1", [1, -1],
93
- " +N -1", [1, -1],
94
- " -n -1", [-1, -1],
95
- "+ n -1", null,
96
- "- n -1", null,
97
-
98
-
99
- "3n+ 1", [3, 1],
100
- "+2n+ 1 ", [2, 1],
101
- " -14n+ 1 ", [-14, 1],
102
- "+ 2n+ 1 ", null,
103
- "- 14N+ 1 ", null,
104
- "3.1n+ 1", null,
105
- "3 N+ 1", null,
106
-
107
- " N+ 1", [1, 1],
108
- " +N+ 1", [1, 1],
109
- " -N+ 1", [-1, 1],
110
- "+ n+ 1", null,
111
- "- N+ 1", null,
112
-
113
- "3n- 1", [3, -1],
114
- "+2N- 1 ", [2, -1],
115
- " -14N- 1 ", [-14, -1],
116
- "+ 2N- 1 ", null,
117
- "- 14n- 1 ", null,
118
- "3.1n- 1", null,
119
- "3 n- 1", null,
120
-
121
- " N- 1", [1, -1],
122
- " +N- 1", [1, -1],
123
- " -n- 1", [-1, -1],
124
- "+ n- 1", null,
125
- "- N- 1", null,
126
-
127
-
128
- "3N + 1", [3, 1],
129
- "+2N + 1 ", [2, 1],
130
- " -14n + 1 ", [-14, 1],
131
- "+ 2n + 1 ", null,
132
- "- 14N + 1 ", null,
133
- "3.1n + 1", null,
134
- "3 N + 1", null,
135
-
136
- " n + 1", [1, 1],
137
- " +n + 1", [1, 1],
138
- " -N + 1", [-1, 1],
139
- "+ N + 1", null,
140
- "- N + 1", null,
141
-
142
- "3N - 1", [3, -1],
143
- "+2n - 1 ", [2, -1],
144
- " -14n - 1 ", [-14, -1],
145
- "+ 2N - 1 ", null,
146
- "- 14N - 1 ", null,
147
- "3.1N - 1", null,
148
- "3 n - 1", null,
149
-
150
- " N - 1", [1, -1],
151
- " +n - 1", [1, -1],
152
- " -n - 1", [-1, -1],
153
- "+ N - 1", null,
154
- "- N - 1", null
155
-
156
- ]
@@ -1,8 +0,0 @@
1
- Written in 2013 by Simon Sapin.
2
-
3
- To the extent possible under law, the author(s) have dedicated all copyright
4
- and related and neighboring rights to this work to the public domain worldwide.
5
- This work is distributed without any warranty.
6
-
7
- See the CC0 Public Domain Dedication:
8
- http://creativecommons.org/publicdomain/zero/1.0/