in GraphLayout/tools/Dot2Graph/AttributeValuePair.cs [136:442]
internal static AttributeValuePair CreateFromsStrings(string attr, string val) {
var av = new AttributeValuePair();
string name = attr.ToLower();
switch (name) {
case "uri":
av.attributeTypeEnum = AttributeTypeEnum.Uri;
av.val = val;
break;
case "constraint":
av.attributeTypeEnum = AttributeTypeEnum.Constraint;
av.val = val != "false";
break;
case "label":
av.attributeTypeEnum = AttributeTypeEnum.Label;
av.val = val;
break;
case "size":
av.attributeTypeEnum = AttributeTypeEnum.Size;
av.val = ParseP2(val);
break;
case "style":
{
Styles styles = new Styles();
av.val = styles;
string[] vals = Split(val);
av.attributeTypeEnum = AttributeTypeEnum.Style;
for (int i = 0; i < vals.Length; ++i)
{
switch (vals[i])
{
case "filled": styles.Add(Style.Filled); break;
case "dashed": styles.Add(Style.Dashed); break;
case "solid": styles.Add(Style.Solid); break;
case "invis":
case "inviz":
case "hidden": styles.Add(Style.Invis); break;
case "bold": styles.Add(Style.Bold); break;
case "diagonals": styles.Add(Style.Diagonals); break;
case "dotted": styles.Add(Style.Dotted); break;
case "rounded": styles.Add(Style.Rounded); break;
default:
int lw;
if (ParseLineWidth(vals[i], out lw)) {
styles.lineWidth = lw;
break;
}
throw new Exception(String.Format("unexpected style '{0}'", val));
}
}
break;
}
case "color":
av.attributeTypeEnum = AttributeTypeEnum.Color;
av.val = val;
break;
case "pos":
av.attributeTypeEnum = AttributeTypeEnum.Pos;
av.val = CreatePosData(val);
break;
case "lp":
av.attributeTypeEnum = AttributeTypeEnum.LabelLocation;
av.val = CreatePosData(val);
break;
case "fontname":
av.attributeTypeEnum = AttributeTypeEnum.Fontname;
av.val = val;
break;
case "fontsize":
av.attributeTypeEnum = AttributeTypeEnum.FontSize;
av.val = (int)TryParseDouble(val, name);
break;
case "rankdir":
av.attributeTypeEnum = AttributeTypeEnum.LayerDirection;
switch(val) {
case "LR": av.val = LayerDirection.LR; break;
case "TB":
case "TD": av.val = LayerDirection.TB; break;
case "RL": av.val = LayerDirection.RL; break;
case "BT": av.val = LayerDirection.BT; break;
default:
throw new Exception("layerdir value \"" + val + "\" is not supported");
}
break;
case "labeldouble":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "bb":
av.attributeTypeEnum = AttributeTypeEnum.BBox;
av.val = CreateBBoxFromString(val);
break;
case "fontcolor":
av.attributeTypeEnum = AttributeTypeEnum.Fontcolor;
av.val = val;
break;
case "margin":
{
// a pair x,y (inches)
av.attributeTypeEnum = AttributeTypeEnum.Margin;
string[] vals = Split(val);
av.val = TryParseDouble(Get(vals, 0), name);
break;
}
case "width":
av.attributeTypeEnum = AttributeTypeEnum.Width;
av.val = TryParseDouble(val, name);
break;
case "height":
av.attributeTypeEnum = AttributeTypeEnum.Height;
av.val = TryParseDouble(val, name);
break;
case "shape":
av.attributeTypeEnum = AttributeTypeEnum.Shape;
val = val.ToLower();
switch(val) {
case "box": av.val = Shape.Box; break;
case "circle": av.val = Shape.Circle; break;
case "ellipse": av.val = Shape.Ellipse; break;
case "plaintext": av.val = Shape.Plaintext; break;
case "point": av.val = Shape.Point; break;
case "record": av.val = Shape.Record; break;
case "mdiamond": av.val = Shape.Mdiamond; break;
case "polygon": av.val = Shape.Polygon; break;
case "doublecircle": av.val = Shape.DoubleCircle; break;
case "house": av.val = Shape.House; break;
case "invhouse": av.val = Shape.InvHouse; break;
case "parallelogram": av.val = Shape.Parallelogram; break;
case "octagon": av.val = Shape.Octagon; break;
case "tripleoctagon": av.val = Shape.TripleOctagon; break;
case "triangle": av.val = Shape.Triangle; break;
case "trapezium": av.val = Shape.Trapezium; break;
case "msquare": av.val = Shape.Msquare; break;
case "diamond": av.val = Shape.Diamond; break;
case "hexagon": av.val = Shape.Hexagon;break;
default: av.val = Shape.Ellipse; break;
}
break;
case "ordering":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "rects": {
av.attributeTypeEnum = AttributeTypeEnum.Rects;
var al = new ArrayList();
av.val = al;
var points = Split(val);
var leftbottom = new P2();
var righttop = new P2();
for (int i = 0; i < points.Length-3; i += 4) {
leftbottom.X = (int)GetNumber(points[i]);
leftbottom.Y = (int)GetNumber(points[i+1]);
righttop.X = (int)GetNumber(points[i+2]);
righttop.Y = (int)GetNumber(points[i+3]);
al.Add(new Rectangle(leftbottom, righttop));
}
}
break;
case "sides":
av.attributeTypeEnum = AttributeTypeEnum.Sides;
av.val = Int32.Parse(val);
break;
case "distortion":
av.attributeTypeEnum = AttributeTypeEnum.Distortion;
av.val = val == "" ? 0.0 : TryParseDouble(val, name);
break;
case "orientation":
av.attributeTypeEnum = AttributeTypeEnum.Orientation;
av.val = val;
break;
case "skew":
av.attributeTypeEnum = AttributeTypeEnum.Skew;
av.val = TryParseDouble(val, name);
break;
case "layer":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "nodesep":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "layersep":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "taillabel":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "ratio":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "minlen":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "splines":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "overlap":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "labeldistance":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "peripheries":
case "fname":
case "subkind":
case "kind":
case "pname":
case "headlabel":
case "samearrowhead":
case "sametail":
case "samehead":
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
case "arrowtail":
av.attributeTypeEnum =AttributeTypeEnum.ArrowTail;
av.val = ParseArrowStyle(val);
break;
case "arrowhead":
av.attributeTypeEnum = AttributeTypeEnum.Arrowhead;
av.val = ParseArrowStyle(val);
break;
case "dir":
av.attributeTypeEnum = AttributeTypeEnum.EdgeDirection;
if (val == "back")
av.val = EdgeDirection.Back;
else if (val == "forward")
av.val = EdgeDirection.Forward;
else if (val == "both")
av.val = EdgeDirection.Both;
else if (val == "none")
av.val = EdgeDirection.None;
else
throw new Exception("unexpected edge direction '" + val + "'");
break;
case "page":
av.attributeTypeEnum = AttributeTypeEnum.Page;
av.val = ParseP2(val);
break;
case "regular":
av.attributeTypeEnum = AttributeTypeEnum.Regular;
av.val = val == "1";
break;
case "center":
av.attributeTypeEnum = AttributeTypeEnum.Center;
av.val = val == "true";
break;
case "wt":
av.attributeTypeEnum = AttributeTypeEnum.Weight;
av.val = Int32.Parse(val);
break;
case "id":
av.attributeTypeEnum = AttributeTypeEnum.Id;
av.val = val;
break;
case "labelfontsize":
av.attributeTypeEnum = AttributeTypeEnum.LabelFontSize;
av.val = val;
break;
case "arrowsize":
av.attributeTypeEnum = AttributeTypeEnum.ArrowSize;
av.val = val;
break;
case "labelangle":
av.attributeTypeEnum = AttributeTypeEnum.ArrowSize;
av.val = val;
break;
case "weight":
av.attributeTypeEnum = AttributeTypeEnum.Weight;
av.val = val;
break;
case "bgcolor":
av.attributeTypeEnum = AttributeTypeEnum.BGColor;
av.val = val;
break;
case "fillcolor":
av.attributeTypeEnum = AttributeTypeEnum.FillColor;
av.val = val;
break;
case "cellpadding":
av.attributeTypeEnum = AttributeTypeEnum.CELLPADDING;
av.val = Int32.Parse(val, AttributeBase.USCultureInfo);
break;
case "border":
av.attributeTypeEnum = AttributeTypeEnum.Border;
av.val = Int32.Parse(val, AttributeBase.USCultureInfo);
break;
case "xrad":
av.attributeTypeEnum = AttributeTypeEnum.XRad;
av.val = float.Parse(val, CultureInfo.InvariantCulture);
break;
case "yrad":
av.attributeTypeEnum = AttributeTypeEnum.YRad;
av.val = float.Parse(val, CultureInfo.InvariantCulture);
break;
case "padding":
av.attributeTypeEnum = AttributeTypeEnum.Padding;
av.val = float.Parse(val, CultureInfo.InvariantCulture);
break;
default:
av.attributeTypeEnum = AttributeTypeEnum.Ignore;
break;
}
//throw new Exception("attribute \""+ attr +"\" is not supported");
return av;
}