ariel 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/LICENSE +21 -0
  2. data/README +98 -0
  3. data/bin/ariel +56 -0
  4. data/examples/google_calculator/labeled/1 +43 -0
  5. data/examples/google_calculator/labeled/2 +41 -0
  6. data/examples/google_calculator/labeled/3 +41 -0
  7. data/examples/google_calculator/structure.rb +12 -0
  8. data/examples/google_calculator/structure.yaml +46 -0
  9. data/examples/google_calculator/unlabeled/1 +43 -0
  10. data/examples/google_calculator/unlabeled/2 +43 -0
  11. data/examples/raa/labeled/highline.html +135 -0
  12. data/examples/raa/labeled/mongrel.html +168 -0
  13. data/examples/raa/structure.rb +17 -0
  14. data/examples/raa/structure.yaml +183 -0
  15. data/examples/raa/unlabeled/pdf-writer.html +175 -0
  16. data/lib/ariel/candidate_selector.rb +94 -0
  17. data/lib/ariel/example_document_loader.rb +59 -0
  18. data/lib/ariel/extracted_node.rb +20 -0
  19. data/lib/ariel/label_utils.rb +71 -0
  20. data/lib/ariel/learner.rb +237 -0
  21. data/lib/ariel/node_like.rb +26 -0
  22. data/lib/ariel/rule.rb +112 -0
  23. data/lib/ariel/rule_set.rb +34 -0
  24. data/lib/ariel/structure_node.rb +75 -0
  25. data/lib/ariel/token.rb +68 -0
  26. data/lib/ariel/token_stream.rb +240 -0
  27. data/lib/ariel/wildcards.rb +33 -0
  28. data/lib/ariel.rb +69 -0
  29. data/test/ariel_test_case.rb +15 -0
  30. data/test/fixtures.rb +43 -0
  31. data/test/specs/token_spec.rb +65 -0
  32. data/test/specs/token_stream_spec.rb +43 -0
  33. data/test/specs/wildcards_spec.rb +26 -0
  34. data/test/test_candidate_selector.rb +58 -0
  35. data/test/test_example_document_loader.rb +7 -0
  36. data/test/test_label_utils.rb +15 -0
  37. data/test/test_learner.rb +38 -0
  38. data/test/test_rule.rb +38 -0
  39. data/test/test_structure_node.rb +81 -0
  40. data/test/test_token.rb +16 -0
  41. data/test/test_token_stream.rb +82 -0
  42. data/test/test_wildcards.rb +18 -0
  43. metadata +103 -0
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2006 A. S. Bradbury
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use, copy,
7
+ modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
15
+ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
16
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
17
+ AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
+ OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,98 @@
1
+ = Ariel release 0.0.1
2
+
3
+ == Install
4
+ gem install ariel
5
+
6
+ == Announcement
7
+ This is the first public release of Ariel - A Ruby Information Extraction
8
+ Library. See my previous post, ruby-talk:200140[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/200140]
9
+ for more background information. This release supports defining a tree document
10
+ structure and learning rules to extract each node of this true. Handling of list
11
+ extraction and learning is not yet implemented, and is the next immediate
12
+ priority. See the examples directory included in this release and below for
13
+ discussion of the included examples. Rule learning is functional, and appears to
14
+ work well, but many refinements are possible. Look out for more updates and a
15
+ new releases shortly.
16
+
17
+ == About Ariel
18
+ Ariel intends to assist in extracting information from semi-structured
19
+ documents including (but not in any way limited to) web pages. Although you
20
+ may use libraries such as Hpricot or Rubyful Soup, or even plain Regular
21
+ Expressions to achieve the same goal, Ariel approaches the problem very
22
+ differently. Ariel relies on the user labeling examples of the data they
23
+ want to extract, and then finds patterns across several such labeled
24
+ examples in order to produce a set of general rules for extracting this
25
+ information from any similar document. It uses the MIT license.
26
+
27
+ == Examples
28
+ This release includes two examples in the example directory (which should now
29
+ be in the directory to which rubygems installed ariel). The first is the
30
+ google_calculator directory (inspired by Justin Bailey's post to my Ariel
31
+ progress report). The structure is very simple, a calculation is extracted from
32
+ the page, and then the actual result is extracted from that calculation. 3
33
+ labeled examples are included. Ariel reads each of these, tokenizes them,
34
+ and extracts each label. 4 sets of rules are learnt:
35
+ 1. Rules to locate the start of the calculation in the original document.
36
+ 2. Rules to locate the end of the calculation in the original document (applied
37
+ from the end of the document).
38
+ 3. Rules to locate the start of the result of the calculation from the
39
+ extracted calculation.
40
+ 4. Rules to locate the end of the result of the calculation from the extracted
41
+ calculation (applied from the end of the calculation).
42
+
43
+ Take note of 3 and 4 - this is the advantage of treating a document as a tree in
44
+ this way. Deeply nested elements can be located by generating a series of simple
45
+ rules, rather than generating a rule with complexity that increases at each
46
+ level. Sets of rules are generated because it may not be possible to generate a
47
+ single rule that will catch all cases. A rule is found that matches as many of
48
+ the examples as possible (and fails on the rest), these examples are then removed
49
+ and a rule is found that will match as many of the remaining examples and so on.
50
+ When it comes to applying these learnt rules, the rules are applied in order
51
+ until there is a rule that matches.
52
+
53
+ To see this example for yourself just execute structure.rb in the
54
+ examples/google_calculator directory to create a locally writable
55
+ structure.yaml. Then do:
56
+ ariel -D -m learn -s structure.yaml -d /path/to/examples/google_calculator/labeled
57
+
58
+ You'll have to wait a while (see my note about performance below). At the end,
59
+ the learnt rules will be printed in YAML format, and structure.yaml will be
60
+ updated to include these rules. Apply these learnt rules to some unlabeled
61
+ documents by doing:
62
+ ariel -D -m extract -s structure.yaml -d /path/to/examples/google_calculator/unlabeled
63
+
64
+ You should see the results of a successful extraction printed to your terminal,
65
+ such as this one:
66
+
67
+ Results for unlabeled/2:
68
+ calculation: 3.5 U.S. dollars = 1.8486241 British pounds
69
+ result: 1.8486241 British pounds
70
+
71
+ The second example (raa) learns rules using just 2 labeled examples. This is probably
72
+ fewer than I'd recommend in most cases, but as it works... This example consists
73
+ of project entries in the Ruby Application Archive. The structure of the page is
74
+ very flat, so all rules are applied to the full page. Rules are learnt and
75
+ applied as shown above. The structure.yaml files included in the examples
76
+ directories already include rules generated by Ariel, use these if you just want
77
+ to see extraction working.
78
+
79
+ Note: The interface demonstrated by ariel above is not very flexible or
80
+ friendly, it's just to serve as a demonstration for the moment.
81
+
82
+ == Performance
83
+ Generating rules takes quite a long time. It is always going to be an intensive
84
+ operation, but there are some very simple and obvious improvements in efficiency
85
+ that can be made. For a start, the rule candidate refining process currently
86
+ re-applies the same rules over and over every time the remaining rule candidates
87
+ are ranked. This is where most time is spent, and caching these should make a
88
+ big difference. This will definitely be implemented. Other performance
89
+ enhancements are bound to be there, but my focus at this time is to get
90
+ something that works.
91
+
92
+ == Credits
93
+ Ariel is developed by Alex Bradbury as a Google Summer of Code project under the
94
+ mentoring of Austin Ziegler.
95
+
96
+ == Links
97
+ Watch my development through the subversion repository at http://rubyforge.org/projects/ariel
98
+ I've also just started using the tracker at http://code.google.com/p/ariel/
data/bin/ariel ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'yaml'
5
+
6
+ options = {}
7
+
8
+ OptionParser.new do |opts|
9
+ opts.banner = "Usage: #$0 [mode] [options]"
10
+
11
+ opts.on('-m', '--mode=learn|extract') do |mode|
12
+ raise OptionParser::InvalidArgument unless (mode=="extract" or mode=="learn")
13
+ options[:mode]=mode
14
+ end
15
+
16
+ opts.on('-d', '--dir=DIRECTORY', 'Directory to look for documents to operate on.') do |dir|
17
+ options[:dir]=dir
18
+ end
19
+
20
+ opts.on('-D', '--debug', 'Directory to look for documents to operate on.') do
21
+ $DEBUG=true
22
+ end
23
+
24
+ opts.on('-s', '--structure=STRUCTURE', 'YAML file in which the structure is defined') do |structure|
25
+ options[:structure]=structure
26
+ end
27
+ end.parse!
28
+
29
+ require 'ariel' #After option parsing to debug setting can take effect
30
+
31
+ case options[:mode]
32
+ when "learn"
33
+ structure=YAML.load_file options[:structure]
34
+ learnt_structure=Ariel::ExampleDocumentLoader.load_directory options[:dir], structure
35
+ File.open(options[:structure], 'wb') do |file|
36
+ YAML.dump(learnt_structure, file)
37
+ end
38
+ learnt_structure.each_descendant do |structure_node|
39
+ puts structure_node.meta.name.to_s
40
+ puts structure_node.ruleset.to_yaml
41
+ end
42
+ when "extract"
43
+ learnt_structure=YAML.load_file options[:structure]
44
+ Dir.glob("#{options[:dir]}/*") do |file|
45
+ tokenstream=Ariel::TokenStream.new
46
+ tokenstream.tokenize File.read(file)
47
+ root_node=Ariel::ExtractedNode.new :root, tokenstream, learnt_structure
48
+ learnt_structure.apply_extraction_tree_on root_node
49
+ puts "Results for #{file}:"
50
+ root_node.each_descendant do |node|
51
+ puts "#{node.meta.name}: #{node.tokenstream.text}"
52
+ end
53
+ puts
54
+ # puts root_node.to_yaml
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ <html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>46km in miles - Google Search</title><style><!--
2
+ body,td,div,.p,a{font-family:arial,sans-serif }
3
+ div,td{color:#000}
4
+ .f{color:#6f6f6f}
5
+ .flc,.fl:link{color:#77c}
6
+ a:link,.w,a.w:link,.w a:link{color:#00c}
7
+ a:visited,.fl:visited{color:#551a8b}
8
+ a:active,.fl:active{color:#f00}
9
+ .t a:link,.t a:active,.t a:visited,.t{color:#000}
10
+ .t{background-color:#e5ecf9}
11
+ .k{background-color:#36c}
12
+ .j{width:34em}
13
+ .h{color:#36c}
14
+ .i,.i:link{color:#a90a08}
15
+ .a,.a:link{color:#008000}
16
+ .z{display:none}
17
+ div.n{margin-top:1ex}
18
+ .n a{font-size:10pt;color:#000}
19
+ .n .i{font-size:10pt;font-weight:bold}
20
+ .q:visited,.q:link,.q:active,.q{color:#00c;}
21
+ .b a{font-size:12pt;color:#00c;font-weight:bold}
22
+ .ch{cursor:pointer;cursor:hand}
23
+ .e{margin-top:.75em;margin-bottom:.75em}
24
+ .g{margin-top:1em;margin-bottom:1em}
25
+ .sm{display:block;margin-top:0px;margin-bottom:0px;margin-left:40px}
26
+ -->
27
+ </style>
28
+ <script><!--
29
+ //-->
30
+ </script><noscript></noscript><script>
31
+ <!--
32
+ function ss(w,id){window.status=w;return true;}
33
+ function cs(){window.status='';}
34
+ function ga(o,e) {return true;}
35
+ //-->
36
+ </script>
37
+ </head><body bgcolor=#ffffff topmargin=3 marginheight=3><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="https://www.google.com/accounts/Login?continue=http://www.google.co.uk/search%3Fhl%3Den%26ie%3DISO-8859-1%26q%3D46km%2Bin%2Bmiles%26meta%3D&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><table border=0 cellpadding=0 cellspacing=0 width=100%><tr><form name=gs method=GET action=/search><td valign=top><a href="http://www.google.co.uk/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top width=100% style="padding-top:0px"><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://images.google.co.uk/images?hl=en&ie=ISO-8859-1&q=46km+in+miles&sa=N&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://groups.google.co.uk/groups?hl=en&ie=ISO-8859-1&q=46km+in+miles&sa=N&tab=wg">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://news.google.co.uk/news?hl=en&ie=ISO-8859-1&q=46km+in+miles&sa=N&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://froogle.google.co.uk/froogle?hl=en&ie=ISO-8859-1&q=46km+in+miles&sa=N&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q >more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><input type=hidden name=hl value="en"><input type=hidden name=ie value="ISO-8859-1"><input type=text name=q size=41 maxlength=2048 value="46km in miles" title="Search"><font size=-1> <input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=46km+in+miles&hl=en&lr=&ie=UTF-8>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=46km+in+miles&hl=en&lr=&ie=UTF-8>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1>Search: <input id=all type=radio name=meta value="" checked><label for=all> the web </label><input id=cty type=radio name=meta value="cr=countryUK|countryGB" ><label for=cty> pages from the UK </label></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></form></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 width=1% nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td></tr></table>
38
+ <script><!--
39
+ var tt = document.gs.q;
40
+ tt.focus();
41
+ // -->
42
+ </script>
43
+ <p><table><tr><td><img src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap><font size=+1><b><l:calculation>46 kilometers = <l:result>28.5830748 miles</l:result></l:calculation></b></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td><font size=-1><a href=/intl/en/help/features.html#calculator>More about calculator.</a></td></tr></table><br><table><tr><td><font size=+0>Search for documents containing the terms <a href=/search?hl=en&lr=&ie=UTF-8&q=%2B46km+in+miles&nocalc=1><b><i>46km in miles</i></b></a>.</td></tr></table><br><br><br clear=all><center><p><hr class=z><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc colspan=2><img width=1 height=1 alt=""></td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center class=t><font size=-1><a href="/">Google&nbsp;Home</a> - <a href="/intl/en/ads/">Advertising&nbsp;Programmes</a> - <a href=/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2006 Google</font></center></body></html>
@@ -0,0 +1,41 @@
1
+ <html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>5*67 - Google Search</title><style><!--
2
+ body,td,div,.p,a{font-family:arial,sans-serif }
3
+ div,td{color:#000}
4
+ .f{color:#6f6f6f}
5
+ .flc,.fl:link{color:#77c}
6
+ a:link,.w,a.w:link,.w a:link{color:#00c}
7
+ a:visited,.fl:visited{color:#551a8b}
8
+ a:active,.fl:active{color:#f00}
9
+ .t a:link,.t a:active,.t a:visited,.t{color:#000}
10
+ .t{background-color:#e5ecf9}
11
+ .k{background-color:#36c}
12
+ .j{width:34em}
13
+ .h{color:#36c}
14
+ .i,.i:link{color:#a90a08}
15
+ .a,.a:link{color:#008000}
16
+ .z{display:none}
17
+ div.n{margin-top:1ex}
18
+ .n a{font-size:10pt;color:#000}
19
+ .n .i{font-size:10pt;font-weight:bold}
20
+ .q:visited,.q:link,.q:active,.q{color:#00c;}
21
+ .b a{font-size:12pt;color:#00c;font-weight:bold}
22
+ .ch{cursor:pointer;cursor:hand}
23
+ .e{margin-top:.75em;margin-bottom:.75em}
24
+ .g{margin-top:1em;margin-bottom:1em}
25
+ .sm{display:block;margin-top:0px;margin-bottom:0px;margin-left:40px}
26
+ -->
27
+ </style>
28
+ <script>
29
+ <!--
30
+ function ss(w,id){window.status=w;return true;}
31
+ function cs(){window.status='';}
32
+ function ga(o,e) {return true;}
33
+ //-->
34
+ </script>
35
+ </head><body bgcolor=#ffffff topmargin=3 marginheight=3><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="https://www.google.com/accounts/Login?continue=http://www.google.co.uk/search%3Fhl%3Den%26ie%3DISO-8859-1%26q%3D5*67%26meta%3D&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><table border=0 cellpadding=0 cellspacing=0 width=100%><tr><form name=gs method=GET action=/search><td valign=top><a href="http://www.google.co.uk/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top width=100% style="padding-top:0px"><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://images.google.co.uk/images?hl=en&ie=ISO-8859-1&q=5*67&sa=N&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://groups.google.co.uk/groups?hl=en&ie=ISO-8859-1&q=5*67&sa=N&tab=wg">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://news.google.co.uk/news?hl=en&ie=ISO-8859-1&q=5*67&sa=N&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://froogle.google.co.uk/froogle?hl=en&ie=ISO-8859-1&q=5*67&sa=N&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q>more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><input type=hidden name=hl value="en"><input type=hidden name=ie value="ISO-8859-1"><input type=text name=q size=41 maxlength=2048 value="5*67" title="Search"><font size=-1> <input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=5*67&hl=en&lr=&ie=UTF-8>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=5*67&hl=en&lr=&ie=UTF-8>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1>Search: <input id=all type=radio name=meta value="" checked><label for=all> the web </label><input id=cty type=radio name=meta value="cr=countryUK|countryGB" ><label for=cty> pages from the UK </label></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></form></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 width=1% nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td></tr></table>
36
+ <script><!--
37
+ var tt = document.gs.q;
38
+ tt.focus();
39
+ // -->
40
+ </script>
41
+ <p><table><tr><td><img src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap><font size=+1><b><l:calculation>5 * 67 = <l:result>335</l:result></l:calculation></b></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td><font size=-1><a href=/intl/en/help/features.html#calculator>More about calculator.</a></td></tr></table><br><table><tr><td><font size=+0>Search for documents containing the terms <a href=/search?hl=en&lr=&ie=UTF-8&q=%2B5*67&nocalc=1><b><i>5*67</i></b></a>.</td></tr></table><br><br><br clear=all><center><p><hr class=z><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc colspan=2><img width=1 height=1 alt=""></td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center class=t><font size=-1><a href="/">Google&nbsp;Home</a> - <a href="/intl/en/ads/">Advertising&nbsp;Programmes</a> - <a href=/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2006 Google</font></center></body></html>
@@ -0,0 +1,41 @@
1
+ <html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>345 + 89 - 45 - Google Search</title><style><!--
2
+ body,td,div,.p,a{font-family:arial,sans-serif }
3
+ div,td{color:#000}
4
+ .f{color:#6f6f6f}
5
+ .flc,.fl:link{color:#77c}
6
+ a:link,.w,a.w:link,.w a:link{color:#00c}
7
+ a:visited,.fl:visited{color:#551a8b}
8
+ a:active,.fl:active{color:#f00}
9
+ .t a:link,.t a:active,.t a:visited,.t{color:#000}
10
+ .t{background-color:#e5ecf9}
11
+ .k{background-color:#36c}
12
+ .j{width:34em}
13
+ .h{color:#36c}
14
+ .i,.i:link{color:#a90a08}
15
+ .a,.a:link{color:#008000}
16
+ .z{display:none}
17
+ div.n{margin-top:1ex}
18
+ .n a{font-size:10pt;color:#000}
19
+ .n .i{font-size:10pt;font-weight:bold}
20
+ .q:visited,.q:link,.q:active,.q{color:#00c;}
21
+ .b a{font-size:12pt;color:#00c;font-weight:bold}
22
+ .ch{cursor:pointer;cursor:hand}
23
+ .e{margin-top:.75em;margin-bottom:.75em}
24
+ .g{margin-top:1em;margin-bottom:1em}
25
+ .sm{display:block;margin-top:0px;margin-bottom:0px;margin-left:40px}
26
+ -->
27
+ </style>
28
+ <script>
29
+ <!--
30
+ function ss(w,id){window.status=w;return true;}
31
+ function cs(){window.status='';}
32
+ function ga(o,e) {return true;}
33
+ //-->
34
+ </script>
35
+ </head><body bgcolor=#ffffff topmargin=3 marginheight=3><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="https://www.google.com/accounts/Login?continue=http://www.google.co.uk/search%3Fhl%3Den%26ie%3DISO-8859-1%26q%3D345%2B%252B%2B89%2B-%2B45%26meta%3D&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><table border=0 cellpadding=0 cellspacing=0 width=100%><tr><form name=gs method=GET action=/search><td valign=top><a href="http://www.google.co.uk/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top width=100% style="padding-top:0px"><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://images.google.co.uk/images?hl=en&ie=ISO-8859-1&q=345+%2B+89+-+45&sa=N&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://groups.google.co.uk/groups?hl=en&ie=ISO-8859-1&q=345+%2B+89+-+45&sa=N&tab=wg">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://news.google.co.uk/news?hl=en&ie=ISO-8859-1&q=345+%2B+89+-+45&sa=N&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://froogle.google.co.uk/froogle?hl=en&ie=ISO-8859-1&q=345+%2B+89+-+45&sa=N&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q>more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><input type=hidden name=hl value="en"><input type=hidden name=ie value="ISO-8859-1"><input type=text name=q size=41 maxlength=2048 value="345 + 89 - 45" title="Search"><font size=-1> <input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=345+%2B+89+-+45&hl=en&lr=&ie=UTF-8>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=345+%2B+89+-+45&hl=en&lr=&ie=UTF-8>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1>Search: <input id=all type=radio name=meta value="" checked><label for=all> the web </label><input id=cty type=radio name=meta value="cr=countryUK|countryGB" ><label for=cty> pages from the UK </label></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></form></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 width=1% nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td></tr></table>
36
+ <script><!--
37
+ var tt = document.gs.q;
38
+ tt.focus();
39
+ // -->
40
+ </script>
41
+ <p><table><tr><td><img src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap><font size=+1><b><l:calculation>345 + 89 - 45 = <l:result>389</l:result></l:calculation></b></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td><font size=-1><a href=/intl/en/help/features.html#calculator>More about calculator.</a></td></tr></table><br><table><tr><td><font size=+0>Search for documents containing the terms <a href=/search?hl=en&lr=&ie=UTF-8&q=%2B345+%2B+89+-+45&nocalc=1><b><i>345 + 89 - 45</i></b></a>.</td></tr></table><br><br><br clear=all><center><p><hr class=z><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc colspan=2><img width=1 height=1 alt=""></td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center class=t><font size=-1><a href="/">Google&nbsp;Home</a> - <a href="/intl/en/ads/">Advertising&nbsp;Programmes</a> - <a href=/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2006 Google</font></center></body></html>
@@ -0,0 +1,12 @@
1
+ require 'ariel'
2
+ require 'yaml'
3
+
4
+ structure = Ariel::StructureNode.new do |r|
5
+ r.item :calculation do |c|
6
+ c.item :result
7
+ end
8
+ end
9
+
10
+ File.open('structure.yaml') do |file|
11
+ YAML.dump structure, file
12
+ end
@@ -0,0 +1,46 @@
1
+ --- &id002 !ruby/object:Ariel::StructureNode
2
+ children:
3
+ :calculation: &id001 !ruby/object:Ariel::StructureNode
4
+ children:
5
+ :result: !ruby/object:Ariel::StructureNode
6
+ children: {}
7
+
8
+ meta: !ruby/object:OpenStruct
9
+ table:
10
+ :node_type: :not_list
11
+ :name: :result
12
+ parent: *id001
13
+ ruleset: !ruby/object:Ariel::RuleSet
14
+ end_rules:
15
+ - !ruby/object:Ariel::Rule
16
+ direction: :back
17
+ landmarks: []
18
+
19
+ start_rules:
20
+ - !ruby/object:Ariel::Rule
21
+ direction: :forward
22
+ landmarks:
23
+ - - "="
24
+ meta: !ruby/object:OpenStruct
25
+ table:
26
+ :node_type: :not_list
27
+ :name: :calculation
28
+ parent: *id002
29
+ ruleset: !ruby/object:Ariel::RuleSet
30
+ end_rules:
31
+ - !ruby/object:Ariel::Rule
32
+ direction: :back
33
+ landmarks:
34
+ - - </b>
35
+ - - </b>
36
+ start_rules:
37
+ - !ruby/object:Ariel::Rule
38
+ direction: :forward
39
+ landmarks:
40
+ - - <b>
41
+ - - gif
42
+ - - <b>
43
+ meta: !ruby/object:OpenStruct
44
+ table:
45
+ :node_type: :not_list
46
+ :name: :root
@@ -0,0 +1,43 @@
1
+ <html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>56 in binary - Google Search</title><style><!--
2
+ body,td,div,.p,a{font-family:arial,sans-serif }
3
+ div,td{color:#000}
4
+ .f{color:#6f6f6f}
5
+ .flc,.fl:link{color:#77c}
6
+ a:link,.w,a.w:link,.w a:link{color:#00c}
7
+ a:visited,.fl:visited{color:#551a8b}
8
+ a:active,.fl:active{color:#f00}
9
+ .t a:link,.t a:active,.t a:visited,.t{color:#000}
10
+ .t{background-color:#e5ecf9}
11
+ .k{background-color:#36c}
12
+ .j{width:34em}
13
+ .h{color:#36c}
14
+ .i,.i:link{color:#a90a08}
15
+ .a,.a:link{color:#008000}
16
+ .z{display:none}
17
+ div.n{margin-top:1ex}
18
+ .n a{font-size:10pt;color:#000}
19
+ .n .i{font-size:10pt;font-weight:bold}
20
+ .q:visited,.q:link,.q:active,.q{color:#00c;}
21
+ .b a{font-size:12pt;color:#00c;font-weight:bold}
22
+ .ch{cursor:pointer;cursor:hand}
23
+ .e{margin-top:.75em;margin-bottom:.75em}
24
+ .g{margin-top:1em;margin-bottom:1em}
25
+ .sm{display:block;margin-top:0px;margin-bottom:0px;margin-left:40px}
26
+ -->
27
+ </style>
28
+ <script><!--
29
+ //-->
30
+ </script><noscript></noscript><script>
31
+ <!--
32
+ function ss(w,id){window.status=w;return true;}
33
+ function cs(){window.status='';}
34
+ function ga(o,e) {return true;}
35
+ //-->
36
+ </script>
37
+ </head><body bgcolor=#ffffff topmargin=3 marginheight=3><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="https://www.google.com/accounts/Login?continue=http://www.google.co.uk/search%3Fhl%3Den%26ie%3DISO-8859-1%26q%3D56%2Bin%2Bbinary%26meta%3D&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><table border=0 cellpadding=0 cellspacing=0 width=100%><tr><form name=gs method=GET action=/search><td valign=top><a href="http://www.google.co.uk/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top width=100% style="padding-top:0px"><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://images.google.co.uk/images?hl=en&ie=ISO-8859-1&q=56+in+binary&sa=N&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://groups.google.co.uk/groups?hl=en&ie=ISO-8859-1&q=56+in+binary&sa=N&tab=wg">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://news.google.co.uk/news?hl=en&ie=ISO-8859-1&q=56+in+binary&sa=N&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://froogle.google.co.uk/froogle?hl=en&ie=ISO-8859-1&q=56+in+binary&sa=N&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q >more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><input type=hidden name=hl value="en"><input type=hidden name=ie value="ISO-8859-1"><input type=text name=q size=41 maxlength=2048 value="56 in binary" title="Search"><font size=-1> <input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=56+in+binary&hl=en&lr=&ie=UTF-8>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=56+in+binary&hl=en&lr=&ie=UTF-8>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1>Search: <input id=all type=radio name=meta value="" checked><label for=all> the web </label><input id=cty type=radio name=meta value="cr=countryUK|countryGB" ><label for=cty> pages from the UK </label></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></form></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 width=1% nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td></tr></table>
38
+ <script><!--
39
+ var tt = document.gs.q;
40
+ tt.focus();
41
+ // -->
42
+ </script>
43
+ <p><table><tr><td><img src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap><font size=+1><b>56 = 0b111000</b></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td><font size=-1><a href=/intl/en/help/features.html#calculator>More about calculator.</a></td></tr></table><br><table><tr><td><font size=+0>Search for documents containing the terms <a href=/search?hl=en&lr=&ie=UTF-8&q=%2B56+in+binary&nocalc=1><b><i>56 in binary</i></b></a>.</td></tr></table><br><br><br clear=all><center><p><hr class=z><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc colspan=2><img width=1 height=1 alt=""></td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center class=t><font size=-1><a href="/">Google&nbsp;Home</a> - <a href="/intl/en/ads/">Advertising&nbsp;Programmes</a> - <a href=/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2006 Google</font></center></body></html>
@@ -0,0 +1,43 @@
1
+ <html><head><meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1"><title>3.5 USD in GBP - Google Search</title><style><!--
2
+ body,td,div,.p,a{font-family:arial,sans-serif }
3
+ div,td{color:#000}
4
+ .f{color:#6f6f6f}
5
+ .flc,.fl:link{color:#77c}
6
+ a:link,.w,a.w:link,.w a:link{color:#00c}
7
+ a:visited,.fl:visited{color:#551a8b}
8
+ a:active,.fl:active{color:#f00}
9
+ .t a:link,.t a:active,.t a:visited,.t{color:#000}
10
+ .t{background-color:#e5ecf9}
11
+ .k{background-color:#36c}
12
+ .j{width:34em}
13
+ .h{color:#36c}
14
+ .i,.i:link{color:#a90a08}
15
+ .a,.a:link{color:#008000}
16
+ .z{display:none}
17
+ div.n{margin-top:1ex}
18
+ .n a{font-size:10pt;color:#000}
19
+ .n .i{font-size:10pt;font-weight:bold}
20
+ .q:visited,.q:link,.q:active,.q{color:#00c;}
21
+ .b a{font-size:12pt;color:#00c;font-weight:bold}
22
+ .ch{cursor:pointer;cursor:hand}
23
+ .e{margin-top:.75em;margin-bottom:.75em}
24
+ .g{margin-top:1em;margin-bottom:1em}
25
+ .sm{display:block;margin-top:0px;margin-bottom:0px;margin-left:40px}
26
+ -->
27
+ </style>
28
+ <script><!--
29
+ //-->
30
+ </script><noscript></noscript><script>
31
+ <!--
32
+ function ss(w,id){window.status=w;return true;}
33
+ function cs(){window.status='';}
34
+ function ga(o,e) {return true;}
35
+ //-->
36
+ </script>
37
+ </head><body bgcolor=#ffffff topmargin=3 marginheight=3><table border=0 cellspacing=0 cellpadding=0 width=100%><tr><td align=right nowrap><font size=-1><a href="https://www.google.com/accounts/Login?continue=http://www.google.com/search%3Fq%3D3.5%2BUSD%2Bin%2BGBP%26btnG%3DGoogle%2BSearch&hl=en">Sign in</a></font></td></tr><tr height=4><td><img alt="" width=1 height=1></td></tr></table><table border=0 cellpadding=0 cellspacing=0 width=100%><tr><form name=gs method=GET action=/search><td valign=top><a href="http://www.google.com/webhp?hl=en"><img src="/images/logo_sm.gif" width=150 height=55 alt="Go to Google Home" border=0 vspace=12></a></td><td>&nbsp;&nbsp;</td><td valign=top width=100% style="padding-top:0px"><table cellpadding=0 cellspacing=0 border=0><tr><td height=14 valign=bottom><table border=0 cellspacing=0 cellpadding=4><tr><td nowrap><font size=-1><b>Web</b>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://images.google.com/images?q=3.5+USD+in+GBP&btnG=Google+Search&sa=N&tab=wi">Images</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://groups.google.com/groups?q=3.5+USD+in+GBP&btnG=Google+Search&sa=N&tab=wg">Groups</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://news.google.com/news?q=3.5+USD+in+GBP&btnG=Google+Search&sa=N&tab=wn">News</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://froogle.google.com/froogle?q=3.5+USD+in+GBP&btnG=Google+Search&sa=N&tab=wf">Froogle</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class=q href="http://maps.google.com/maps?q=3.5+USD+in+GBP&btnG=Google+Search&sa=N&tab=wl">Maps</a>&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="/intl/en/options/" class=q >more&nbsp;&raquo;</a></b></font></td></tr></table></td></tr><tr><td><table border=0 cellpadding=0 cellspacing=0><tr><td nowrap><input type=hidden name=hl value="en"><input type=hidden name=lr value=""><input type=hidden name=ie value="ISO-8859-1"><input type=text name=q size=41 maxlength=2048 value="3.5 USD in GBP" title="Search"><font size=-1> <input type=submit name="btnG" value="Search"><span id=hf></span></font></td><td nowrap><font size=-2>&nbsp;&nbsp;<a href=/advanced_search?q=3.5+USD+in+GBP&hl=en&lr=&ie=UTF-8>Advanced Search</a><br>&nbsp;&nbsp;<a href=/preferences?q=3.5+USD+in+GBP&hl=en&lr=&ie=UTF-8>Preferences</a>&nbsp;&nbsp;&nbsp;&nbsp;</font></td></tr></table></td></tr></table><table cellpadding=0 cellspacing=0 border=0><tr><td><font size=-1></font></td></tr><tr><td height=7><img width=1 height=1 alt=""></td></tr></table></td></form></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc><img width=1 height=1 alt=""></td></tr></table><table width=100% border=0 cellpadding=0 cellspacing=0 bgcolor=#e5ecf9><tr><td bgcolor=#e5ecf9 width=1% nowrap><font size=+1>&nbsp;<b>Web</b></font>&nbsp;</td></tr></table>
38
+ <script><!--
39
+ var tt = document.gs.q;
40
+ tt.focus();
41
+ // -->
42
+ </script>
43
+ <p><table><tr><td><img src=/images/calc_img.gif></td><td>&nbsp;</td><td nowrap><font size=+1><b>3.5 U.S. dollars = 1.8486241 British pounds</b></td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td><font size=-1><nobr>Rates provided for information only - <a href="/intl/en/help/currency_disclaimer.html">see disclaimer</a>.</nobr>&nbsp;<a href=/intl/en/help/features.html#currency>More about currency conversion.</a></td></tr></table><br><table><tr><td><font size=+0>Search for documents containing the terms <a href=/search?hl=en&lr=&ie=UTF-8&q=%2B3.5+USD+in+GBP&nocalc=1><b><i>3.5 USD in GBP</i></b></a>.</td></tr></table><br><br><br clear=all><center><p><hr class=z><table width=100% border=0 cellpadding=0 cellspacing=0><tr><td bgcolor=#3366cc colspan=2><img width=1 height=1 alt=""></td></tr></table><table width=100% cellpadding=2 cellspacing=0 border=0><tr><td align=center class=t><font size=-1><a href="/">Google&nbsp;Home</a> - <a href="/intl/en/ads/">Advertising&nbsp;Programs</a> - <a href=/intl/en/services/>Business Solutions</a> - <a href=/intl/en/about.html>About Google</a></font></table><br><font size=-1 class=p>&copy;2006 Google</font></center></body></html>
@@ -0,0 +1,135 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <base href="http://raa.ruby-lang.org/">
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6
+ <meta name="Author" content="ruby-lang.org">
7
+ <meta http-equiv="content-style-type" content="text/css">
8
+ <link rev="made" href="mailto:raa-admin@ruby-lang.org">
9
+ <link rel="home" href="http://raa.ruby-lang.org/">
10
+ <link rel="index" href="index.html">
11
+ <link rel="search" href="search.rhtml">
12
+ <link rel="glossary" href="all.html">
13
+ <link rel="SHORTCUT ICON" href="/favicon.ico">
14
+ <link rel="stylesheet" href="raa.css" type="text/css" media="all">
15
+
16
+ <title>RAA - <l:name>highline</l:name></title>
17
+ </head>
18
+
19
+ <body>
20
+ <div class="header">
21
+ <h1>RAA - highline</h1>
22
+ </div>
23
+
24
+ <form method="get" action="search.rhtml">
25
+ <div class="header-searchbox">
26
+ <input name="search" type="text" size="20" maxlength="63"><input type="submit" value="Search"><br>
27
+ <a href="index.html#search">advanced search</a>
28
+ </div>
29
+ </form>
30
+
31
+
32
+ <p class="caption">
33
+ highline / <l:current_version>1.2.0</l:current_version>
34
+ </p>
35
+
36
+ <table class="entry">
37
+
38
+ <tr><th>Short description: </th>
39
+ <td><l:short_description>A high-level line oriented interface
40
+ toolkit.</l:short_description></td>
41
+ </tr>
42
+ <tr><th>Category: </th>
43
+ <td><l:category><a href="cat.rhtml?category_major=Library">Library</a>/<a
44
+ href="cat.rhtml?category_major=Library;category_minor=TUI">TUI</a></l:category></td>
45
+ </tr>
46
+ <tr><th>Status: </th>
47
+ <td>Production/Stable</td>
48
+ </tr>
49
+ <tr><th>Created: </th>
50
+ <td>2005-05-21 01:14:44 GMT</td>
51
+ </tr>
52
+ <tr>
53
+ <th>Last update: </th>
54
+ <td>2006-03-23 04:28:57 GMT</td>
55
+ </tr>
56
+ <tr><th>Owner: </th>
57
+ <td><a href="mailto:james@grayproductions.net"><l:owner>James Edward Gray
58
+ II</l:owner></a>
59
+ (<a href="owner.rhtml?id=1679">Projects of this owner</a>)</td>
60
+ </tr>
61
+ <tr><th>Homepage: </th>
62
+ <td><a
63
+ href="http://highline.rubyforge.org/"><l:homepage>http://highline.rubyforge.org/</l:homepage></a></td>
64
+ </tr>
65
+ <tr><th>Download: </th>
66
+ <td>
67
+ <a href="http://rubyforge.org/frs/?group_id=683">http://rubyforge.org/frs/?group_id=683</a>
68
+
69
+ </td>
70
+ </tr>
71
+
72
+ <tr><th>License: </th>
73
+ <td><l:license>Ruby's</l:license></td>
74
+ </tr>
75
+ <tr><th>Dependency: </th>
76
+ <td colspan='5'>
77
+ <table>
78
+
79
+ <tr width="100%">
80
+ <td nowrap>Requires:</td>
81
+ <td nowrap>
82
+
83
+ termios/0.9.4
84
+
85
+ </td>
86
+ <td width="100%">For character reading. (Optional--will work without it.)</td>
87
+ </tr>
88
+
89
+ </table>
90
+ </td>
91
+ </tr>
92
+ <tr><th>Description: </th>
93
+ <td><p>HighLine was designed to ease the tedious tasks of doing console input and output with low-level methods like gets() and puts(). HighLine provides a robust system for requesting data from a user, without needing to code all the error checking and validation rules and without needing to convert the typed Strings into what your program really needs. Just tell HighLine what you're after, and let it do all the work.</p>
94
+ </td>
95
+ </tr>
96
+
97
+ <tr><th>Versions: </th>
98
+ <td>
99
+ <l:version_history>[<a href="project/highline/1.2.0">1.2.0</a> (2006-03-23)]
100
+
101
+ [<a href="project/highline/1.0.2">1.0.2</a> (2006-02-20)]
102
+
103
+ [<a href="project/highline/1.0.1">1.0.1</a> (2005-07-07)]
104
+
105
+ [<a href="project/highline/1.0.0">1.0.0</a> (2005-07-07)]
106
+
107
+ [<a href="project/highline/0.6.1">0.6.1</a> (2005-05-26)]
108
+
109
+ [<a href="project/highline/0.6.0">0.6.0</a>
110
+ (2005-05-21)]</l:version_history>
111
+
112
+ </td>
113
+ </tr>
114
+
115
+ </table>
116
+
117
+ <p class="caption">
118
+ <a href="list.rhtml?name=highline">Edit this project (for project owner)</a>
119
+ </p>
120
+
121
+ <p class="caption">
122
+ <a href="index.html">back to RAA top</a>
123
+ </p>
124
+
125
+ <div class="footer">
126
+ <hr>
127
+ <address>
128
+ For all questions or comments, or if you have any inquiries about this page, contact <a title="Send Feedback for RAA" href="mailto:raa-admin@ruby-lang.org">raa-admin@ruby-lang.org</a>.
129
+ </address>
130
+ </div>
131
+
132
+ </body>
133
+ </html>
134
+
135
+