ruby-graphviz 0.9.18 → 0.9.19
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/AUTHORS +1 -0
- data/README.rdoc +12 -0
- data/examples/dot/this_crach_with_dot_2.20.dot +24 -0
- data/examples/sample57.rb +3 -2
- data/examples/sample58.rb +33 -0
- data/lib/graphviz.rb +34 -3
- data/lib/graphviz/constants.rb +3 -2
- data/lib/graphviz/edge.rb +15 -3
- data/lib/graphviz/graphml.rb +3 -2
- data/lib/graphviz/node.rb +10 -3
- metadata +6 -7
- data/lib/src/html_string_parser.gv +0 -43
- data/lib/src/html_string_parser.rb +0 -422
- data/lib/src/html_string_parser.rl +0 -43
data/AUTHORS
CHANGED
data/README.rdoc
CHANGED
@@ -16,6 +16,18 @@ Interface to the GraphViz graphing tool
|
|
16
16
|
|
17
17
|
== CHANGELOG
|
18
18
|
|
19
|
+
=== 0.9.19 :
|
20
|
+
* Add strict digraph support (by Jonas Elfström) (see sample58.rb)
|
21
|
+
g = GraphViz.new(:G, :type => "strict digraph")
|
22
|
+
# or
|
23
|
+
g = GraphViz.new(:G, :type => "digraph", :strict => true)
|
24
|
+
# or
|
25
|
+
g = GraphViz.digraph(:G, :strict => true)
|
26
|
+
# or
|
27
|
+
g = GraphViz.strict_digraph(:G)
|
28
|
+
* Add GraphViz#root_graph, Node#root_graph, Edge#root_graph
|
29
|
+
* The GraphML parser now accept a graphml file or string
|
30
|
+
|
19
31
|
=== 0.9.18 :
|
20
32
|
* JRuby bug correction (by Nigel Thorne)
|
21
33
|
* Fix autoload problem for Rubinius (by Rolf Timmermans)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
graph A
|
2
|
+
{
|
3
|
+
graph [nodesep="0.10", size="7,5", bb="0,0,737,832"];
|
4
|
+
node [fontsize="12.00", shape=circle, height = 0.4 width = 0.4 fixedsize="true"];
|
5
|
+
779 -- 780 [label = 6.5 style = "bold" ];
|
6
|
+
522 -- 523 [label = 6.2 style = "bold" ];
|
7
|
+
527 -- 528 [label = 6.0 style = "bold" ];
|
8
|
+
752 -- 753 [label = 5.1 style = "solid"];
|
9
|
+
576 -- 577 [label = 5.1 style = "solid"];
|
10
|
+
578 -- 579 [label = 4.8 style = "dashed"];
|
11
|
+
757 -- 758 [label = 4.6 style = "dashed"];
|
12
|
+
696 -- 697 [label = 4.5 style = "dashed"];
|
13
|
+
542 -- 543 [label = 4.4 style = "dashed"];
|
14
|
+
723 -- 724 [label = 4.4 style = "dashed"];
|
15
|
+
495 -- 496 [label = 4.4 style = "dashed"];
|
16
|
+
459 -- 460 [label = 4.3 style = "dashed"];
|
17
|
+
784 -- 785 [label = 4.2 style = "dashed"];
|
18
|
+
518 -- 519 [label = 4.2 style = "dashed"];
|
19
|
+
894 -- 895 [label = 4.1 style = "dashed"];
|
20
|
+
435 -- 436 [label = 4.1 style = "dashed"];
|
21
|
+
322 -- 323 [label = 4.1 style = "dashed"];
|
22
|
+
545 -- 546 [label = 4.1 style = "dashed"];
|
23
|
+
513 -- 514 [label = 4.0 style = "dashed"];
|
24
|
+
}
|
data/examples/sample57.rb
CHANGED
@@ -2,5 +2,6 @@ $:.unshift( "../lib" )
|
|
2
2
|
|
3
3
|
require 'graphviz/graphml'
|
4
4
|
|
5
|
-
|
6
|
-
g.
|
5
|
+
graphml = File.join( File.dirname( File.expand_path( __FILE__ ) ), "graphml", "cluster.graphml" )
|
6
|
+
g = GraphViz::GraphML.new( graphml )
|
7
|
+
g.graph.output( :png => "#{$0}.png" )
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# By Jonas Elfström - http://github.com/jonelf
|
4
|
+
$:.unshift( "../lib" )
|
5
|
+
require 'graphviz'
|
6
|
+
|
7
|
+
@min_level=1
|
8
|
+
@max_level=12
|
9
|
+
@max_depth=10
|
10
|
+
start_level=6
|
11
|
+
|
12
|
+
@g = GraphViz.new(:G, :type => "strict digraph")
|
13
|
+
# or @g = GraphViz.new(:G, :type => "digraph", :strict => true)
|
14
|
+
# or @g = GraphViz.digraph(:G, :strict => true)
|
15
|
+
# or @g = GraphViz.strict_digraph(:G)
|
16
|
+
|
17
|
+
def add_node(level, depth, parent)
|
18
|
+
if depth<@max_depth
|
19
|
+
current=[level, depth].join(",")
|
20
|
+
|
21
|
+
sub=level<=>@min_level
|
22
|
+
add=@max_level<=>level
|
23
|
+
add_node(level-sub, depth+1, current)
|
24
|
+
add_node(level+add, depth+1, current)
|
25
|
+
|
26
|
+
@g.add_node(current).label=level.to_s
|
27
|
+
@g.add_edge(parent, current) unless parent=="00"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
add_node(start_level, 0, "00")
|
32
|
+
|
33
|
+
@g.output( :png => "#{$0}.png" )
|
data/lib/graphviz.rb
CHANGED
@@ -479,7 +479,8 @@ class GraphViz
|
|
479
479
|
|
480
480
|
@output = hOutput if hOutput.size > 0
|
481
481
|
|
482
|
-
|
482
|
+
xStict = ((@strict && @oGraphType == "digraph") ? "strict " : "")
|
483
|
+
xDOTScript = ("#{xStict}#{@oGraphType} #{GraphViz.escape(@name)} {\n" << xDOTScript).gsub( "\0", "" )
|
483
484
|
|
484
485
|
xOutputString = (@filename == String ||
|
485
486
|
@output.any? {|format, file| file == String })
|
@@ -599,6 +600,13 @@ class GraphViz
|
|
599
600
|
@oParentGraph
|
600
601
|
end
|
601
602
|
|
603
|
+
#
|
604
|
+
# Return the root graph
|
605
|
+
#
|
606
|
+
def root_graph
|
607
|
+
return( (self.pg.nil?) ? self : self.pg.root_graph )
|
608
|
+
end
|
609
|
+
|
602
610
|
def self.commonGraph( o1, o2 ) #:nodoc:
|
603
611
|
g1 = o1.pg
|
604
612
|
g2 = o2.pg
|
@@ -685,10 +693,10 @@ class GraphViz
|
|
685
693
|
#
|
686
694
|
# Options :
|
687
695
|
# * :output : Output format (Constants::FORMATS) (default : dot)
|
688
|
-
# * :file : Output file name (default :
|
696
|
+
# * :file : Output file name (default : nil)
|
689
697
|
# * :use : Program to use (Constants::PROGRAMS) (default : dot)
|
690
698
|
# * :path : Program PATH
|
691
|
-
# * :parent : Parent graph (default :
|
699
|
+
# * :parent : Parent graph (default : nil)
|
692
700
|
# * :type : Graph type (Constants::GRAPHTYPE) (default : digraph)
|
693
701
|
# * :errors : DOT error level (default 1)
|
694
702
|
# * 0 = Error + Warning
|
@@ -705,6 +713,7 @@ class GraphViz
|
|
705
713
|
@extlibs = @@extlibs
|
706
714
|
@output = {}
|
707
715
|
@nothugly = false
|
716
|
+
@strict = false
|
708
717
|
|
709
718
|
@elements_order = GraphViz::Elements::new()
|
710
719
|
|
@@ -744,6 +753,8 @@ class GraphViz
|
|
744
753
|
@oGraphType = xValue.to_s
|
745
754
|
when "path"
|
746
755
|
@path = xValue.split( "," ).map{ |x| x.strip }
|
756
|
+
when "strict"
|
757
|
+
@strict = (xValue ? true : false)
|
747
758
|
when "errors"
|
748
759
|
@errors = xValue
|
749
760
|
when "extlibs"
|
@@ -756,13 +767,33 @@ class GraphViz
|
|
756
767
|
yield( self ) if( block )
|
757
768
|
end
|
758
769
|
|
770
|
+
#
|
771
|
+
# Create a new undirected graph
|
772
|
+
#
|
773
|
+
# See also GraphViz::new
|
774
|
+
#
|
759
775
|
def self.graph( xGraphName, hOpts = {}, &block )
|
760
776
|
new( xGraphName, hOpts.symbolize_keys.merge( {:type => "graph"} ), &block )
|
761
777
|
end
|
778
|
+
|
779
|
+
#
|
780
|
+
# Create a new directed graph
|
781
|
+
#
|
782
|
+
# See also GraphViz::new
|
783
|
+
#
|
762
784
|
def self.digraph( xGraphName, hOpts = {}, &block )
|
763
785
|
new( xGraphName, hOpts.symbolize_keys.merge( {:type => "digraph"} ), &block )
|
764
786
|
end
|
765
787
|
|
788
|
+
#
|
789
|
+
# Create a new strict directed graph
|
790
|
+
#
|
791
|
+
# See also GraphViz::new
|
792
|
+
#
|
793
|
+
def self.strict_digraph( xGraphName, hOpts = {}, &block )
|
794
|
+
new( xGraphName, hOpts.symbolize_keys.merge( {:type => "digraph", :strict => true} ), &block )
|
795
|
+
end
|
796
|
+
|
766
797
|
#
|
767
798
|
# Escape a string to be acceptable as a node name in a graphviz input file
|
768
799
|
#
|
data/lib/graphviz/constants.rb
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
# C => cluster
|
41
41
|
#
|
42
42
|
module Constants
|
43
|
-
RGV_VERSION = "0.9.
|
43
|
+
RGV_VERSION = "0.9.19"
|
44
44
|
|
45
45
|
## Const: Output formats
|
46
46
|
FORMATS = [
|
@@ -103,7 +103,8 @@ module Constants
|
|
103
103
|
## Const: graphs type
|
104
104
|
GRAPHTYPE = [
|
105
105
|
"digraph",
|
106
|
-
"graph"
|
106
|
+
"graph",
|
107
|
+
"strict digraph"
|
107
108
|
]
|
108
109
|
|
109
110
|
def self.getAttrsFor( x )
|
data/lib/graphviz/edge.rb
CHANGED
@@ -35,7 +35,7 @@ class GraphViz
|
|
35
35
|
# * vNodeTwo : Second node (can be a GraphViz::Node or a node ID)
|
36
36
|
# * oGParrent : Graph
|
37
37
|
#
|
38
|
-
def initialize( vNodeOne, vNodeTwo, oGParrent
|
38
|
+
def initialize( vNodeOne, vNodeTwo, oGParrent )
|
39
39
|
@xNodeOne, @xNodeOnePort = getNodeNameAndPort( vNodeOne )
|
40
40
|
# if vNodeOne.class == String
|
41
41
|
# @xNodeOne = vNodeOne
|
@@ -64,7 +64,8 @@ class GraphViz
|
|
64
64
|
GraphViz.escape(@xNodeOne, true) + ":#{@xNodeOnePort}"
|
65
65
|
end
|
66
66
|
end
|
67
|
-
|
67
|
+
alias :tail_node :node_one
|
68
|
+
|
68
69
|
# Return the node two as string (so with port if any)
|
69
70
|
def node_two( with_port = true )
|
70
71
|
if @xNodeTwoPort.nil? or with_port == false
|
@@ -73,7 +74,7 @@ class GraphViz
|
|
73
74
|
GraphViz.escape(@xNodeTwo, true) + ":#{@xNodeTwoPort}"
|
74
75
|
end
|
75
76
|
end
|
76
|
-
|
77
|
+
alias :head_node :node_two
|
77
78
|
#
|
78
79
|
# Return the index of the edge
|
79
80
|
#
|
@@ -120,6 +121,17 @@ class GraphViz
|
|
120
121
|
alias :- :<< #:nodoc:
|
121
122
|
alias :>> :<< #:nodoc:
|
122
123
|
|
124
|
+
#
|
125
|
+
# Return the root graph
|
126
|
+
#
|
127
|
+
def root_graph
|
128
|
+
return( (self.pg.nil?) ? nil : self.pg.root_graph )
|
129
|
+
end
|
130
|
+
|
131
|
+
def pg #:nodoc:
|
132
|
+
@oGParrent
|
133
|
+
end
|
134
|
+
|
123
135
|
#
|
124
136
|
# Set edge attributs
|
125
137
|
#
|
data/lib/graphviz/graphml.rb
CHANGED
@@ -35,8 +35,9 @@ class GraphViz
|
|
35
35
|
'undirected' => :graph
|
36
36
|
}
|
37
37
|
|
38
|
-
def initialize(
|
39
|
-
|
38
|
+
def initialize( file_or_str )
|
39
|
+
data = ((File.file?( file_or_str )) ? File::new(file_or_str) : file_or_str)
|
40
|
+
@xmlDoc = REXML::Document::new( data )
|
40
41
|
@attributs = {
|
41
42
|
:nodes => {},
|
42
43
|
:edges => {},
|
data/lib/graphviz/node.rb
CHANGED
@@ -31,7 +31,7 @@ class GraphViz
|
|
31
31
|
# * xNodeName : ID of the node
|
32
32
|
# * oGParrent : Graph
|
33
33
|
#
|
34
|
-
def initialize( xNodeName, oGParrent
|
34
|
+
def initialize( xNodeName, oGParrent )
|
35
35
|
@xNodeName = xNodeName
|
36
36
|
@oGParrent = oGParrent
|
37
37
|
@oAttrNode = GraphViz::Attrs::new( nil, "node", NODESATTRS )
|
@@ -54,7 +54,7 @@ class GraphViz
|
|
54
54
|
end
|
55
55
|
|
56
56
|
#
|
57
|
-
# Return the index
|
57
|
+
# Return the node index
|
58
58
|
#
|
59
59
|
def index
|
60
60
|
@index
|
@@ -62,7 +62,14 @@ class GraphViz
|
|
62
62
|
def index=(i) #:nodoc:
|
63
63
|
@index = i if @index == nil
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
|
+
#
|
67
|
+
# Return the root graph
|
68
|
+
#
|
69
|
+
def root_graph
|
70
|
+
return( (self.pg.nil?) ? nil : self.pg.root_graph )
|
71
|
+
end
|
72
|
+
|
66
73
|
#
|
67
74
|
# Set value +xAttrValue+ to the node attribut +xAttrName+
|
68
75
|
#
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-graphviz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 19
|
10
|
+
version: 0.9.19
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gregoire Lejeune
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-11-02 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- examples/dot/siblings.dot
|
59
59
|
- examples/dot/test.dot
|
60
60
|
- examples/dot/test_parse.rb
|
61
|
+
- examples/dot/this_crach_with_dot_2.20.dot
|
61
62
|
- examples/dot/unix.dot
|
62
63
|
- examples/graphml/attributes.ext.graphml
|
63
64
|
- examples/graphml/attributes.graphml
|
@@ -127,6 +128,7 @@ files:
|
|
127
128
|
- examples/sample55.rb
|
128
129
|
- examples/sample56.rb
|
129
130
|
- examples/sample57.rb
|
131
|
+
- examples/sample58.rb
|
130
132
|
- examples/sample99.rb
|
131
133
|
- examples/sdlshapes/README
|
132
134
|
- examples/sdlshapes/sdl.ps
|
@@ -162,9 +164,6 @@ files:
|
|
162
164
|
- lib/graphviz/utils.rb
|
163
165
|
- lib/graphviz/xml.rb
|
164
166
|
- lib/graphviz.rb
|
165
|
-
- lib/src/html_string_parser.gv
|
166
|
-
- lib/src/html_string_parser.rb
|
167
|
-
- lib/src/html_string_parser.rl
|
168
167
|
- test/support.rb
|
169
168
|
- test/test_examples.rb
|
170
169
|
- test/test_init.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
digraph html_string_lexer {
|
2
|
-
rankdir=LR;
|
3
|
-
node [ shape = point ];
|
4
|
-
ENTRY;
|
5
|
-
en_22;
|
6
|
-
node [ shape = circle, height = 0.2 ];
|
7
|
-
node [ fixedsize = true, height = 0.65, shape = doublecircle ];
|
8
|
-
22;
|
9
|
-
node [ shape = circle ];
|
10
|
-
1 -> 2 [ label = "'/'" ];
|
11
|
-
1 -> 10 [ label = "'B'" ];
|
12
|
-
1 -> 13 [ label = "'F'" ];
|
13
|
-
1 -> 18 [ label = "'b'" ];
|
14
|
-
1 -> 19 [ label = "'f'" ];
|
15
|
-
2 -> 3 [ label = "'F'" ];
|
16
|
-
2 -> 7 [ label = "'f'" ];
|
17
|
-
3 -> 4 [ label = "'O'" ];
|
18
|
-
4 -> 5 [ label = "'N'" ];
|
19
|
-
5 -> 6 [ label = "'T'" ];
|
20
|
-
6 -> 22 [ label = "'>' / last3, initts" ];
|
21
|
-
7 -> 8 [ label = "'o'" ];
|
22
|
-
8 -> 9 [ label = "'n'" ];
|
23
|
-
9 -> 6 [ label = "'t'" ];
|
24
|
-
10 -> 11 [ label = "'R'" ];
|
25
|
-
11 -> 12 [ label = "'\\t'..'\\r', SP" ];
|
26
|
-
11 -> 22 [ label = "'>' / last1, initts" ];
|
27
|
-
12 -> 22 [ label = "'>' / last1, initts" ];
|
28
|
-
12 -> 12 [ label = "DEF" ];
|
29
|
-
13 -> 14 [ label = "'O'" ];
|
30
|
-
14 -> 15 [ label = "'N'" ];
|
31
|
-
15 -> 16 [ label = "'T'" ];
|
32
|
-
16 -> 17 [ label = "'\\t'..'\\r', SP" ];
|
33
|
-
16 -> 22 [ label = "'>' / last2, initts" ];
|
34
|
-
17 -> 22 [ label = "'>' / last2, initts" ];
|
35
|
-
17 -> 17 [ label = "DEF" ];
|
36
|
-
18 -> 11 [ label = "'r'" ];
|
37
|
-
19 -> 20 [ label = "'o'" ];
|
38
|
-
20 -> 21 [ label = "'n'" ];
|
39
|
-
21 -> 16 [ label = "'t'" ];
|
40
|
-
22 -> 1 [ label = "'<' / ts" ];
|
41
|
-
ENTRY -> 22 [ label = "IN" ];
|
42
|
-
en_22 -> 22 [ label = "main" ];
|
43
|
-
}
|
@@ -1,422 +0,0 @@
|
|
1
|
-
|
2
|
-
# line 1 "html_string_parser.rl"
|
3
|
-
|
4
|
-
# line 20 "html_string_parser.rl"
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# line 9 "html_string_parser.rb"
|
9
|
-
class << self
|
10
|
-
attr_accessor :_html_string_lexer_actions
|
11
|
-
private :_html_string_lexer_actions, :_html_string_lexer_actions=
|
12
|
-
end
|
13
|
-
self._html_string_lexer_actions = [
|
14
|
-
0, 1, 0, 1, 1, 1, 8, 1,
|
15
|
-
9, 2, 2, 3, 2, 2, 4, 2,
|
16
|
-
2, 5, 2, 2, 6, 2, 2, 7
|
17
|
-
]
|
18
|
-
|
19
|
-
class << self
|
20
|
-
attr_accessor :_html_string_lexer_key_offsets
|
21
|
-
private :_html_string_lexer_key_offsets, :_html_string_lexer_key_offsets=
|
22
|
-
end
|
23
|
-
self._html_string_lexer_key_offsets = [
|
24
|
-
0, 1, 1, 6, 8, 9, 10, 11,
|
25
|
-
12, 13, 14, 15, 16, 20, 21, 22,
|
26
|
-
23, 24, 27, 28, 39, 51, 64, 76,
|
27
|
-
88, 100, 112, 113, 114, 115, 116, 117,
|
28
|
-
118, 119
|
29
|
-
]
|
30
|
-
|
31
|
-
class << self
|
32
|
-
attr_accessor :_html_string_lexer_trans_keys
|
33
|
-
private :_html_string_lexer_trans_keys, :_html_string_lexer_trans_keys=
|
34
|
-
end
|
35
|
-
self._html_string_lexer_trans_keys = [
|
36
|
-
60, 47, 66, 70, 98, 102, 70, 102,
|
37
|
-
79, 78, 84, 62, 111, 110, 116, 82,
|
38
|
-
32, 62, 9, 13, 62, 79, 78, 84,
|
39
|
-
32, 9, 13, 62, 60, 95, 97, 99,
|
40
|
-
108, 101, 103, 110, 111, 115, 116, 47,
|
41
|
-
60, 95, 97, 99, 108, 101, 103, 110,
|
42
|
-
111, 115, 116, 60, 70, 95, 97, 99,
|
43
|
-
102, 108, 101, 103, 110, 111, 115, 116,
|
44
|
-
60, 79, 95, 97, 99, 108, 101, 103,
|
45
|
-
110, 111, 115, 116, 60, 78, 95, 97,
|
46
|
-
99, 108, 101, 103, 110, 111, 115, 116,
|
47
|
-
60, 84, 95, 97, 99, 108, 101, 103,
|
48
|
-
110, 111, 115, 116, 60, 62, 95, 97,
|
49
|
-
99, 108, 101, 103, 110, 111, 115, 116,
|
50
|
-
111, 110, 116, 62, 114, 111, 110, 116,
|
51
|
-
0
|
52
|
-
]
|
53
|
-
|
54
|
-
class << self
|
55
|
-
attr_accessor :_html_string_lexer_single_lengths
|
56
|
-
private :_html_string_lexer_single_lengths, :_html_string_lexer_single_lengths=
|
57
|
-
end
|
58
|
-
self._html_string_lexer_single_lengths = [
|
59
|
-
1, 0, 5, 2, 1, 1, 1, 1,
|
60
|
-
1, 1, 1, 1, 2, 1, 1, 1,
|
61
|
-
1, 1, 1, 5, 6, 7, 6, 6,
|
62
|
-
6, 6, 1, 1, 1, 1, 1, 1,
|
63
|
-
1, 1
|
64
|
-
]
|
65
|
-
|
66
|
-
class << self
|
67
|
-
attr_accessor :_html_string_lexer_range_lengths
|
68
|
-
private :_html_string_lexer_range_lengths, :_html_string_lexer_range_lengths=
|
69
|
-
end
|
70
|
-
self._html_string_lexer_range_lengths = [
|
71
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
72
|
-
0, 0, 0, 0, 1, 0, 0, 0,
|
73
|
-
0, 1, 0, 3, 3, 3, 3, 3,
|
74
|
-
3, 3, 0, 0, 0, 0, 0, 0,
|
75
|
-
0, 0
|
76
|
-
]
|
77
|
-
|
78
|
-
class << self
|
79
|
-
attr_accessor :_html_string_lexer_index_offsets
|
80
|
-
private :_html_string_lexer_index_offsets, :_html_string_lexer_index_offsets=
|
81
|
-
end
|
82
|
-
self._html_string_lexer_index_offsets = [
|
83
|
-
0, 2, 3, 9, 12, 14, 16, 18,
|
84
|
-
20, 22, 24, 26, 28, 32, 34, 36,
|
85
|
-
38, 40, 43, 45, 54, 64, 75, 85,
|
86
|
-
95, 105, 115, 117, 119, 121, 123, 125,
|
87
|
-
127, 129
|
88
|
-
]
|
89
|
-
|
90
|
-
class << self
|
91
|
-
attr_accessor :_html_string_lexer_indicies
|
92
|
-
private :_html_string_lexer_indicies, :_html_string_lexer_indicies=
|
93
|
-
end
|
94
|
-
self._html_string_lexer_indicies = [
|
95
|
-
1, 0, 0, 4, 5, 6, 7, 8,
|
96
|
-
0, 9, 10, 0, 11, 0, 12, 0,
|
97
|
-
13, 0, 14, 0, 15, 0, 16, 0,
|
98
|
-
13, 0, 17, 0, 18, 19, 18, 0,
|
99
|
-
19, 18, 20, 0, 21, 0, 22, 0,
|
100
|
-
23, 23, 0, 24, 23, 26, 0, 0,
|
101
|
-
0, 0, 0, 0, 0, 25, 27, 26,
|
102
|
-
0, 0, 0, 0, 0, 0, 0, 25,
|
103
|
-
26, 28, 0, 0, 0, 29, 0, 0,
|
104
|
-
0, 0, 25, 26, 30, 0, 0, 0,
|
105
|
-
0, 0, 0, 0, 25, 26, 31, 0,
|
106
|
-
0, 0, 0, 0, 0, 0, 25, 26,
|
107
|
-
32, 0, 0, 0, 0, 0, 0, 0,
|
108
|
-
25, 26, 33, 0, 0, 0, 0, 0,
|
109
|
-
0, 0, 25, 34, 0, 35, 0, 36,
|
110
|
-
0, 37, 0, 17, 0, 38, 0, 39,
|
111
|
-
0, 22, 0, 0
|
112
|
-
]
|
113
|
-
|
114
|
-
class << self
|
115
|
-
attr_accessor :_html_string_lexer_trans_targs
|
116
|
-
private :_html_string_lexer_trans_targs, :_html_string_lexer_trans_targs=
|
117
|
-
end
|
118
|
-
self._html_string_lexer_trans_targs = [
|
119
|
-
1, 2, 0, 0, 3, 11, 14, 30,
|
120
|
-
31, 4, 8, 5, 6, 7, 1, 9,
|
121
|
-
10, 12, 13, 1, 15, 16, 17, 18,
|
122
|
-
19, 19, 20, 21, 22, 26, 23, 24,
|
123
|
-
25, 19, 27, 28, 29, 1, 32, 33
|
124
|
-
]
|
125
|
-
|
126
|
-
class << self
|
127
|
-
attr_accessor :_html_string_lexer_trans_actions
|
128
|
-
private :_html_string_lexer_trans_actions, :_html_string_lexer_trans_actions=
|
129
|
-
end
|
130
|
-
self._html_string_lexer_trans_actions = [
|
131
|
-
21, 0, 7, 5, 0, 0, 0, 0,
|
132
|
-
0, 0, 0, 0, 0, 0, 18, 0,
|
133
|
-
0, 0, 0, 9, 0, 0, 0, 0,
|
134
|
-
15, 21, 0, 0, 0, 0, 0, 0,
|
135
|
-
0, 12, 0, 0, 0, 12, 0, 0
|
136
|
-
]
|
137
|
-
|
138
|
-
class << self
|
139
|
-
attr_accessor :_html_string_lexer_to_state_actions
|
140
|
-
private :_html_string_lexer_to_state_actions, :_html_string_lexer_to_state_actions=
|
141
|
-
end
|
142
|
-
self._html_string_lexer_to_state_actions = [
|
143
|
-
1, 0, 0, 0, 0, 0, 0, 0,
|
144
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
145
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
146
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
147
|
-
0, 0
|
148
|
-
]
|
149
|
-
|
150
|
-
class << self
|
151
|
-
attr_accessor :_html_string_lexer_from_state_actions
|
152
|
-
private :_html_string_lexer_from_state_actions, :_html_string_lexer_from_state_actions=
|
153
|
-
end
|
154
|
-
self._html_string_lexer_from_state_actions = [
|
155
|
-
3, 0, 0, 0, 0, 0, 0, 0,
|
156
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
157
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
158
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
159
|
-
0, 0
|
160
|
-
]
|
161
|
-
|
162
|
-
class << self
|
163
|
-
attr_accessor :_html_string_lexer_eof_trans
|
164
|
-
private :_html_string_lexer_eof_trans, :_html_string_lexer_eof_trans=
|
165
|
-
end
|
166
|
-
self._html_string_lexer_eof_trans = [
|
167
|
-
0, 3, 4, 4, 4, 4, 4, 4,
|
168
|
-
4, 4, 4, 4, 4, 4, 4, 4,
|
169
|
-
4, 4, 4, 3, 4, 4, 4, 4,
|
170
|
-
4, 4, 4, 4, 4, 4, 4, 4,
|
171
|
-
4, 4
|
172
|
-
]
|
173
|
-
|
174
|
-
class << self
|
175
|
-
attr_accessor :html_string_lexer_start
|
176
|
-
end
|
177
|
-
self.html_string_lexer_start = 0;
|
178
|
-
class << self
|
179
|
-
attr_accessor :html_string_lexer_first_final
|
180
|
-
end
|
181
|
-
self.html_string_lexer_first_final = 0;
|
182
|
-
class << self
|
183
|
-
attr_accessor :html_string_lexer_error
|
184
|
-
end
|
185
|
-
self.html_string_lexer_error = -1;
|
186
|
-
|
187
|
-
class << self
|
188
|
-
attr_accessor :html_string_lexer_en_main
|
189
|
-
end
|
190
|
-
self.html_string_lexer_en_main = 0;
|
191
|
-
|
192
|
-
|
193
|
-
# line 23 "html_string_parser.rl"
|
194
|
-
|
195
|
-
# ---------- %
|
196
|
-
|
197
|
-
def test( data )
|
198
|
-
puts "Check : #{data}"
|
199
|
-
data = data.unpack("c*") if(data.is_a?(String))
|
200
|
-
eof = data.length
|
201
|
-
|
202
|
-
|
203
|
-
# line 204 "html_string_parser.rb"
|
204
|
-
begin
|
205
|
-
p ||= 0
|
206
|
-
pe ||= data.length
|
207
|
-
cs = html_string_lexer_start
|
208
|
-
ts = nil
|
209
|
-
te = nil
|
210
|
-
act = 0
|
211
|
-
end
|
212
|
-
|
213
|
-
# line 32 "html_string_parser.rl"
|
214
|
-
|
215
|
-
# line 216 "html_string_parser.rb"
|
216
|
-
begin
|
217
|
-
_klen, _trans, _keys, _acts, _nacts = nil
|
218
|
-
_goto_level = 0
|
219
|
-
_resume = 10
|
220
|
-
_eof_trans = 15
|
221
|
-
_again = 20
|
222
|
-
_test_eof = 30
|
223
|
-
_out = 40
|
224
|
-
while true
|
225
|
-
_trigger_goto = false
|
226
|
-
if _goto_level <= 0
|
227
|
-
if p == pe
|
228
|
-
_goto_level = _test_eof
|
229
|
-
next
|
230
|
-
end
|
231
|
-
end
|
232
|
-
if _goto_level <= _resume
|
233
|
-
_acts = _html_string_lexer_from_state_actions[cs]
|
234
|
-
_nacts = _html_string_lexer_actions[_acts]
|
235
|
-
_acts += 1
|
236
|
-
while _nacts > 0
|
237
|
-
_nacts -= 1
|
238
|
-
_acts += 1
|
239
|
-
case _html_string_lexer_actions[_acts - 1]
|
240
|
-
when 1 then
|
241
|
-
# line 1 "NONE"
|
242
|
-
begin
|
243
|
-
ts = p
|
244
|
-
end
|
245
|
-
# line 246 "html_string_parser.rb"
|
246
|
-
end # from state action switch
|
247
|
-
end
|
248
|
-
if _trigger_goto
|
249
|
-
next
|
250
|
-
end
|
251
|
-
_keys = _html_string_lexer_key_offsets[cs]
|
252
|
-
_trans = _html_string_lexer_index_offsets[cs]
|
253
|
-
_klen = _html_string_lexer_single_lengths[cs]
|
254
|
-
_break_match = false
|
255
|
-
|
256
|
-
begin
|
257
|
-
if _klen > 0
|
258
|
-
_lower = _keys
|
259
|
-
_upper = _keys + _klen - 1
|
260
|
-
|
261
|
-
loop do
|
262
|
-
break if _upper < _lower
|
263
|
-
_mid = _lower + ( (_upper - _lower) >> 1 )
|
264
|
-
|
265
|
-
if data[p] < _html_string_lexer_trans_keys[_mid]
|
266
|
-
_upper = _mid - 1
|
267
|
-
elsif data[p] > _html_string_lexer_trans_keys[_mid]
|
268
|
-
_lower = _mid + 1
|
269
|
-
else
|
270
|
-
_trans += (_mid - _keys)
|
271
|
-
_break_match = true
|
272
|
-
break
|
273
|
-
end
|
274
|
-
end # loop
|
275
|
-
break if _break_match
|
276
|
-
_keys += _klen
|
277
|
-
_trans += _klen
|
278
|
-
end
|
279
|
-
_klen = _html_string_lexer_range_lengths[cs]
|
280
|
-
if _klen > 0
|
281
|
-
_lower = _keys
|
282
|
-
_upper = _keys + (_klen << 1) - 2
|
283
|
-
loop do
|
284
|
-
break if _upper < _lower
|
285
|
-
_mid = _lower + (((_upper-_lower) >> 1) & ~1)
|
286
|
-
if data[p] < _html_string_lexer_trans_keys[_mid]
|
287
|
-
_upper = _mid - 2
|
288
|
-
elsif data[p] > _html_string_lexer_trans_keys[_mid+1]
|
289
|
-
_lower = _mid + 2
|
290
|
-
else
|
291
|
-
_trans += ((_mid - _keys) >> 1)
|
292
|
-
_break_match = true
|
293
|
-
break
|
294
|
-
end
|
295
|
-
end # loop
|
296
|
-
break if _break_match
|
297
|
-
_trans += _klen
|
298
|
-
end
|
299
|
-
end while false
|
300
|
-
_trans = _html_string_lexer_indicies[_trans]
|
301
|
-
end
|
302
|
-
if _goto_level <= _eof_trans
|
303
|
-
cs = _html_string_lexer_trans_targs[_trans]
|
304
|
-
if _html_string_lexer_trans_actions[_trans] != 0
|
305
|
-
_acts = _html_string_lexer_trans_actions[_trans]
|
306
|
-
_nacts = _html_string_lexer_actions[_acts]
|
307
|
-
_acts += 1
|
308
|
-
while _nacts > 0
|
309
|
-
_nacts -= 1
|
310
|
-
_acts += 1
|
311
|
-
case _html_string_lexer_actions[_acts - 1]
|
312
|
-
when 2 then
|
313
|
-
# line 1 "NONE"
|
314
|
-
begin
|
315
|
-
te = p+1
|
316
|
-
end
|
317
|
-
when 3 then
|
318
|
-
# line 12 "html_string_parser.rl"
|
319
|
-
begin
|
320
|
-
act = 1; end
|
321
|
-
when 4 then
|
322
|
-
# line 13 "html_string_parser.rl"
|
323
|
-
begin
|
324
|
-
act = 2; end
|
325
|
-
when 5 then
|
326
|
-
# line 14 "html_string_parser.rl"
|
327
|
-
begin
|
328
|
-
act = 3; end
|
329
|
-
when 6 then
|
330
|
-
# line 15 "html_string_parser.rl"
|
331
|
-
begin
|
332
|
-
act = 4; end
|
333
|
-
when 7 then
|
334
|
-
# line 16 "html_string_parser.rl"
|
335
|
-
begin
|
336
|
-
act = 5; end
|
337
|
-
when 8 then
|
338
|
-
# line 16 "html_string_parser.rl"
|
339
|
-
begin
|
340
|
-
te = p
|
341
|
-
p = p - 1; begin puts "\t =>string" end
|
342
|
-
end
|
343
|
-
when 9 then
|
344
|
-
# line 1 "NONE"
|
345
|
-
begin
|
346
|
-
case act
|
347
|
-
when 1 then
|
348
|
-
begin begin p = ((te))-1; end
|
349
|
-
puts "\t =><BR>" end
|
350
|
-
when 2 then
|
351
|
-
begin begin p = ((te))-1; end
|
352
|
-
puts "\t =><FONT>...</FONT>"end
|
353
|
-
when 3 then
|
354
|
-
begin begin p = ((te))-1; end
|
355
|
-
puts "\t =><FONT>"end
|
356
|
-
when 4 then
|
357
|
-
begin begin p = ((te))-1; end
|
358
|
-
puts "\t =></FONT>"end
|
359
|
-
when 5 then
|
360
|
-
begin begin p = ((te))-1; end
|
361
|
-
puts "\t =>string" end
|
362
|
-
end
|
363
|
-
end
|
364
|
-
# line 365 "html_string_parser.rb"
|
365
|
-
end # action switch
|
366
|
-
end
|
367
|
-
end
|
368
|
-
if _trigger_goto
|
369
|
-
next
|
370
|
-
end
|
371
|
-
end
|
372
|
-
if _goto_level <= _again
|
373
|
-
_acts = _html_string_lexer_to_state_actions[cs]
|
374
|
-
_nacts = _html_string_lexer_actions[_acts]
|
375
|
-
_acts += 1
|
376
|
-
while _nacts > 0
|
377
|
-
_nacts -= 1
|
378
|
-
_acts += 1
|
379
|
-
case _html_string_lexer_actions[_acts - 1]
|
380
|
-
when 0 then
|
381
|
-
# line 1 "NONE"
|
382
|
-
begin
|
383
|
-
ts = nil; end
|
384
|
-
# line 385 "html_string_parser.rb"
|
385
|
-
end # to state action switch
|
386
|
-
end
|
387
|
-
if _trigger_goto
|
388
|
-
next
|
389
|
-
end
|
390
|
-
p += 1
|
391
|
-
if p != pe
|
392
|
-
_goto_level = _resume
|
393
|
-
next
|
394
|
-
end
|
395
|
-
end
|
396
|
-
if _goto_level <= _test_eof
|
397
|
-
if p == eof
|
398
|
-
if _html_string_lexer_eof_trans[cs] > 0
|
399
|
-
_trans = _html_string_lexer_eof_trans[cs] - 1;
|
400
|
-
_goto_level = _eof_trans
|
401
|
-
next;
|
402
|
-
end
|
403
|
-
end
|
404
|
-
end
|
405
|
-
if _goto_level <= _out
|
406
|
-
break
|
407
|
-
end
|
408
|
-
end
|
409
|
-
end
|
410
|
-
|
411
|
-
# line 33 "html_string_parser.rl"
|
412
|
-
end
|
413
|
-
|
414
|
-
# ----------
|
415
|
-
|
416
|
-
test "<BRRR ALIGN=\"LEFT\">"
|
417
|
-
test "<BR ALIGN=\"LEFT\">"
|
418
|
-
test "\\<BR ALIGN=\"LEFT\"\\>"
|
419
|
-
test "simple test"
|
420
|
-
test "<FONT COLOR=\"blue\">"
|
421
|
-
test "</FONT>"
|
422
|
-
test "<font>simple test</font>"
|
@@ -1,43 +0,0 @@
|
|
1
|
-
%%{
|
2
|
-
|
3
|
-
machine html_string_lexer;
|
4
|
-
|
5
|
-
br_tag = '<'('br'|'BR')(space{1,}[^>]*)*'>';
|
6
|
-
font_open_tag = '<'('font'|'FONT')(space{1,}[^>]*)'>';
|
7
|
-
font_close_tag = '</font>'|'</FONT>';
|
8
|
-
font_tag = font_open_tag [^font_close_tag]* font_close_tag;
|
9
|
-
string = any*;
|
10
|
-
|
11
|
-
main := |*
|
12
|
-
br_tag => { puts "\t =><BR>" };
|
13
|
-
font_tag => { puts "\t =><FONT>...</FONT>"};
|
14
|
-
font_open_tag => { puts "\t =><FONT>"};
|
15
|
-
font_close_tag => { puts "\t =></FONT>"};
|
16
|
-
string => { puts "\t =>string" };
|
17
|
-
space;
|
18
|
-
*|;
|
19
|
-
|
20
|
-
}%%
|
21
|
-
|
22
|
-
%% write data;
|
23
|
-
|
24
|
-
# ---------- %
|
25
|
-
|
26
|
-
def test( data )
|
27
|
-
puts "Check : #{data}"
|
28
|
-
data = data.unpack("c*") if(data.is_a?(String))
|
29
|
-
eof = data.length
|
30
|
-
|
31
|
-
%% write init;
|
32
|
-
%% write exec;
|
33
|
-
end
|
34
|
-
|
35
|
-
# ----------
|
36
|
-
|
37
|
-
test "<BRRR ALIGN=\"LEFT\">"
|
38
|
-
test "<BR ALIGN=\"LEFT\">"
|
39
|
-
test "\\<BR ALIGN=\"LEFT\"\\>"
|
40
|
-
test "simple test"
|
41
|
-
test "<FONT COLOR=\"blue\">"
|
42
|
-
test "</FONT>"
|
43
|
-
test "<font>simple test</font>"
|