sdl4r 0.9.2 → 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +79 -6
- data/Rakefile +15 -2
- data/TODO.txt +37 -6
- data/doc/created.rid +1 -1
- data/doc/fr_class_index.html +0 -4
- data/doc/fr_method_index.html +78 -111
- data/lib/sdl4r/parser.rb +32 -20
- data/lib/sdl4r/parser/reader.rb +3 -1
- data/lib/sdl4r/parser/time_span_with_zone.rb +3 -1
- data/lib/sdl4r/parser/token.rb +3 -1
- data/lib/sdl4r/parser/tokenizer.rb +3 -1
- data/lib/sdl4r/sdl.rb +41 -18
- data/lib/sdl4r/sdl_binary.rb +4 -4
- data/lib/sdl4r/sdl_parse_error.rb +4 -2
- data/lib/sdl4r/sdl_time_span.rb +18 -50
- data/lib/sdl4r/tag.rb +246 -356
- data/test/sdl4r/parser_test.rb +2 -0
- data/test/sdl4r/{test.rb → sdl4r_test.rb} +9 -7
- data/test/sdl4r/tag_test.rb +487 -0
- metadata +48 -49
data/README
CHANGED
@@ -1,4 +1,38 @@
|
|
1
|
-
|
1
|
+
= SDL (Simple Declarative Language)
|
2
|
+
|
3
|
+
== Getting Started with SDL4R
|
4
|
+
|
5
|
+
To get the Ruby Gem:
|
6
|
+
|
7
|
+
gem install sdl4r
|
8
|
+
|
9
|
+
Then, you can start reading SDL documents:
|
10
|
+
|
11
|
+
require 'pathname'
|
12
|
+
require 'sdl4r'
|
13
|
+
|
14
|
+
root = SDL4R::read(Pathname.new("my_directory/my_config.sdl"))
|
15
|
+
puts root.attribute("port")
|
16
|
+
|
17
|
+
Or you can create SDL documents with the API:
|
18
|
+
|
19
|
+
require 'fileutils'
|
20
|
+
require 'sdl4r'
|
21
|
+
|
22
|
+
root = SDL4R::Tag.new("root") do
|
23
|
+
new_child("server") do
|
24
|
+
set_attribute("port", 1234)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
File.open("my_directory/my_config.sdl", "w") { |io|
|
28
|
+
io.write(root.children_to_string)
|
29
|
+
}
|
30
|
+
|
31
|
+
which will write the following in your file:
|
32
|
+
|
33
|
+
server port=1234
|
34
|
+
|
35
|
+
== SDL Documents
|
2
36
|
|
3
37
|
SDL documents are made up of Tags. A Tag contains
|
4
38
|
|
@@ -50,6 +84,12 @@ optional. SDL identifiers begin with a unicode letter or an underscore (_)
|
|
50
84
|
followed by zero or more unicode letters, numbers, underscores (_),
|
51
85
|
dashes (-) and periods (.).
|
52
86
|
|
87
|
+
Tags without bodies are terminated by a new line character (\n) and may be
|
88
|
+
continue onto the next line by placing a backslash (\) at the end of the
|
89
|
+
line. Tags may be nested to an arbitrary depth. SDL ignores all other white
|
90
|
+
space characters between tokens. Although nested blocks are indented by
|
91
|
+
convention, tabs have no significance in the language.
|
92
|
+
|
53
93
|
== Anonymous Tags
|
54
94
|
|
55
95
|
SDL also supports anonymous tags which are assigned the name "content".
|
@@ -57,11 +97,13 @@ An anonymous tag starts with a literal and is followed by zero or more
|
|
57
97
|
additional literals and zero or more attributes. The examples section below
|
58
98
|
demonstrates the use of anonymous tags.
|
59
99
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
100
|
+
greetings {
|
101
|
+
"hello" language="English"
|
102
|
+
}
|
103
|
+
|
104
|
+
# If we have a handle on the "greetings" tag we can access the
|
105
|
+
# anonymous child tag by calling
|
106
|
+
# Tag child1 = greetingTag.getChild("content");
|
65
107
|
|
66
108
|
== String literals
|
67
109
|
|
@@ -296,3 +338,34 @@ null:: nil (NilClass)
|
|
296
338
|
|
297
339
|
TO FIX: the handling of floating numbers in Ruby being different from the Java world, the behavior
|
298
340
|
of SDL4R at limits might not be perfect for the time being.
|
341
|
+
|
342
|
+
== UTF-8 Support
|
343
|
+
|
344
|
+
In Ruby 1.8, in order to enable UTF-8 support, you may have to declare the following lines:
|
345
|
+
|
346
|
+
$KCODE = 'u'
|
347
|
+
require 'jcode'
|
348
|
+
|
349
|
+
This will give you correct input and output and correct UTF-8 "general" sorting.
|
350
|
+
Alternatively you can use the following options when launching the Ruby interpreter:
|
351
|
+
|
352
|
+
/path/to/ruby -Ku -rjcode
|
353
|
+
|
354
|
+
|
355
|
+
== License
|
356
|
+
|
357
|
+
Simple Declarative Language (SDL) for Ruby
|
358
|
+
|
359
|
+
Copyright 2005 Ikayzo, inc.
|
360
|
+
|
361
|
+
This program is free software. You can distribute or modify it under the
|
362
|
+
terms of the GNU Lesser General Public License version 2.1 as published by
|
363
|
+
the Free Software Foundation.
|
364
|
+
|
365
|
+
This program is distributed AS IS and WITHOUT WARRANTY. OF ANY KIND,
|
366
|
+
INCLUDING MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
367
|
+
See the GNU Lesser General Public License for more details.
|
368
|
+
|
369
|
+
You should have received a copy of the GNU Lesser General Public License
|
370
|
+
along with this program; if not, contact the Free Software Foundation, Inc.,
|
371
|
+
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
data/Rakefile
CHANGED
@@ -3,16 +3,17 @@ require 'rake/clean'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
require 'rake/rdoctask'
|
5
5
|
require 'rake/gempackagetask'
|
6
|
+
require 'rake/packagetask'
|
6
7
|
require 'rubygems'
|
7
8
|
|
8
9
|
spec = Gem::Specification.new do |s|
|
9
10
|
s.platform = Gem::Platform::RUBY
|
10
11
|
s.summary = "Simple Declarative Language for Ruby library"
|
11
12
|
s.name = 'sdl4r'
|
12
|
-
s.version = '0.9.
|
13
|
+
s.version = '0.9.3'
|
13
14
|
s.requirements << 'none'
|
14
15
|
s.require_path = 'lib'
|
15
|
-
s.authors = ['Philippe Vosges', 'Daniel Leuck'
|
16
|
+
s.authors = ['Philippe Vosges', 'Daniel Leuck']
|
16
17
|
s.email = 'sdl-users@ikayzo.org'
|
17
18
|
s.rubyforge_project = 'sdl4r'
|
18
19
|
s.homepage = 'http://www.ikayzo.org/confluence/display/SDL/Home'
|
@@ -27,6 +28,18 @@ spec = Gem::Specification.new do |s|
|
|
27
28
|
EOF
|
28
29
|
end
|
29
30
|
|
31
|
+
Rake::PackageTask.new(spec.name, spec.version) do |p|
|
32
|
+
p.need_zip = true
|
33
|
+
p.need_tar = false
|
34
|
+
p.need_tar_gz = false
|
35
|
+
p.need_tar_bz2 = false
|
36
|
+
#p.package_files.include("lib/sdl4r/**/*.rb")
|
37
|
+
|
38
|
+
# If "zip" is not available, we try 7-zip.
|
39
|
+
system("zip")
|
40
|
+
p.zip_command = "7z a -tzip" if $?.exitstatus == 127
|
41
|
+
end
|
42
|
+
|
30
43
|
Rake::GemPackageTask.new(spec) do |pkg|
|
31
44
|
pkg.need_zip = true
|
32
45
|
pkg.need_tar = true
|
data/TODO.txt
CHANGED
@@ -62,6 +62,8 @@
|
|
62
62
|
==> Time only works in UTC, which means that the original zone code is lost.
|
63
63
|
==> DateTime doesn't give the zone code but only the offset.
|
64
64
|
[ ] Use TzTime? Use a custom object that knows whether a time zone was specified?
|
65
|
+
==> http://tztime.rubyforge.org/
|
66
|
+
==> along with TzInfo: http://tzinfo.rubyforge.org/
|
65
67
|
[x] BUG: Base64 wrapped lines are 64 chars long and not 72 (traditionnal length)
|
66
68
|
==> Because of a limitation in the regular expressions ==> find another algorithm
|
67
69
|
[x] See whether we can do better for numbers of arbitrary precision (decimals).
|
@@ -72,7 +74,7 @@
|
|
72
74
|
[ ] See how Ruby floats relate to Java floats and doubles.
|
73
75
|
[ ] Add tests for the SDL class
|
74
76
|
[ ] Allow unicode characters in identifiers.
|
75
|
-
[ ] FUTURE: It
|
77
|
+
[ ] FUTURE: It might be useful to allow people to replace the standard types by their own. This
|
76
78
|
could be useful for dates or numbers, for instance.
|
77
79
|
[N] To install a gem in the Netbeans gems repository, it needs to run as an administrator.
|
78
80
|
Otherwise, it fails silently.
|
@@ -96,12 +98,13 @@
|
|
96
98
|
==> This is normal provided that flt was not installed.
|
97
99
|
[ ] Tag.to_string(): break up long lines using the backslash
|
98
100
|
[ ] Tag.hash: the implementation is not very efficient.
|
101
|
+
==> Difficult to make better and simple
|
99
102
|
[x] Implement reading from a URL(?) Other sources idiomatic in Ruby?
|
100
103
|
==> Strings, URIs, Pathnames, IOs
|
101
|
-
[
|
102
|
-
[
|
103
|
-
[
|
104
|
-
[
|
104
|
+
[x] See the XML and YAML APIs to find enhancements.
|
105
|
+
[x] Check the XML functionalities of Tag.
|
106
|
+
[x] Add tests for Tag
|
107
|
+
[x] Maybe some methods in the SDL module are not so useful to the general user: make them protected?
|
105
108
|
[ ] FUTURE: xpath, ypath ==> sdlpath(?)
|
106
109
|
[ ] FUTURE: evenemential parsing(?)
|
107
110
|
[x] Move Tokenizer, Reader, etc into the Parser module/class or prefix by Sdl
|
@@ -126,4 +129,32 @@
|
|
126
129
|
==> it's stated explicitely in the test
|
127
130
|
[w] Make it so that each test appears separately in test.rb (if possible)
|
128
131
|
[ ] Have the use of Flt be optional.
|
129
|
-
[ ]
|
132
|
+
[ ] Be sure that there is a way to change the precision of Flt outside of SDL4R
|
133
|
+
[ ] Turn Rationals to Floats in coerc_or_fail()?
|
134
|
+
[ ] BUG: "rake package" tries to archive the contents twice: once with the command that I configure
|
135
|
+
in Rakefime, once with a zip command that can't work on my machine (zip is not installed). Why?
|
136
|
+
At least, the first archive is created and seems correct.
|
137
|
+
[x] Add a "Getting Started" chapter to the README
|
138
|
+
[ ] FUTURE: Would we need a "write" method in SDL4R?
|
139
|
+
[ ] Implement coerce_or_fail: it is right now allowed to add any garbage to the SDL tags
|
140
|
+
[x] Fix the doc of Tag.add_value
|
141
|
+
[ ] Add tests and release a RC or beta version
|
142
|
+
[x] Make the parser components disappear from the RDoc
|
143
|
+
[x] Add tests for Tag attributes
|
144
|
+
[x] Add tests for Tag to_child_hash, etc
|
145
|
+
[x] Add tests for Tag eql?, etc
|
146
|
+
[x] Should we interpret arrays in arrays in Tag.<< as a structure specification?
|
147
|
+
Example: tag << [[1, 2], [3, 4]]
|
148
|
+
could mean adding 2 anonymous "content" tags to "tag" with the corresponding values
|
149
|
+
==> Works fine for matrices
|
150
|
+
[x] Make the methods of Tag that take a block have a better yield doc/completion
|
151
|
+
==> I added :yields: RDoc directives, which doesn't look like it's helping but I guess that's
|
152
|
+
all I can do for now.
|
153
|
+
[x] See if we can not support the right order for the namespaces
|
154
|
+
attribute("a1") # => just the name
|
155
|
+
attribute("ns1", "a1") # => namespace + name (instead of attribute("a1", "ns1") now)
|
156
|
+
[N] Never call a class "Test" => it can easily conflict with the "Test" module of Test::Unit and
|
157
|
+
then, it becomes quite difficult to understand why.
|
158
|
+
[x] Add tests for to_xml_string
|
159
|
+
[x] Be stricter and more explicit with Tag and attributes name/namespace
|
160
|
+
[x] Fix set_attributes: it was correct before.
|
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Thu, 05 Aug 2010 13:24:04 +0900
|
data/doc/fr_class_index.html
CHANGED
@@ -22,10 +22,6 @@
|
|
22
22
|
<div id="index-entries">
|
23
23
|
<a href="classes/SDL4R.html">SDL4R</a><br />
|
24
24
|
<a href="classes/SDL4R/Parser.html">SDL4R::Parser</a><br />
|
25
|
-
<a href="classes/SDL4R/Parser/Reader.html">SDL4R::Parser::Reader</a><br />
|
26
|
-
<a href="classes/SDL4R/Parser/TimeSpanWithZone.html">SDL4R::Parser::TimeSpanWithZone</a><br />
|
27
|
-
<a href="classes/SDL4R/Parser/Token.html">SDL4R::Parser::Token</a><br />
|
28
|
-
<a href="classes/SDL4R/Parser/Tokenizer.html">SDL4R::Parser::Tokenizer</a><br />
|
29
25
|
<a href="classes/SDL4R/SdlBinary.html">SDL4R::SdlBinary</a><br />
|
30
26
|
<a href="classes/SDL4R/SdlParseError.html">SDL4R::SdlParseError</a><br />
|
31
27
|
<a href="classes/SDL4R/SdlTimeSpan.html">SDL4R::SdlTimeSpan</a><br />
|
data/doc/fr_method_index.html
CHANGED
@@ -20,121 +20,88 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/SDL4R/Tag.html#
|
24
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
25
|
-
<a href="classes/SDL4R/
|
26
|
-
<a href="classes/SDL4R/SdlBinary.html#
|
27
|
-
<a href="classes/SDL4R/
|
23
|
+
<a href="classes/SDL4R/Tag.html#M000035"><< (SDL4R::Tag)</a><br />
|
24
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000029"><=> (SDL4R::SdlTimeSpan)</a><br />
|
25
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000028">== (SDL4R::SdlTimeSpan)</a><br />
|
26
|
+
<a href="classes/SDL4R/SdlBinary.html#M000078">== (SDL4R::SdlBinary)</a><br />
|
27
|
+
<a href="classes/SDL4R/Tag.html#M000071">== (SDL4R::Tag)</a><br />
|
28
28
|
<a href="classes/SDL4R.html#M000008">SdlBinary (SDL4R)</a><br />
|
29
|
-
<a href="classes/SDL4R/Tag.html#
|
30
|
-
<a href="classes/SDL4R/Tag.html#
|
31
|
-
<a href="classes/SDL4R/Tag.html#
|
32
|
-
<a href="classes/SDL4R/Tag.html#
|
33
|
-
<a href="classes/SDL4R/Tag.html#
|
34
|
-
<a href="classes/SDL4R/Tag.html#
|
35
|
-
<a href="classes/SDL4R/Tag.html#
|
36
|
-
<a href="classes/SDL4R/Tag.html#
|
37
|
-
<a href="classes/SDL4R/Tag.html#
|
38
|
-
<a href="classes/SDL4R/Tag.html#
|
39
|
-
<a href="classes/SDL4R/Tag.html#
|
40
|
-
<a href="classes/SDL4R/Tag.html#
|
41
|
-
<a href="classes/SDL4R/Tag.html#
|
42
|
-
<a href="classes/SDL4R
|
43
|
-
<a href="classes/SDL4R/
|
44
|
-
<a href="classes/SDL4R.html#
|
45
|
-
<a href="classes/SDL4R/
|
46
|
-
<a href="classes/SDL4R/
|
47
|
-
<a href="classes/SDL4R/
|
48
|
-
<a href="classes/SDL4R
|
49
|
-
<a href="classes/SDL4R/
|
50
|
-
<a href="classes/SDL4R/
|
51
|
-
<a href="classes/SDL4R/
|
52
|
-
<a href="classes/SDL4R/
|
53
|
-
<a href="classes/SDL4R/
|
54
|
-
<a href="classes/SDL4R/
|
55
|
-
<a href="classes/SDL4R/
|
56
|
-
<a href="classes/SDL4R.html#
|
57
|
-
<a href="classes/SDL4R/
|
58
|
-
<a href="classes/SDL4R/
|
59
|
-
<a href="classes/SDL4R/Tag.html#
|
60
|
-
<a href="classes/SDL4R/Tag.html#
|
61
|
-
<a href="classes/SDL4R/
|
62
|
-
<a href="classes/SDL4R/Tag.html#
|
63
|
-
<a href="classes/SDL4R/
|
64
|
-
<a href="classes/SDL4R/
|
65
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
66
|
-
<a href="classes/SDL4R/
|
67
|
-
<a href="classes/SDL4R/
|
68
|
-
<a href="classes/SDL4R/Parser
|
69
|
-
<a href="classes/SDL4R/Parser
|
70
|
-
<a href="classes/SDL4R
|
71
|
-
<a href="classes/SDL4R/
|
72
|
-
<a href="classes/SDL4R/
|
73
|
-
<a href="classes/SDL4R/Tag.html#
|
74
|
-
<a href="classes/SDL4R/Tag.html#
|
75
|
-
<a href="classes/SDL4R/
|
76
|
-
<a href="classes/SDL4R/
|
77
|
-
<a href="classes/SDL4R/
|
78
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
79
|
-
<a href="classes/SDL4R/
|
80
|
-
<a href="classes/SDL4R/
|
81
|
-
<a href="classes/SDL4R/
|
82
|
-
<a href="classes/SDL4R/
|
83
|
-
<a href="classes/SDL4R/
|
84
|
-
<a href="classes/SDL4R/
|
85
|
-
<a href="classes/SDL4R/Tag.html#M000046">new_child (SDL4R::Tag)</a><br />
|
86
|
-
<a href="classes/SDL4R/Parser/Token.html#M000023">object_for_literal (SDL4R::Parser::Token)</a><br />
|
87
|
-
<a href="classes/SDL4R/Parser.html#M000010">parse (SDL4R::Parser)</a><br />
|
88
|
-
<a href="classes/SDL4R/Parser/Tokenizer.html#M000015">parse_error (SDL4R::Parser::Tokenizer)</a><br />
|
89
|
-
<a href="classes/SDL4R/Parser/Token.html#M000025">parse_time_span_with_zone (SDL4R::Parser::Token)</a><br />
|
90
|
-
<a href="classes/SDL4R/Parser/Tokenizer.html#M000019">pos (SDL4R::Parser::Tokenizer)</a><br />
|
91
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000039">previous_char (SDL4R::Parser::Reader)</a><br />
|
92
|
-
<a href="classes/SDL4R/Tag.html#M000077">read (SDL4R::Tag)</a><br />
|
93
|
-
<a href="classes/SDL4R.html#M000001">read (SDL4R)</a><br />
|
94
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000038">read_char (SDL4R::Parser::Reader)</a><br />
|
95
|
-
<a href="classes/SDL4R/Tag.html#M000078">read_from_io (SDL4R::Tag)</a><br />
|
96
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000028">read_line (SDL4R::Parser::Reader)</a><br />
|
97
|
-
<a href="classes/SDL4R/Parser/Tokenizer.html#M000017">read_line_tokens (SDL4R::Parser::Tokenizer)</a><br />
|
98
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000043">read_raw_line (SDL4R::Parser::Reader)</a><br />
|
99
|
-
<a href="classes/SDL4R/Tag.html#M000071">remove_attribute (SDL4R::Tag)</a><br />
|
100
|
-
<a href="classes/SDL4R/Tag.html#M000049">remove_child (SDL4R::Tag)</a><br />
|
101
|
-
<a href="classes/SDL4R/Tag.html#M000063">remove_value (SDL4R::Tag)</a><br />
|
102
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000029">rest_of_line (SDL4R::Parser::Reader)</a><br />
|
103
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000106">roll_days (SDL4R::SdlTimeSpan)</a><br />
|
104
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000107">roll_hours (SDL4R::SdlTimeSpan)</a><br />
|
105
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000110">roll_milliseconds (SDL4R::SdlTimeSpan)</a><br />
|
106
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000108">roll_minutes (SDL4R::SdlTimeSpan)</a><br />
|
107
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000109">roll_seconds (SDL4R::SdlTimeSpan)</a><br />
|
108
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000099">seconds (SDL4R::SdlTimeSpan)</a><br />
|
109
|
-
<a href="classes/SDL4R/Tag.html#M000067">set_attribute (SDL4R::Tag)</a><br />
|
110
|
-
<a href="classes/SDL4R/Tag.html#M000073">set_attributes (SDL4R::Tag)</a><br />
|
111
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#M000095">sign (SDL4R::SdlTimeSpan)</a><br />
|
112
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000037">skip_char (SDL4R::Parser::Reader)</a><br />
|
113
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000033">skip_line (SDL4R::Parser::Reader)</a><br />
|
114
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000041">skip_to (SDL4R::Parser::Reader)</a><br />
|
115
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000034">skip_whitespaces (SDL4R::Parser::Reader)</a><br />
|
116
|
-
<a href="classes/SDL4R/Parser/Reader.html#M000042">substring (SDL4R::Parser::Reader)</a><br />
|
29
|
+
<a href="classes/SDL4R/Tag.html#M000034">add_child (SDL4R::Tag)</a><br />
|
30
|
+
<a href="classes/SDL4R/Tag.html#M000048">add_value (SDL4R::Tag)</a><br />
|
31
|
+
<a href="classes/SDL4R/Tag.html#M000055">attribute (SDL4R::Tag)</a><br />
|
32
|
+
<a href="classes/SDL4R/Tag.html#M000057">attributes (SDL4R::Tag)</a><br />
|
33
|
+
<a href="classes/SDL4R/Tag.html#M000061">attributes= (SDL4R::Tag)</a><br />
|
34
|
+
<a href="classes/SDL4R/Tag.html#M000043">child (SDL4R::Tag)</a><br />
|
35
|
+
<a href="classes/SDL4R/Tag.html#M000040">child_count (SDL4R::Tag)</a><br />
|
36
|
+
<a href="classes/SDL4R/Tag.html#M000041">children (SDL4R::Tag)</a><br />
|
37
|
+
<a href="classes/SDL4R/Tag.html#M000069">children_to_string (SDL4R::Tag)</a><br />
|
38
|
+
<a href="classes/SDL4R/Tag.html#M000042">children_values (SDL4R::Tag)</a><br />
|
39
|
+
<a href="classes/SDL4R/Tag.html#M000059">clear_attributes (SDL4R::Tag)</a><br />
|
40
|
+
<a href="classes/SDL4R/Tag.html#M000037">clear_children (SDL4R::Tag)</a><br />
|
41
|
+
<a href="classes/SDL4R/Tag.html#M000051">clear_values (SDL4R::Tag)</a><br />
|
42
|
+
<a href="classes/SDL4R.html#M000002">coerce_or_fail (SDL4R)</a><br />
|
43
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000011">days (SDL4R::SdlTimeSpan)</a><br />
|
44
|
+
<a href="classes/SDL4R/SdlBinary.html#M000082">decode64 (SDL4R::SdlBinary)</a><br />
|
45
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000027">eql? (SDL4R::SdlTimeSpan)</a><br />
|
46
|
+
<a href="classes/SDL4R/SdlBinary.html#M000079">eql? (SDL4R::SdlBinary)</a><br />
|
47
|
+
<a href="classes/SDL4R/Tag.html#M000070">eql? (SDL4R::Tag)</a><br />
|
48
|
+
<a href="classes/SDL4R.html#M000001">format (SDL4R)</a><br />
|
49
|
+
<a href="classes/SDL4R/Tag.html#M000056">has_attribute? (SDL4R::Tag)</a><br />
|
50
|
+
<a href="classes/SDL4R/Tag.html#M000044">has_child? (SDL4R::Tag)</a><br />
|
51
|
+
<a href="classes/SDL4R/Tag.html#M000045">has_children? (SDL4R::Tag)</a><br />
|
52
|
+
<a href="classes/SDL4R/Tag.html#M000049">has_value? (SDL4R::Tag)</a><br />
|
53
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000026">hash (SDL4R::SdlTimeSpan)</a><br />
|
54
|
+
<a href="classes/SDL4R/SdlBinary.html#M000080">hash (SDL4R::SdlBinary)</a><br />
|
55
|
+
<a href="classes/SDL4R/Tag.html#M000072">hash (SDL4R::Tag)</a><br />
|
56
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000012">hours (SDL4R::SdlTimeSpan)</a><br />
|
57
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000015">milliseconds (SDL4R::SdlTimeSpan)</a><br />
|
58
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000013">minutes (SDL4R::SdlTimeSpan)</a><br />
|
59
|
+
<a href="classes/SDL4R/Tag.html#M000062">name= (SDL4R::Tag)</a><br />
|
60
|
+
<a href="classes/SDL4R/Tag.html#M000063">namespace= (SDL4R::Tag)</a><br />
|
61
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000020">negate (SDL4R::SdlTimeSpan)</a><br />
|
62
|
+
<a href="classes/SDL4R/Tag.html#M000032">new (SDL4R::Tag)</a><br />
|
63
|
+
<a href="classes/SDL4R/SdlParseError.html#M000031">new (SDL4R::SdlParseError)</a><br />
|
64
|
+
<a href="classes/SDL4R/Parser.html#M000074">new (SDL4R::Parser)</a><br />
|
65
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000009">new (SDL4R::SdlTimeSpan)</a><br />
|
66
|
+
<a href="classes/SDL4R/SdlBinary.html#M000077">new (SDL4R::SdlBinary)</a><br />
|
67
|
+
<a href="classes/SDL4R/Tag.html#M000033">new_child (SDL4R::Tag)</a><br />
|
68
|
+
<a href="classes/SDL4R/Parser.html#M000076">new_date_time (SDL4R::Parser)</a><br />
|
69
|
+
<a href="classes/SDL4R/Parser.html#M000075">parse (SDL4R::Parser)</a><br />
|
70
|
+
<a href="classes/SDL4R.html#M000004">read (SDL4R)</a><br />
|
71
|
+
<a href="classes/SDL4R/Tag.html#M000064">read (SDL4R::Tag)</a><br />
|
72
|
+
<a href="classes/SDL4R/Tag.html#M000065">read_from_io (SDL4R::Tag)</a><br />
|
73
|
+
<a href="classes/SDL4R/Tag.html#M000058">remove_attribute (SDL4R::Tag)</a><br />
|
74
|
+
<a href="classes/SDL4R/Tag.html#M000036">remove_child (SDL4R::Tag)</a><br />
|
75
|
+
<a href="classes/SDL4R/Tag.html#M000050">remove_value (SDL4R::Tag)</a><br />
|
76
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000021">roll_days (SDL4R::SdlTimeSpan)</a><br />
|
77
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000022">roll_hours (SDL4R::SdlTimeSpan)</a><br />
|
78
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000025">roll_milliseconds (SDL4R::SdlTimeSpan)</a><br />
|
79
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000023">roll_minutes (SDL4R::SdlTimeSpan)</a><br />
|
80
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000024">roll_seconds (SDL4R::SdlTimeSpan)</a><br />
|
81
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000014">seconds (SDL4R::SdlTimeSpan)</a><br />
|
82
|
+
<a href="classes/SDL4R/Tag.html#M000054">set_attribute (SDL4R::Tag)</a><br />
|
83
|
+
<a href="classes/SDL4R/Tag.html#M000060">set_attributes (SDL4R::Tag)</a><br />
|
84
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000010">sign (SDL4R::SdlTimeSpan)</a><br />
|
117
85
|
<a href="classes/SDL4R.html#M000007">to_attribute_map (SDL4R)</a><br />
|
118
|
-
<a href="classes/SDL4R/Tag.html#
|
119
|
-
<a href="classes/SDL4R/Tag.html#
|
120
|
-
<a href="classes/SDL4R/
|
121
|
-
<a href="classes/SDL4R/
|
122
|
-
<a href="classes/SDL4R/SdlBinary.html#
|
123
|
-
<a href="classes/SDL4R/
|
124
|
-
<a href="classes/SDL4R/Tag.html#M000081">to_string (SDL4R::Tag)</a><br />
|
86
|
+
<a href="classes/SDL4R/Tag.html#M000046">to_child_hash (SDL4R::Tag)</a><br />
|
87
|
+
<a href="classes/SDL4R/Tag.html#M000047">to_child_string_hash (SDL4R::Tag)</a><br />
|
88
|
+
<a href="classes/SDL4R/Tag.html#M000067">to_s (SDL4R::Tag)</a><br />
|
89
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000030">to_s (SDL4R::SdlTimeSpan)</a><br />
|
90
|
+
<a href="classes/SDL4R/SdlBinary.html#M000081">to_s (SDL4R::SdlBinary)</a><br />
|
91
|
+
<a href="classes/SDL4R/Tag.html#M000068">to_string (SDL4R::Tag)</a><br />
|
125
92
|
<a href="classes/SDL4R.html#M000005">to_value (SDL4R)</a><br />
|
126
93
|
<a href="classes/SDL4R.html#M000006">to_value_array (SDL4R)</a><br />
|
127
|
-
<a href="classes/SDL4R/Tag.html#
|
128
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
129
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
130
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
131
|
-
<a href="classes/SDL4R/SdlTimeSpan.html#
|
132
|
-
<a href="classes/SDL4R.html#
|
133
|
-
<a href="classes/SDL4R/Tag.html#
|
134
|
-
<a href="classes/SDL4R/Tag.html#
|
135
|
-
<a href="classes/SDL4R/Tag.html#
|
136
|
-
<a href="classes/SDL4R/Tag.html#
|
137
|
-
<a href="classes/SDL4R/Tag.html#
|
94
|
+
<a href="classes/SDL4R/Tag.html#M000073">to_xml_string (SDL4R::Tag)</a><br />
|
95
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000016">total_hours (SDL4R::SdlTimeSpan)</a><br />
|
96
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000019">total_milliseconds (SDL4R::SdlTimeSpan)</a><br />
|
97
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000017">total_minutes (SDL4R::SdlTimeSpan)</a><br />
|
98
|
+
<a href="classes/SDL4R/SdlTimeSpan.html#M000018">total_seconds (SDL4R::SdlTimeSpan)</a><br />
|
99
|
+
<a href="classes/SDL4R.html#M000003">validate_identifier (SDL4R)</a><br />
|
100
|
+
<a href="classes/SDL4R/Tag.html#M000039">value (SDL4R::Tag)</a><br />
|
101
|
+
<a href="classes/SDL4R/Tag.html#M000038">value= (SDL4R::Tag)</a><br />
|
102
|
+
<a href="classes/SDL4R/Tag.html#M000052">values (SDL4R::Tag)</a><br />
|
103
|
+
<a href="classes/SDL4R/Tag.html#M000053">values= (SDL4R::Tag)</a><br />
|
104
|
+
<a href="classes/SDL4R/Tag.html#M000066">write (SDL4R::Tag)</a><br />
|
138
105
|
</div>
|
139
106
|
</div>
|
140
107
|
</body>
|
data/lib/sdl4r/parser.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
#--
|
1
2
|
# Simple Declarative Language (SDL) for Ruby
|
2
3
|
# Copyright 2005 Ikayzo, inc.
|
3
4
|
#
|
4
|
-
# This program is free software. You can distribute or modify it under the
|
5
|
-
# terms of the GNU Lesser General Public License version 2.1 as published by
|
5
|
+
# This program is free software. You can distribute or modify it under the
|
6
|
+
# terms of the GNU Lesser General Public License version 2.1 as published by
|
6
7
|
# the Free Software Foundation.
|
7
8
|
#
|
8
9
|
# This program is distributed AS IS and WITHOUT WARRANTY. OF ANY KIND,
|
@@ -12,6 +13,7 @@
|
|
12
13
|
# You should have received a copy of the GNU Lesser General Public License
|
13
14
|
# along with this program; if not, contact the Free Software Foundation, Inc.,
|
14
15
|
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
16
|
+
#++
|
15
17
|
|
16
18
|
|
17
19
|
module SDL4R
|
@@ -32,8 +34,6 @@ module SDL4R
|
|
32
34
|
|
33
35
|
# The SDL parser.
|
34
36
|
#
|
35
|
-
# Authors: Daniel Leuck, Philippe Vosges
|
36
|
-
#
|
37
37
|
# In Ruby 1.8, in order to enable UTF-8 support, you may have to declare the following lines:
|
38
38
|
#
|
39
39
|
# $KCODE = 'u'
|
@@ -44,6 +44,9 @@ module SDL4R
|
|
44
44
|
#
|
45
45
|
# /path/to/ruby -Ku -rjcode
|
46
46
|
#
|
47
|
+
# == Authors
|
48
|
+
# Daniel Leuck, Philippe Vosges
|
49
|
+
#
|
47
50
|
class Parser
|
48
51
|
|
49
52
|
# Passed to parse_error() in order to specify an error that occured on no specific position
|
@@ -51,6 +54,12 @@ module SDL4R
|
|
51
54
|
UNKNOWN_POSITION = -2
|
52
55
|
|
53
56
|
# Creates an SDL parser on the specified +IO+.
|
57
|
+
#
|
58
|
+
# IO.open("path/to/sdl_file") { |io|
|
59
|
+
# parser = SDL4R::Parser.new(io)
|
60
|
+
# tags = parser.parse()
|
61
|
+
# }
|
62
|
+
#
|
54
63
|
def initialize(io)
|
55
64
|
raise ArgumentError, "io == nil" if io.nil?
|
56
65
|
|
@@ -89,6 +98,17 @@ module SDL4R
|
|
89
98
|
|
90
99
|
return tags
|
91
100
|
end
|
101
|
+
|
102
|
+
# Creates and returns the object representing a datetime (DateTime in the default
|
103
|
+
# implementation). Can be overriden.
|
104
|
+
#
|
105
|
+
# def new_date_time(year, month, day, hour, min, sec, time_zone_offset)
|
106
|
+
# Time.utc(year, month, day, hour, min, sec)
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
def new_date_time(year, month, day, hour, min, sec, time_zone_offset)
|
110
|
+
DateTime.civil(year, month, day, hour, min, sec, time_zone_offset)
|
111
|
+
end
|
92
112
|
|
93
113
|
private
|
94
114
|
|
@@ -151,7 +171,7 @@ module SDL4R
|
|
151
171
|
end
|
152
172
|
|
153
173
|
third_token = tokens[2];
|
154
|
-
tag = Tag.new(
|
174
|
+
tag = Tag.new(first_token.text, third_token.text)
|
155
175
|
values_start_index = 3
|
156
176
|
|
157
177
|
else
|
@@ -312,8 +332,7 @@ module SDL4R
|
|
312
332
|
token.line,
|
313
333
|
token.position)
|
314
334
|
else
|
315
|
-
tag.set_attribute(
|
316
|
-
name, combine(date, time_span_with_zone), name_or_namespace)
|
335
|
+
tag.set_attribute(name_or_namespace, name, combine(date, time_span_with_zone))
|
317
336
|
end
|
318
337
|
|
319
338
|
i += 1
|
@@ -336,9 +355,9 @@ module SDL4R
|
|
336
355
|
time_span_with_zone.min,
|
337
356
|
time_span_with_zone.sec)
|
338
357
|
|
339
|
-
tag.set_attribute(name, time_span
|
358
|
+
tag.set_attribute(name_or_namespace, name, time_span)
|
340
359
|
else
|
341
|
-
tag.set_attribute(name, value
|
360
|
+
tag.set_attribute(name_or_namespace, name, value);
|
342
361
|
end
|
343
362
|
end
|
344
363
|
elsif token.type == :EQUALS
|
@@ -363,8 +382,7 @@ module SDL4R
|
|
363
382
|
token.line,
|
364
383
|
token.position)
|
365
384
|
end
|
366
|
-
tag.set_attribute(
|
367
|
-
name_or_namespace, combine(date, time_span_with_zone))
|
385
|
+
tag.set_attribute(name_or_namespace, combine(date, time_span_with_zone))
|
368
386
|
|
369
387
|
i += 1
|
370
388
|
else
|
@@ -404,7 +422,7 @@ module SDL4R
|
|
404
422
|
time_zone_offset = time_span_with_zone.time_zone_offset
|
405
423
|
time_zone_offset = TimeSpanWithZone.default_time_zone_offset if time_zone_offset.nil?
|
406
424
|
|
407
|
-
|
425
|
+
new_date_time(
|
408
426
|
date.year,
|
409
427
|
date.month,
|
410
428
|
date.day,
|
@@ -559,14 +577,8 @@ module SDL4R
|
|
559
577
|
days, hours, minutes, seconds, time_zone_offset =
|
560
578
|
parse_time_span_and_time_zone(time_part, false, true)
|
561
579
|
|
562
|
-
return
|
563
|
-
date.year,
|
564
|
-
date.month,
|
565
|
-
date.day,
|
566
|
-
hours,
|
567
|
-
minutes,
|
568
|
-
seconds,
|
569
|
-
time_zone_offset)
|
580
|
+
return new_date_time(
|
581
|
+
date.year, date.month, date.day, hours, minutes, seconds, time_zone_offset)
|
570
582
|
end
|
571
583
|
|
572
584
|
rescue ArgumentError
|