pdf-labels 1.0.0
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.
- data/History.txt +8 -0
- data/LICENCE +38 -0
- data/Manifest.txt +141 -0
- data/README.txt +72 -0
- data/Rakefile +30 -0
- data/lib/alias.rb +8 -0
- data/lib/glabel_template.rb +36 -0
- data/lib/label.rb +52 -0
- data/lib/layout.rb +13 -0
- data/lib/length_node.rb +47 -0
- data/lib/markup.rb +25 -0
- data/lib/pdf_label_page.rb +171 -0
- data/lib/pdf_labels.rb +6 -0
- data/lib/template.rb +37 -0
- data/templates/avery-iso-templates.xml +222 -0
- data/templates/avery-other-templates.xml +21 -0
- data/templates/avery-us-templates.xml +599 -0
- data/templates/glabels-2.0.dtd +329 -0
- data/templates/misc-iso-templates.xml +434 -0
- data/templates/misc-other-templates.xml +21 -0
- data/templates/misc-us-templates.xml +183 -0
- data/templates/paper-sizes.xml +37 -0
- data/templates/zweckform-iso-templates.xml +197 -0
- data/test/test_pdf_label_page.rb +91 -0
- data/vendor/color.rb +87 -0
- data/vendor/color/cmyk.rb +182 -0
- data/vendor/color/css.rb +27 -0
- data/vendor/color/grayscale.rb +135 -0
- data/vendor/color/hsl.rb +130 -0
- data/vendor/color/palette.rb +15 -0
- data/vendor/color/palette/gimp.rb +107 -0
- data/vendor/color/palette/monocontrast.rb +180 -0
- data/vendor/color/rgb-colors.rb +189 -0
- data/vendor/color/rgb.rb +311 -0
- data/vendor/color/rgb/metallic.rb +28 -0
- data/vendor/color/yiq.rb +78 -0
- data/vendor/pdf/charts.rb +13 -0
- data/vendor/pdf/charts/stddev.rb +433 -0
- data/vendor/pdf/grid.rb +135 -0
- data/vendor/pdf/math.rb +108 -0
- data/vendor/pdf/pagenumbers.rb +288 -0
- data/vendor/pdf/quickref.rb +331 -0
- data/vendor/pdf/simpletable.rb +947 -0
- data/vendor/pdf/techbook.rb +901 -0
- data/vendor/pdf/writer.rb +2801 -0
- data/vendor/pdf/writer/arc4.rb +63 -0
- data/vendor/pdf/writer/fontmetrics.rb +202 -0
- data/vendor/pdf/writer/fonts/Courier-Bold.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier-Oblique.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier.afm +342 -0
- data/vendor/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
- data/vendor/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/vendor/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
- data/vendor/pdf/writer/fonts/Helvetica.afm +3051 -0
- data/vendor/pdf/writer/fonts/Symbol.afm +213 -0
- data/vendor/pdf/writer/fonts/Times-Bold.afm +2588 -0
- data/vendor/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
- data/vendor/pdf/writer/fonts/Times-Italic.afm +2667 -0
- data/vendor/pdf/writer/fonts/Times-Roman.afm +2419 -0
- data/vendor/pdf/writer/fonts/ZapfDingbats.afm +225 -0
- data/vendor/pdf/writer/graphics.rb +813 -0
- data/vendor/pdf/writer/graphics/imageinfo.rb +365 -0
- data/vendor/pdf/writer/lang.rb +44 -0
- data/vendor/pdf/writer/lang/en.rb +104 -0
- data/vendor/pdf/writer/object.rb +23 -0
- data/vendor/pdf/writer/object/action.rb +40 -0
- data/vendor/pdf/writer/object/annotation.rb +42 -0
- data/vendor/pdf/writer/object/catalog.rb +39 -0
- data/vendor/pdf/writer/object/contents.rb +69 -0
- data/vendor/pdf/writer/object/destination.rb +40 -0
- data/vendor/pdf/writer/object/encryption.rb +53 -0
- data/vendor/pdf/writer/object/font.rb +68 -0
- data/vendor/pdf/writer/object/fontdescriptor.rb +34 -0
- data/vendor/pdf/writer/object/fontencoding.rb +40 -0
- data/vendor/pdf/writer/object/image.rb +308 -0
- data/vendor/pdf/writer/object/info.rb +79 -0
- data/vendor/pdf/writer/object/outline.rb +30 -0
- data/vendor/pdf/writer/object/outlines.rb +30 -0
- data/vendor/pdf/writer/object/page.rb +195 -0
- data/vendor/pdf/writer/object/pages.rb +115 -0
- data/vendor/pdf/writer/object/procset.rb +46 -0
- data/vendor/pdf/writer/object/viewerpreferences.rb +74 -0
- data/vendor/pdf/writer/ohash.rb +58 -0
- data/vendor/pdf/writer/oreader.rb +25 -0
- data/vendor/pdf/writer/state.rb +48 -0
- data/vendor/pdf/writer/strokestyle.rb +140 -0
- data/vendor/transaction/simple.rb +693 -0
- data/vendor/transaction/simple/group.rb +133 -0
- data/vendor/transaction/simple/threadsafe.rb +52 -0
- data/vendor/transaction/simple/threadsafe/group.rb +23 -0
- data/vendor/xml-mapping/ChangeLog +128 -0
- data/vendor/xml-mapping/LICENSE +56 -0
- data/vendor/xml-mapping/README +386 -0
- data/vendor/xml-mapping/README_XPATH +175 -0
- data/vendor/xml-mapping/Rakefile +214 -0
- data/vendor/xml-mapping/TODO.txt +32 -0
- data/vendor/xml-mapping/doc/xpath_impl_notes.txt +119 -0
- data/vendor/xml-mapping/examples/company.rb +34 -0
- data/vendor/xml-mapping/examples/company.xml +26 -0
- data/vendor/xml-mapping/examples/company_usage.intin.rb +19 -0
- data/vendor/xml-mapping/examples/company_usage.intout +39 -0
- data/vendor/xml-mapping/examples/order.rb +61 -0
- data/vendor/xml-mapping/examples/order.xml +54 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced.rb +7 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced.xml +9 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intin.rb +12 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intout +16 -0
- data/vendor/xml-mapping/examples/order_usage.intin.rb +73 -0
- data/vendor/xml-mapping/examples/order_usage.intout +147 -0
- data/vendor/xml-mapping/examples/time_augm.intin.rb +19 -0
- data/vendor/xml-mapping/examples/time_augm.intout +23 -0
- data/vendor/xml-mapping/examples/time_node.rb +27 -0
- data/vendor/xml-mapping/examples/xpath_create_new.intin.rb +85 -0
- data/vendor/xml-mapping/examples/xpath_create_new.intout +181 -0
- data/vendor/xml-mapping/examples/xpath_docvsroot.intin.rb +30 -0
- data/vendor/xml-mapping/examples/xpath_docvsroot.intout +34 -0
- data/vendor/xml-mapping/examples/xpath_ensure_created.intin.rb +62 -0
- data/vendor/xml-mapping/examples/xpath_ensure_created.intout +114 -0
- data/vendor/xml-mapping/examples/xpath_pathological.intin.rb +42 -0
- data/vendor/xml-mapping/examples/xpath_pathological.intout +56 -0
- data/vendor/xml-mapping/examples/xpath_usage.intin.rb +51 -0
- data/vendor/xml-mapping/examples/xpath_usage.intout +57 -0
- data/vendor/xml-mapping/install.rb +40 -0
- data/vendor/xml-mapping/lib/xml/mapping.rb +14 -0
- data/vendor/xml-mapping/lib/xml/mapping/base.rb +571 -0
- data/vendor/xml-mapping/lib/xml/mapping/standard_nodes.rb +343 -0
- data/vendor/xml-mapping/lib/xml/mapping/version.rb +8 -0
- data/vendor/xml-mapping/lib/xml/xxpath.rb +354 -0
- data/vendor/xml-mapping/test/all_tests.rb +6 -0
- data/vendor/xml-mapping/test/company.rb +56 -0
- data/vendor/xml-mapping/test/documents_folders.rb +33 -0
- data/vendor/xml-mapping/test/fixtures/bookmarks1.xml +24 -0
- data/vendor/xml-mapping/test/fixtures/company1.xml +85 -0
- data/vendor/xml-mapping/test/fixtures/documents_folders.xml +71 -0
- data/vendor/xml-mapping/test/fixtures/documents_folders2.xml +30 -0
- data/vendor/xml-mapping/test/multiple_mappings.rb +80 -0
- data/vendor/xml-mapping/test/tests_init.rb +2 -0
- data/vendor/xml-mapping/test/xml_mapping_adv_test.rb +84 -0
- data/vendor/xml-mapping/test/xml_mapping_test.rb +201 -0
- data/vendor/xml-mapping/test/xpath_test.rb +273 -0
- metadata +191 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#:invisible:
|
|
2
|
+
$:.unshift "../lib"
|
|
3
|
+
require 'order' #<=
|
|
4
|
+
#:visible:
|
|
5
|
+
class Time
|
|
6
|
+
include XML::Mapping
|
|
7
|
+
|
|
8
|
+
numeric_node :year, "year"
|
|
9
|
+
numeric_node :month, "month"
|
|
10
|
+
numeric_node :day, "mday"
|
|
11
|
+
numeric_node :hour, "hours"
|
|
12
|
+
numeric_node :min, "minutes"
|
|
13
|
+
numeric_node :sec, "seconds"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
nowxml=Time.now.save_to_xml #<=
|
|
18
|
+
#:invisible_retval:
|
|
19
|
+
nowxml.write($stdout,2)#<=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Time
|
|
2
|
+
include XML::Mapping
|
|
3
|
+
|
|
4
|
+
numeric_node :year, "year"
|
|
5
|
+
numeric_node :month, "month"
|
|
6
|
+
numeric_node :day, "mday"
|
|
7
|
+
numeric_node :hour, "hours"
|
|
8
|
+
numeric_node :min, "minutes"
|
|
9
|
+
numeric_node :sec, "seconds"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
nowxml=Time.now.save_to_xml
|
|
14
|
+
=> <time> ... </>
|
|
15
|
+
nowxml.write($stdout,2)
|
|
16
|
+
<time>
|
|
17
|
+
<year>2005</year>
|
|
18
|
+
<month>12</month>
|
|
19
|
+
<mday>7</mday>
|
|
20
|
+
<hours>20</hours>
|
|
21
|
+
<minutes>52</minutes>
|
|
22
|
+
<seconds>4</seconds>
|
|
23
|
+
</time>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'xml/mapping/base'
|
|
2
|
+
|
|
3
|
+
class TimeNode < XML::Mapping::SingleAttributeNode
|
|
4
|
+
def initialize_impl(path)
|
|
5
|
+
@y_path = XML::XXPath.new(path+"/year")
|
|
6
|
+
@m_path = XML::XXPath.new(path+"/month")
|
|
7
|
+
@d_path = XML::XXPath.new(path+"/day")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def extract_attr_value(xml)
|
|
11
|
+
y,m,d = default_when_xpath_err{ [@y_path.first(xml).text.to_i,
|
|
12
|
+
@m_path.first(xml).text.to_i,
|
|
13
|
+
@d_path.first(xml).text.to_i]
|
|
14
|
+
}
|
|
15
|
+
Time.local(y,m,d)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def set_attr_value(xml, value)
|
|
19
|
+
raise "Not a Time: #{value}" unless Time===value
|
|
20
|
+
@y_path.first(xml,:ensure_created=>true).text = value.year
|
|
21
|
+
@m_path.first(xml,:ensure_created=>true).text = value.month
|
|
22
|
+
@d_path.first(xml,:ensure_created=>true).text = value.day
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
XML::Mapping.add_node_class TimeNode
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#:invisible:
|
|
2
|
+
$:.unshift "../lib" #<=
|
|
3
|
+
#:visible:
|
|
4
|
+
require 'xml/xxpath'
|
|
5
|
+
|
|
6
|
+
d=REXML::Document.new <<EOS
|
|
7
|
+
<foo>
|
|
8
|
+
<bar>
|
|
9
|
+
<baz key="work">Java</baz>
|
|
10
|
+
<baz key="play">Ruby</baz>
|
|
11
|
+
</bar>
|
|
12
|
+
</foo>
|
|
13
|
+
EOS
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
rootelt=d.root
|
|
17
|
+
|
|
18
|
+
#:invisible_retval:
|
|
19
|
+
path1=XML::XXPath.new("/bar/baz[@key='work']")
|
|
20
|
+
|
|
21
|
+
#:visible_retval:
|
|
22
|
+
path1.create_new(rootelt)#<=
|
|
23
|
+
#:invisible_retval:
|
|
24
|
+
d.write($stdout,2)#<=
|
|
25
|
+
### a new element is created for *each* path element, regardless of
|
|
26
|
+
### what existed before. So a new "bar" element was added, with a new
|
|
27
|
+
### "baz" element inside it
|
|
28
|
+
|
|
29
|
+
### same call again...
|
|
30
|
+
#:visible_retval:
|
|
31
|
+
path1.create_new(rootelt)#<=
|
|
32
|
+
#:invisible_retval:
|
|
33
|
+
d.write($stdout,2)#<=
|
|
34
|
+
### same procedure -- new elements added for each path element
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
#:visible_retval:
|
|
38
|
+
## get reference to 1st "baz" element
|
|
39
|
+
firstbazelt=XML::XXPath.new("/bar/baz").first(rootelt)#<=
|
|
40
|
+
|
|
41
|
+
#:invisible_retval:
|
|
42
|
+
path2=XML::XXPath.new("@key2")
|
|
43
|
+
|
|
44
|
+
#:visible_retval:
|
|
45
|
+
path2.create_new(firstbazelt)#<=
|
|
46
|
+
#:invisible_retval:
|
|
47
|
+
d.write($stdout,2)#<=
|
|
48
|
+
### ok, new attribute node added
|
|
49
|
+
|
|
50
|
+
### same call again...
|
|
51
|
+
#:visible_retval:
|
|
52
|
+
#:handle_exceptions:
|
|
53
|
+
path2.create_new(firstbazelt)#<=
|
|
54
|
+
#:no_exceptions:
|
|
55
|
+
### can't create that path anew again -- an element can't have more
|
|
56
|
+
### than one attribute with the same name
|
|
57
|
+
|
|
58
|
+
#:invisible_retval:
|
|
59
|
+
### the document hasn't changed
|
|
60
|
+
d.write($stdout,2)#<=
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### create_new the same path as in the ensure_created example
|
|
65
|
+
#:visible_retval:
|
|
66
|
+
baz6elt=XML::XXPath.new("/bar/baz[6]").create_new(rootelt)#<=
|
|
67
|
+
#:invisible_retval:
|
|
68
|
+
d.write($stdout,2)#<=
|
|
69
|
+
### ok, new "bar" element and 6th "baz" element inside it created
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
#:visible_retval:
|
|
73
|
+
#:handle_exceptions:
|
|
74
|
+
XML::XXPath.new("baz[6]").create_new(baz6elt.parent)#<=
|
|
75
|
+
#:no_exceptions:
|
|
76
|
+
#:invisible_retval:
|
|
77
|
+
### yep, baz[6] already existed and thus couldn't be created once
|
|
78
|
+
### again
|
|
79
|
+
|
|
80
|
+
### but of course...
|
|
81
|
+
#:visible_retval:
|
|
82
|
+
XML::XXPath.new("/bar/baz[6]").create_new(rootelt)#<=
|
|
83
|
+
#:invisible_retval:
|
|
84
|
+
d.write($stdout,2)#<=
|
|
85
|
+
### this works because *all* path elements are newly created
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
require 'xml/xxpath'
|
|
2
|
+
|
|
3
|
+
d=REXML::Document.new <<EOS
|
|
4
|
+
<foo>
|
|
5
|
+
<bar>
|
|
6
|
+
<baz key="work">Java</baz>
|
|
7
|
+
<baz key="play">Ruby</baz>
|
|
8
|
+
</bar>
|
|
9
|
+
</foo>
|
|
10
|
+
EOS
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
rootelt=d.root
|
|
14
|
+
|
|
15
|
+
path1=XML::XXPath.new("/bar/baz[@key='work']")
|
|
16
|
+
|
|
17
|
+
path1.create_new(rootelt)
|
|
18
|
+
=> <baz key='work'/>
|
|
19
|
+
d.write($stdout,2)
|
|
20
|
+
<foo>
|
|
21
|
+
<bar>
|
|
22
|
+
<baz key='work'>Java</baz>
|
|
23
|
+
<baz key='play'>Ruby</baz>
|
|
24
|
+
</bar>
|
|
25
|
+
<bar>
|
|
26
|
+
<baz key='work'/>
|
|
27
|
+
</bar>
|
|
28
|
+
</foo>
|
|
29
|
+
|
|
30
|
+
### a new element is created for *each* path element, regardless of
|
|
31
|
+
### what existed before. So a new "bar" element was added, with a new
|
|
32
|
+
### "baz" element inside it
|
|
33
|
+
|
|
34
|
+
### same call again...
|
|
35
|
+
path1.create_new(rootelt)
|
|
36
|
+
=> <baz key='work'/>
|
|
37
|
+
d.write($stdout,2)
|
|
38
|
+
<foo>
|
|
39
|
+
<bar>
|
|
40
|
+
<baz key='work'>Java</baz>
|
|
41
|
+
<baz key='play'>Ruby</baz>
|
|
42
|
+
</bar>
|
|
43
|
+
<bar>
|
|
44
|
+
<baz key='work'/>
|
|
45
|
+
</bar>
|
|
46
|
+
<bar>
|
|
47
|
+
<baz key='work'/>
|
|
48
|
+
</bar>
|
|
49
|
+
</foo>
|
|
50
|
+
|
|
51
|
+
### same procedure -- new elements added for each path element
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## get reference to 1st "baz" element
|
|
55
|
+
firstbazelt=XML::XXPath.new("/bar/baz").first(rootelt)
|
|
56
|
+
=> <baz key='work'> ... </>
|
|
57
|
+
|
|
58
|
+
path2=XML::XXPath.new("@key2")
|
|
59
|
+
|
|
60
|
+
path2.create_new(firstbazelt)
|
|
61
|
+
=> #<XML::XXPath::Accessors::Attribute:0x314bf8 @parent=<baz key2='[unset]' key='work'> ... </>, @name="key2">
|
|
62
|
+
d.write($stdout,2)
|
|
63
|
+
<foo>
|
|
64
|
+
<bar>
|
|
65
|
+
<baz key2='[unset]' key='work'>Java</baz>
|
|
66
|
+
<baz key='play'>Ruby</baz>
|
|
67
|
+
</bar>
|
|
68
|
+
<bar>
|
|
69
|
+
<baz key='work'/>
|
|
70
|
+
</bar>
|
|
71
|
+
<bar>
|
|
72
|
+
<baz key='work'/>
|
|
73
|
+
</bar>
|
|
74
|
+
</foo>
|
|
75
|
+
|
|
76
|
+
### ok, new attribute node added
|
|
77
|
+
|
|
78
|
+
### same call again...
|
|
79
|
+
path2.create_new(firstbazelt)
|
|
80
|
+
XML::XXPathError: XPath (): @key2: create_new and attribute already exists
|
|
81
|
+
from ../lib/xml/../xml/xxpath.rb:341:in `create_subnode_by_attr_name'
|
|
82
|
+
from ../lib/xml/../xml/xxpath.rb:68:in `initialize'
|
|
83
|
+
from ../lib/xml/../xml/xxpath.rb:67:in `call'
|
|
84
|
+
from ../lib/xml/../xml/xxpath.rb:146:in `all'
|
|
85
|
+
from ../lib/xml/../xml/xxpath.rb:125:in `first'
|
|
86
|
+
from ../lib/xml/../xml/xxpath.rb:167:in `create_new'
|
|
87
|
+
### can't create that path anew again -- an element can't have more
|
|
88
|
+
### than one attribute with the same name
|
|
89
|
+
|
|
90
|
+
### the document hasn't changed
|
|
91
|
+
d.write($stdout,2)
|
|
92
|
+
<foo>
|
|
93
|
+
<bar>
|
|
94
|
+
<baz key2='[unset]' key='work'>Java</baz>
|
|
95
|
+
<baz key='play'>Ruby</baz>
|
|
96
|
+
</bar>
|
|
97
|
+
<bar>
|
|
98
|
+
<baz key='work'/>
|
|
99
|
+
</bar>
|
|
100
|
+
<bar>
|
|
101
|
+
<baz key='work'/>
|
|
102
|
+
</bar>
|
|
103
|
+
</foo>
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
### create_new the same path as in the ensure_created example
|
|
109
|
+
baz6elt=XML::XXPath.new("/bar/baz[6]").create_new(rootelt)
|
|
110
|
+
=> <baz/>
|
|
111
|
+
d.write($stdout,2)
|
|
112
|
+
<foo>
|
|
113
|
+
<bar>
|
|
114
|
+
<baz key2='[unset]' key='work'>Java</baz>
|
|
115
|
+
<baz key='play'>Ruby</baz>
|
|
116
|
+
</bar>
|
|
117
|
+
<bar>
|
|
118
|
+
<baz key='work'/>
|
|
119
|
+
</bar>
|
|
120
|
+
<bar>
|
|
121
|
+
<baz key='work'/>
|
|
122
|
+
</bar>
|
|
123
|
+
<bar>
|
|
124
|
+
<baz/>
|
|
125
|
+
<baz/>
|
|
126
|
+
<baz/>
|
|
127
|
+
<baz/>
|
|
128
|
+
<baz/>
|
|
129
|
+
<baz/>
|
|
130
|
+
</bar>
|
|
131
|
+
</foo>
|
|
132
|
+
|
|
133
|
+
### ok, new "bar" element and 6th "baz" element inside it created
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
XML::XXPath.new("baz[6]").create_new(baz6elt.parent)
|
|
137
|
+
XML::XXPathError: XPath (): baz[6]: create_new and element already exists
|
|
138
|
+
from ../lib/xml/../xml/xxpath.rb:330:in `create_subnode_by_name_and_index'
|
|
139
|
+
from ../lib/xml/../xml/xxpath.rb:52:in `initialize'
|
|
140
|
+
from ../lib/xml/../xml/xxpath.rb:51:in `call'
|
|
141
|
+
from ../lib/xml/../xml/xxpath.rb:146:in `all'
|
|
142
|
+
from ../lib/xml/../xml/xxpath.rb:125:in `first'
|
|
143
|
+
from ../lib/xml/../xml/xxpath.rb:167:in `create_new'
|
|
144
|
+
### yep, baz[6] already existed and thus couldn't be created once
|
|
145
|
+
### again
|
|
146
|
+
|
|
147
|
+
### but of course...
|
|
148
|
+
XML::XXPath.new("/bar/baz[6]").create_new(rootelt)
|
|
149
|
+
=> <baz/>
|
|
150
|
+
d.write($stdout,2)
|
|
151
|
+
<foo>
|
|
152
|
+
<bar>
|
|
153
|
+
<baz key2='[unset]' key='work'>Java</baz>
|
|
154
|
+
<baz key='play'>Ruby</baz>
|
|
155
|
+
</bar>
|
|
156
|
+
<bar>
|
|
157
|
+
<baz key='work'/>
|
|
158
|
+
</bar>
|
|
159
|
+
<bar>
|
|
160
|
+
<baz key='work'/>
|
|
161
|
+
</bar>
|
|
162
|
+
<bar>
|
|
163
|
+
<baz/>
|
|
164
|
+
<baz/>
|
|
165
|
+
<baz/>
|
|
166
|
+
<baz/>
|
|
167
|
+
<baz/>
|
|
168
|
+
<baz/>
|
|
169
|
+
</bar>
|
|
170
|
+
<bar>
|
|
171
|
+
<baz/>
|
|
172
|
+
<baz/>
|
|
173
|
+
<baz/>
|
|
174
|
+
<baz/>
|
|
175
|
+
<baz/>
|
|
176
|
+
<baz/>
|
|
177
|
+
</bar>
|
|
178
|
+
</foo>
|
|
179
|
+
|
|
180
|
+
### this works because *all* path elements are newly created
|
|
181
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#:invisible:
|
|
2
|
+
$:.unshift "../lib" #<=
|
|
3
|
+
#:visible:
|
|
4
|
+
require 'xml/xxpath'
|
|
5
|
+
|
|
6
|
+
d=REXML::Document.new <<EOS
|
|
7
|
+
<foo>
|
|
8
|
+
<bar x="hello">
|
|
9
|
+
<first>
|
|
10
|
+
<second>pingpong</second>
|
|
11
|
+
</first>
|
|
12
|
+
</bar>
|
|
13
|
+
<bar x="goodbye"/>
|
|
14
|
+
</foo>
|
|
15
|
+
EOS
|
|
16
|
+
|
|
17
|
+
XML::XXPath.new("/foo/bar").all(d)#<=
|
|
18
|
+
|
|
19
|
+
XML::XXPath.new("/bar").all(d)#<=
|
|
20
|
+
|
|
21
|
+
XML::XXPath.new("/foo/bar").all(d.root)#<=
|
|
22
|
+
|
|
23
|
+
XML::XXPath.new("/bar").all(d.root)#<=
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
firstelt = XML::XXPath.new("/foo/bar/first").first(d)#<=
|
|
27
|
+
|
|
28
|
+
XML::XXPath.new("/first/second").all(firstelt)#<=
|
|
29
|
+
|
|
30
|
+
XML::XXPath.new("/second").all(firstelt)#<=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'xml/xxpath'
|
|
2
|
+
|
|
3
|
+
d=REXML::Document.new <<EOS
|
|
4
|
+
<foo>
|
|
5
|
+
<bar x="hello">
|
|
6
|
+
<first>
|
|
7
|
+
<second>pingpong</second>
|
|
8
|
+
</first>
|
|
9
|
+
</bar>
|
|
10
|
+
<bar x="goodbye"/>
|
|
11
|
+
</foo>
|
|
12
|
+
EOS
|
|
13
|
+
|
|
14
|
+
XML::XXPath.new("/foo/bar").all(d)
|
|
15
|
+
=> [<bar x='hello'> ... </>, <bar x='goodbye'/>]
|
|
16
|
+
|
|
17
|
+
XML::XXPath.new("/bar").all(d)
|
|
18
|
+
=> []
|
|
19
|
+
|
|
20
|
+
XML::XXPath.new("/foo/bar").all(d.root)
|
|
21
|
+
=> []
|
|
22
|
+
|
|
23
|
+
XML::XXPath.new("/bar").all(d.root)
|
|
24
|
+
=> [<bar x='hello'> ... </>, <bar x='goodbye'/>]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
firstelt = XML::XXPath.new("/foo/bar/first").first(d)
|
|
28
|
+
=> <first> ... </>
|
|
29
|
+
|
|
30
|
+
XML::XXPath.new("/first/second").all(firstelt)
|
|
31
|
+
=> []
|
|
32
|
+
|
|
33
|
+
XML::XXPath.new("/second").all(firstelt)
|
|
34
|
+
=> [<second> ... </>]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#:invisible:
|
|
2
|
+
$:.unshift "../lib" #<=
|
|
3
|
+
#:visible:
|
|
4
|
+
require 'xml/xxpath'
|
|
5
|
+
|
|
6
|
+
d=REXML::Document.new <<EOS
|
|
7
|
+
<foo>
|
|
8
|
+
<bar>
|
|
9
|
+
<baz key="work">Java</baz>
|
|
10
|
+
<baz key="play">Ruby</baz>
|
|
11
|
+
</bar>
|
|
12
|
+
</foo>
|
|
13
|
+
EOS
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
rootelt=d.root
|
|
17
|
+
|
|
18
|
+
#### ensuring that a specific path exists inside the document
|
|
19
|
+
|
|
20
|
+
#:visible_retval:
|
|
21
|
+
XML::XXPath.new("/bar/baz[@key='work']").first(rootelt,:ensure_created=>true)#<=
|
|
22
|
+
#:invisible_retval:
|
|
23
|
+
d.write($stdout,2)#<=
|
|
24
|
+
### no change (path existed before)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#:visible_retval:
|
|
28
|
+
XML::XXPath.new("/bar/baz[@key='42']").first(rootelt,:ensure_created=>true)#<=
|
|
29
|
+
#:invisible_retval:
|
|
30
|
+
d.write($stdout,2)#<=
|
|
31
|
+
### path was added
|
|
32
|
+
|
|
33
|
+
#:visible_retval:
|
|
34
|
+
XML::XXPath.new("/bar/baz[@key='42']").first(rootelt,:ensure_created=>true)#<=
|
|
35
|
+
#:invisible_retval:
|
|
36
|
+
d.write($stdout,2)#<=
|
|
37
|
+
### no change this time
|
|
38
|
+
|
|
39
|
+
#:visible_retval:
|
|
40
|
+
XML::XXPath.new("/bar/baz[@key2='hello']").first(rootelt,:ensure_created=>true)#<=
|
|
41
|
+
#:invisible_retval:
|
|
42
|
+
d.write($stdout,2)#<=
|
|
43
|
+
### this fit in the 1st "baz" element since
|
|
44
|
+
### there was no "key2" attribute there before.
|
|
45
|
+
|
|
46
|
+
#:visible_retval:
|
|
47
|
+
XML::XXPath.new("/bar/baz[2]").first(rootelt,:ensure_created=>true)#<=
|
|
48
|
+
#:invisible_retval:
|
|
49
|
+
d.write($stdout,2)#<=
|
|
50
|
+
### no change
|
|
51
|
+
|
|
52
|
+
#:visible_retval:
|
|
53
|
+
XML::XXPath.new("/bar/baz[6]/@haha").first(rootelt,:ensure_created=>true)#<=
|
|
54
|
+
#:invisible_retval:
|
|
55
|
+
d.write($stdout,2)#<=
|
|
56
|
+
### for there to be a 6th "baz" element, there must be 1st..5th "baz" elements
|
|
57
|
+
|
|
58
|
+
#:visible_retval:
|
|
59
|
+
XML::XXPath.new("/bar/baz[6]/@haha").first(rootelt,:ensure_created=>true)#<=
|
|
60
|
+
#:invisible_retval:
|
|
61
|
+
d.write($stdout,2)#<=
|
|
62
|
+
### no change this time
|