rex 0.0.4 → 1.0.2

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 (66) hide show
  1. data/CHANGELOG.rdoc +7 -0
  2. data/DOCUMENTATION.en.rdoc +215 -0
  3. data/DOCUMENTATION.ja.rdoc +205 -0
  4. data/Manifest.txt +37 -0
  5. data/README.ja +73 -0
  6. data/README.rdoc +53 -0
  7. data/Rakefile +28 -0
  8. data/bin/rex +18 -0
  9. data/lib/rex.rb +3 -23
  10. data/lib/rex/generator.rb +523 -0
  11. data/lib/rex/info.rb +16 -0
  12. data/lib/rex/rexcmd.rb +136 -0
  13. data/sample/a.cmd +1 -0
  14. data/sample/b.cmd +1 -0
  15. data/sample/c.cmd +4 -0
  16. data/sample/calc3.racc +47 -0
  17. data/sample/calc3.rex +15 -0
  18. data/sample/calc3.rex.rb +94 -0
  19. data/sample/calc3.tab.rb +188 -0
  20. data/sample/error1.rex +15 -0
  21. data/sample/error2.rex +15 -0
  22. data/sample/sample.html +32 -0
  23. data/sample/sample.rex +15 -0
  24. data/sample/sample.rex.rb +100 -0
  25. data/sample/sample.xhtml +32 -0
  26. data/sample/sample1.c +9 -0
  27. data/sample/sample1.rex +43 -0
  28. data/sample/sample2.bas +4 -0
  29. data/sample/sample2.rex +33 -0
  30. data/sample/simple.html +7 -0
  31. data/sample/simple.xhtml +10 -0
  32. data/sample/xhtmlparser.racc +66 -0
  33. data/sample/xhtmlparser.rex +72 -0
  34. data/test/assets/test.rex +12 -0
  35. data/test/rex-20060125.rb +152 -0
  36. data/test/rex-20060511.rb +143 -0
  37. data/test/test_generator.rb +184 -0
  38. metadata +74 -57
  39. data/README +0 -50
  40. data/lib/rex/array.rb +0 -13
  41. data/lib/rex/kernel.rb +0 -11
  42. data/lib/rex/modules/boolean.rb +0 -14
  43. data/lib/rex/modules/caller_name.rb +0 -15
  44. data/lib/rex/modules/ordinal.rb +0 -35
  45. data/lib/rex/modules/propercase.rb +0 -15
  46. data/lib/rex/modules/roman.rb +0 -41
  47. data/lib/rex/modules/scrub.rb +0 -66
  48. data/lib/rex/modules/stacktrace.rb +0 -31
  49. data/lib/rex/modules/swap.rb +0 -13
  50. data/lib/rex/modules/to_proc.rb +0 -13
  51. data/lib/rex/modules/tuple.rb +0 -14
  52. data/lib/rex/modules/wrap.rb +0 -15
  53. data/lib/rex/numeric.rb +0 -19
  54. data/lib/rex/string.rb +0 -21
  55. data/lib/rex/symbol.rb +0 -13
  56. data/test/boolean.rb +0 -64
  57. data/test/caller_name.rb +0 -26
  58. data/test/ordinal.rb +0 -609
  59. data/test/propercase.rb +0 -40
  60. data/test/roman.rb +0 -335
  61. data/test/scrub.rb +0 -27
  62. data/test/stacktrace.rb +0 -24
  63. data/test/swap.rb +0 -44
  64. data/test/to_proc.rb +0 -24
  65. data/test/tuple.rb +0 -26
  66. data/test/wrap.rb +0 -44
metadata CHANGED
@@ -1,62 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Ramsey Dow
7
+ - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-02-26 00:00:00 -08:00
12
+ date: 2009-06-05 00:00:00 -07:00
13
13
  default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: yesmar @nospam@ speakeasy.net
18
- executables: []
19
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.12.2
24
+ version:
25
+ description: |-
26
+ Rex is a lexical scanner generator.
27
+ It is written in Ruby itself, and generates Ruby program.
28
+ It is designed for use with Racc.
29
+ email:
30
+ - aaronp@rubyforge.org
31
+ executables:
32
+ - rex
20
33
  extensions: []
21
34
 
22
35
  extra_rdoc_files:
23
- - README
36
+ - Manifest.txt
37
+ - CHANGELOG.rdoc
38
+ - DOCUMENTATION.en.rdoc
39
+ - DOCUMENTATION.ja.rdoc
40
+ - README.rdoc
24
41
  files:
42
+ - CHANGELOG.rdoc
43
+ - DOCUMENTATION.en.rdoc
44
+ - DOCUMENTATION.ja.rdoc
45
+ - Manifest.txt
46
+ - README.ja
47
+ - README.rdoc
48
+ - Rakefile
49
+ - bin/rex
25
50
  - lib/rex.rb
26
- - lib/rex/array.rb
27
- - lib/rex/kernel.rb
28
- - lib/rex/numeric.rb
29
- - lib/rex/string.rb
30
- - lib/rex/symbol.rb
31
- - lib/rex/modules/boolean.rb
32
- - lib/rex/modules/caller_name.rb
33
- - lib/rex/modules/ordinal.rb
34
- - lib/rex/modules/propercase.rb
35
- - lib/rex/modules/roman.rb
36
- - lib/rex/modules/scrub.rb
37
- - lib/rex/modules/stacktrace.rb
38
- - lib/rex/modules/swap.rb
39
- - lib/rex/modules/to_proc.rb
40
- - lib/rex/modules/tuple.rb
41
- - lib/rex/modules/wrap.rb
42
- - test/boolean.rb
43
- - test/caller_name.rb
44
- - test/data
45
- - test/ordinal.rb
46
- - test/propercase.rb
47
- - test/roman.rb
48
- - test/scrub.rb
49
- - test/stacktrace.rb
50
- - test/swap.rb
51
- - test/to_proc.rb
52
- - test/tuple.rb
53
- - test/wrap.rb
54
- - README
51
+ - lib/rex/generator.rb
52
+ - lib/rex/info.rb
53
+ - lib/rex/rexcmd.rb
54
+ - sample/a.cmd
55
+ - sample/b.cmd
56
+ - sample/c.cmd
57
+ - sample/calc3.racc
58
+ - sample/calc3.rex
59
+ - sample/calc3.rex.rb
60
+ - sample/calc3.tab.rb
61
+ - sample/error1.rex
62
+ - sample/error2.rex
63
+ - sample/sample.html
64
+ - sample/sample.rex
65
+ - sample/sample.rex.rb
66
+ - sample/sample.xhtml
67
+ - sample/sample1.c
68
+ - sample/sample1.rex
69
+ - sample/sample2.bas
70
+ - sample/sample2.rex
71
+ - sample/simple.html
72
+ - sample/simple.xhtml
73
+ - sample/xhtmlparser.racc
74
+ - sample/xhtmlparser.rex
75
+ - test/assets/test.rex
76
+ - test/rex-20060125.rb
77
+ - test/rex-20060511.rb
78
+ - test/test_generator.rb
55
79
  has_rdoc: true
56
- homepage: http://rexgem.rubyforge.org/
57
- post_install_message:
58
- rdoc_options: []
80
+ homepage: http://rex.rubyforge.org
81
+ licenses: []
59
82
 
83
+ post_install_message:
84
+ rdoc_options:
85
+ - --main
86
+ - README.rdoc
60
87
  require_paths:
61
88
  - lib
62
89
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -73,20 +100,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
100
  version:
74
101
  requirements: []
75
102
 
76
- rubyforge_project: http://rubyforge.org/projects/rexgem/
77
- rubygems_version: 1.0.1
103
+ rubyforge_project: ruby-rex
104
+ rubygems_version: 1.3.3
78
105
  signing_key:
79
- specification_version: 2
80
- summary: Ruby Extension Library
106
+ specification_version: 3
107
+ summary: Rex is a lexical scanner generator
81
108
  test_files:
82
- - test/boolean.rb
83
- - test/caller_name.rb
84
- - test/ordinal.rb
85
- - test/propercase.rb
86
- - test/roman.rb
87
- - test/scrub.rb
88
- - test/stacktrace.rb
89
- - test/swap.rb
90
- - test/to_proc.rb
91
- - test/tuple.rb
92
- - test/wrap.rb
109
+ - test/test_generator.rb
data/README DELETED
@@ -1,50 +0,0 @@
1
- == What
2
- Ruby Extension Library version 0.0.4
3
-
4
- This is a collection of Ruby class monkeypatches. Some of these are by me and
5
- some have been swiped from other places. I have no shame.
6
-
7
- == How
8
- require 'rubygems'
9
- require 'rex'
10
-
11
- Stuff you get:
12
- Array#swap!(a, b)
13
- File#random_line(separator="#{$/}", seed=nil)
14
- Integer#to_ordinal
15
- Integer#from_ordinal(ordinal)
16
- Integer#to_roman
17
- Integer#from_roman(roman)
18
- Kernel#boolean?
19
- Kernel#caller_name
20
- Kernel#stack_trace(msg=nil)
21
- Kernel#Tuple(*ary)
22
- String#propercase
23
- String#scrub!(allowed=BASIC_MARKUP)
24
- String#wrap(columns=78)
25
- Symbol#to_proc
26
-
27
- You can run the example programs in the examples directory to see what the
28
- above methods do. You can run the example programs from anywhere, e.g.:
29
-
30
- ruby ~/src/projects/rex/examples/stacktrace.rb
31
-
32
- == Install
33
- To construct a Ruby gem, just type:
34
-
35
- rake gem
36
-
37
- To install it, type:
38
-
39
- sudo gem install pkg/rex-0.0.4.gem
40
-
41
- == Notes
42
- I haven't tested this code with YARV, so YMMV.
43
-
44
- Symbol#to_proc comes from the blog post:
45
- http://weblog.raganwald.com/2008/02/1100inject.html
46
-
47
- == Contribute
48
- The source is availble at github: git://github.com/yesmar/rex.git. Feel free
49
- to clone it and implement your own awesome ideas. You can also send your
50
- patches by email to yesmar[at]speakeasy[dot]net.
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # array.rb
4
- # yesmar@speakeasy.net
5
-
6
- require 'modules/swap'
7
-
8
- class Array
9
- # Array#swap!(a, b)
10
- include Swap
11
- end
12
-
13
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # kernel.rb
4
- # yesmar@speakeasy.net
5
-
6
- require 'modules/boolean'
7
- require 'modules/caller_name'
8
- require 'modules/stacktrace'
9
- require 'modules/tuple'
10
-
11
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # boolean.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Kernel
7
- def boolean?
8
- raise ArgumentError, 'nil self' if self.nil?
9
-
10
- self.class == TrueClass || self.class == FalseClass
11
- end
12
- end
13
-
14
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # caller_name.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Kernel
7
- def caller_name
8
- k = caller[0].split(%r{:[\d]*:in})
9
- return k[0] if !k.nil? && !k.empty?
10
-
11
- nil
12
- end
13
- end
14
-
15
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # ordinal.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Ordinal
7
- # convert number to ordinal
8
- def to_ordinal
9
- cardinal = self.to_i.abs
10
- if (10...20).include?(cardinal) then
11
- cardinal.to_s << 'th'
12
- else
13
- cardinal.to_s << %w{th st nd rd th th th th th th}[cardinal % 10]
14
- end
15
- end
16
-
17
- # convert ordinal to number
18
- def Integer.from_ordinal(ordinal)
19
- raise ArgumentError, 'nil ordinal' if ordinal.nil?
20
- raise ArgumentError, 'invalid ordinal class' if ordinal.class != String
21
- raise ArgumentError, 'empty ordinal' if ordinal.empty?
22
- raise ArgumentError, 'not an ordinal' if ordinal.length < 3
23
-
24
- suffix = ordinal[-2,2]
25
- if suffix == 'st' || suffix == 'nd' || suffix == 'rd' || suffix == 'th'
26
- value = ordinal[0,ordinal.length-2]
27
- else
28
- raise 'not an ordinal'
29
- end
30
-
31
- value.to_i
32
- end
33
- end
34
-
35
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # propercase.rb
4
- # yesmar@speakeasy.net
5
-
6
- module ProperCase
7
- # convert string to Proper Case
8
- def propercase
9
- ary = self.split(' ')
10
- ary.each { |e| e.capitalize! }
11
- ary.join(' ')
12
- end
13
- end
14
-
15
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # roman.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Roman
7
- ROMAN_NUMERALS = [ ['M', 1000], ['CM', 900], ['D', 500],
8
- ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40],
9
- ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1] ]
10
-
11
- # convert Integer to Roman numeral
12
- def to_roman
13
- remainder = self
14
- roman = ''
15
- for sym,sum in ROMAN_NUMERALS
16
- while remainder >= sum
17
- remainder -= sum
18
- roman << sym
19
- end
20
- end
21
-
22
- roman
23
- end
24
-
25
- # convert Roman numeral to Integer
26
- def Integer.from_roman(roman)
27
- str = roman.upcase
28
- sum = 0
29
- for entry in ROMAN_NUMERALS
30
- sym,num = entry[0], entry[1]
31
- while sym == str[0, sym.length]
32
- sum += num
33
- str.slice!(0, sym.length)
34
- end
35
- end
36
-
37
- sum
38
- end
39
- end
40
-
41
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,66 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # scrub.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Scrub
7
- # dictionary of allowable HTML tags and attributes
8
- BASIC_MARKUP = {
9
- 'a' => ['href', 'title'],
10
- 'img' => ['src', 'alt', 'title'],
11
- 'br' => [],
12
- 'i' => nil,
13
- 'u' => nil,
14
- 'b' => nil,
15
- 'pre' => nil,
16
- 'kbd' => nil,
17
- 'code' => ['lang'],
18
- 'cite' => nil,
19
- 'strong' => nil,
20
- 'em' => nil,
21
- 'ins' => nil,
22
- 'sup' => nil,
23
- 'del' => nil,
24
- 'table' => nil,
25
- 'tr' => nil,
26
- 'td' => nil,
27
- 'th' => nil,
28
- 'ol' => nil,
29
- 'ul' => nil,
30
- 'li' => nil,
31
- 'p' => nil,
32
- 'h1' => nil,
33
- 'h2' => nil,
34
- 'h3' => nil,
35
- 'h4' => nil,
36
- 'h5' => nil,
37
- 'h6' => nil,
38
- 'blockquote' => ['cite']
39
- }
40
-
41
- # TODO: add option to replace scrubbed text with a user-defined tag
42
- def scrub!(allowed=BASIC_MARKUP)
43
- gsub!(/<(\/*)(\w+)([^>]*)>/) do
44
- raw = $~
45
- tag = raw[2].downcase
46
- if allowed.has_key? tag
47
- pcs = [tag]
48
- allowed[tag].each do |prop|
49
- ['"', "'", ''].each do |q|
50
- q2 = (q != '' ? q : '\s')
51
- if raw[3] =~ /#{prop}\s*=\s*#{q}([^#{q2}]+)#{q}/i
52
- pcs << "#{prop}=\"#{$1.gsub('"', '\\"')}\""
53
- break
54
- end
55
- end
56
- end if allowed[tag]
57
- "<#{raw[1]}#{pcs.join ' '}>"
58
- else
59
- ''
60
- end
61
- end
62
- end
63
-
64
- end
65
-
66
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # stacktrace.rb
4
- # yesmar@speakeasy.net
5
-
6
- module Kernel
7
- SPONSOR = 'yesmar'
8
-
9
- def stacktrace(msg=nil)
10
- raise ArgumentError, 'invalid msg class' if msg.class != String if !msg.nil?
11
-
12
- program = File.basename(caller_name) || 'unknown'
13
- st = []
14
-
15
- st << "#{msg} " if !msg.nil? && !msg.empty?
16
- st << 'Stack Trace:'
17
-
18
- i = 1
19
- caller.each do |c|
20
- st << " #{c}"
21
- i += 1
22
- if i == caller.size-1
23
- st << " #{program}:this stack trace is brought to you by #{SPONSOR}"
24
- end
25
- end
26
-
27
- st
28
- end
29
- end
30
-
31
- raise RuntimeError, 'This library is for require only' if $0 == __FILE__