Module: GDF
- Defined in:
- lib/graphs/gdf.rb
Overview
GDF-related functions see guess.wikispot.org/The_GUESS_.gdf_format
Constant Summary collapse
- NODEDEF =
Node fields definition
'nodedef>'
- EDGEDEF =
Edge fields definition
'edgedef>'
- PREDEFINED_NODE_PROPS =
Non-string predefined node properties
{ 'x' => 'float', 'y' => 'float', 'visible' => 'boolean', 'fixed' => 'boolean', 'style' => 'int', 'width' => 'float', 'height' => 'float' }
- PREDEFINED_EDGE_PROPS =
Non-string predefined edge properties
{ 'visible' => 'boolean', 'weight' => 'float', 'width' => 'float', 'directed' => 'boolean', 'labelvisible' => 'boolean' }
Class Method Summary collapse
-
.load(filename) ⇒ Object
Loads a GDF file and return a new Graph object.
-
.parse(content) ⇒ Object
Parse some GDF text and return a new Graph object.
-
.unparse(graph, opts = nil) ⇒ String
Return a GDF String which describe the given Graph.
Class Method Details
.load(filename) ⇒ Object
Loads a GDF file and return a new Graph object
62 63 64 |
# File 'lib/graphs/gdf.rb', line 62 def self.load(filename) self.parse(File.read(filename)) end |
.parse(content) ⇒ Object
Parse some GDF text and return a new Graph object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/graphs/gdf.rb', line 70 def self.parse(content) if (content.nil? || content.length == 0) return Graph.new([],[]) end fields_split = /[\t ]*,[\t ]*/ nodedef_len, edgedef_len = NODEDEF.length, EDGEDEF.length current_def = nil nodes, edges = [], [] current_set = nil content.each_line do |line| line.strip! is_nodedef = line.start_with? NODEDEF is_edgedef = !is_nodedef && line.start_with?(EDGEDEF) if is_nodedef || is_edgedef line.slice!(0, is_nodedef ? nodedef_len : edgedef_len) line.strip! defaults = is_nodedef ? PREDEFINED_NODE_PROPS : PREDEFINED_EDGE_PROPS current_def = line.split(fields_split).map do |l| read_def(l, defaults) end current_set = is_nodedef ? nodes : edges else el = {} fields = line.parse_csv || [nil] fields.zip(current_def).each do |val,label_type| label, type, default = label_type el[label] = parse_field(val, type, default) end current_set << el end end Graph.new(nodes, edges) end |
.unparse(graph, opts = nil) ⇒ String
Return a GDF String which describe the given Graph
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/graphs/gdf.rb', line 118 def self.unparse(graph, opts=nil) # nodes gdf_s = NODEDEF if (graph.nodes.length == 0) return gdf_s end keys = graph.nodes[0].keys nodedef = keys.map { |k| [k, self.get_type(graph.nodes[0][k], opts)] } gdf_s += (nodedef.map {|nd| nd.join(' ')}).join(',') + "\n" graph.nodes.each do |n| gdf_s += n.values.to_csv end # edges gdf_s += EDGEDEF return gdf_s if graph.edges.empty? keys = graph.edges[0].keys edgedef = keys.map { |k| [k, self.get_type(graph.edges[0][k], opts)] } gdf_s += (edgedef.map {|ed| ed.join(' ')}).join(',') + "\n" graph.edges.each do |e| gdf_s += e.values.to_csv end gdf_s end |