示例#1
0
 protected void WritePropertyToXML(TextWriter tw, string depth, WzImageProperty prop)
 {
     if (prop is WzCanvasProperty)
     {
         WzCanvasProperty property3 = (WzCanvasProperty)prop;
         if (ExportBase64Data)
         {
             MemoryStream stream = new MemoryStream();
             property3.PngProperty.GetPNG(false).Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             byte[] pngbytes = stream.ToArray();
             stream.Close();
             tw.Write(string.Concat(new object[] { depth, "<canvas name=\"", XmlUtil.SanitizeText(property3.Name), "\" width=\"", property3.PngProperty.Width, "\" height=\"", property3.PngProperty.Height, "\" basedata=\"", Convert.ToBase64String(pngbytes), "\">" }) + lineBreak);
         }
         else
         {
             tw.Write(string.Concat(new object[] { depth, "<canvas name=\"", XmlUtil.SanitizeText(property3.Name), "\" width=\"", property3.PngProperty.Width, "\" height=\"", property3.PngProperty.Height, "\">" }) + lineBreak);
         }
         string newDepth = depth + indent;
         foreach (WzImageProperty property in property3.WzProperties)
         {
             WritePropertyToXML(tw, newDepth, property);
         }
         tw.Write(depth + "</canvas>" + lineBreak);
     }
     else if (prop is WzIntProperty)
     {
         WzIntProperty property4 = (WzIntProperty)prop;
         tw.Write(string.Concat(new object[] { depth, "<int name=\"", XmlUtil.SanitizeText(property4.Name), "\" value=\"", property4.Value, "\"/>" }) + lineBreak);
     }
     else if (prop is WzDoubleProperty)
     {
         WzDoubleProperty property5 = (WzDoubleProperty)prop;
         tw.Write(string.Concat(new object[] { depth, "<double name=\"", XmlUtil.SanitizeText(property5.Name), "\" value=\"", property5.Value, "\"/>" }) + lineBreak);
     }
     else if (prop is WzNullProperty)
     {
         WzNullProperty property6 = (WzNullProperty)prop;
         tw.Write(depth + "<null name=\"" + XmlUtil.SanitizeText(property6.Name) + "\"/>" + lineBreak);
     }
     else if (prop is WzSoundProperty)
     {
         WzSoundProperty property7 = (WzSoundProperty)prop;
         if (ExportBase64Data)
         {
             tw.Write(string.Concat(new object[] { depth, "<sound name=\"", XmlUtil.SanitizeText(property7.Name), "\" length=\"", property7.Length.ToString(), "\" basehead=\"", Convert.ToBase64String(property7.Header), "\" basedata=\"", Convert.ToBase64String(property7.GetBytes(false)), "\"/>" }) + lineBreak);
         }
         else
         {
             tw.Write(depth + "<sound name=\"" + XmlUtil.SanitizeText(property7.Name) + "\"/>" + lineBreak);
         }
     }
     else if (prop is WzStringProperty)
     {
         WzStringProperty property8 = (WzStringProperty)prop;
         string           str       = XmlUtil.SanitizeText(property8.Value);
         tw.Write(depth + "<string name=\"" + XmlUtil.SanitizeText(property8.Name) + "\" value=\"" + str + "\"/>" + lineBreak);
     }
     else if (prop is WzSubProperty)
     {
         WzSubProperty property9 = (WzSubProperty)prop;
         tw.Write(depth + "<imgdir name=\"" + XmlUtil.SanitizeText(property9.Name) + "\">" + lineBreak);
         string newDepth = depth + indent;
         foreach (WzImageProperty property in property9.WzProperties)
         {
             WritePropertyToXML(tw, newDepth, property);
         }
         tw.Write(depth + "</imgdir>" + lineBreak);
     }
     else if (prop is WzShortProperty)
     {
         WzShortProperty property10 = (WzShortProperty)prop;
         tw.Write(string.Concat(new object[] { depth, "<short name=\"", XmlUtil.SanitizeText(property10.Name), "\" value=\"", property10.Value, "\"/>" }) + lineBreak);
     }
     else if (prop is WzLongProperty)
     {
         WzLongProperty long_prop = (WzLongProperty)prop;
         tw.Write(string.Concat(new object[] { depth, "<long name=\"", XmlUtil.SanitizeText(long_prop.Name), "\" value=\"", long_prop.Value, "\"/>" }) + lineBreak);
     }
     else if (prop is WzUOLProperty)
     {
         WzUOLProperty property11 = (WzUOLProperty)prop;
         tw.Write(depth + "<uol name=\"" + property11.Name + "\" value=\"" + XmlUtil.SanitizeText(property11.Value) + "\"/>" + lineBreak);
     }
     else if (prop is WzVectorProperty)
     {
         WzVectorProperty property12 = (WzVectorProperty)prop;
         tw.Write(string.Concat(new object[] { depth, "<vector name=\"", XmlUtil.SanitizeText(property12.Name), "\" x=\"", property12.X.Value, "\" y=\"", property12.Y.Value, "\"/>" }) + lineBreak);
     }
     else if (prop is WzFloatProperty)
     {
         WzFloatProperty property13 = (WzFloatProperty)prop;
         string          str2       = Convert.ToString(property13.Value, formattingInfo);
         if (!str2.Contains("."))
         {
             str2 = str2 + ".0";
         }
         tw.Write(depth + "<float name=\"" + XmlUtil.SanitizeText(property13.Name) + "\" value=\"" + str2 + "\"/>" + lineBreak);
     }
     else if (prop is WzConvexProperty)
     {
         tw.Write(depth + "<extended name=\"" + XmlUtil.SanitizeText(prop.Name) + "\">" + lineBreak);
         WzConvexProperty property14 = (WzConvexProperty)prop;
         string           newDepth   = depth + indent;
         foreach (WzImageProperty property in property14.WzProperties)
         {
             WritePropertyToXML(tw, newDepth, property);
         }
         tw.Write(depth + "</extended>" + lineBreak);
     }
 }
示例#2
0
        internal WzImageProperty ParsePropertyFromXMLElement(XmlElement element)
        {
            switch (element.Name)
            {
            case "imgdir":
                WzSubProperty sub = new WzSubProperty(element.GetAttribute("name"));
                foreach (XmlElement subelement in element)
                {
                    sub.AddProperty(ParsePropertyFromXMLElement(subelement));
                }
                return(sub);

            case "canvas":
                WzCanvasProperty canvas = new WzCanvasProperty(element.GetAttribute("name"));
                if (!element.HasAttribute("basedata"))
                {
                    throw new NoBase64DataException("no base64 data in canvas element with name " + canvas.Name);
                }
                canvas.PngProperty = new WzPngProperty();
                MemoryStream pngstream = new MemoryStream(Convert.FromBase64String(element.GetAttribute("basedata")));
                canvas.PngProperty.SetPNG((Bitmap)Image.FromStream(pngstream, true, true));
                foreach (XmlElement subelement in element)
                {
                    canvas.AddProperty(ParsePropertyFromXMLElement(subelement));
                }
                return(canvas);

            case "int":
                WzIntProperty compressedInt = new WzIntProperty(element.GetAttribute("name"), int.Parse(element.GetAttribute("value"), formattingInfo));
                return(compressedInt);

            case "double":
                WzDoubleProperty doubleProp = new WzDoubleProperty(element.GetAttribute("name"), double.Parse(element.GetAttribute("value"), formattingInfo));
                return(doubleProp);

            case "null":
                WzNullProperty nullProp = new WzNullProperty(element.GetAttribute("name"));
                return(nullProp);

            case "sound":
                if (!element.HasAttribute("basedata") || !element.HasAttribute("basehead") || !element.HasAttribute("length"))
                {
                    throw new NoBase64DataException("no base64 data in sound element with name " + element.GetAttribute("name"));
                }
                WzSoundProperty sound = new WzSoundProperty(element.GetAttribute("name"),
                                                            int.Parse(element.GetAttribute("length")),
                                                            Convert.FromBase64String(element.GetAttribute("basehead")),
                                                            Convert.FromBase64String(element.GetAttribute("basedata")));
                return(sound);

            case "string":
                WzStringProperty stringProp = new WzStringProperty(element.GetAttribute("name"), element.GetAttribute("value"));
                return(stringProp);

            case "short":
                WzShortProperty shortProp = new WzShortProperty(element.GetAttribute("name"), short.Parse(element.GetAttribute("value"), formattingInfo));
                return(shortProp);

            case "long":
                WzLongProperty longProp = new WzLongProperty(element.GetAttribute("name"), long.Parse(element.GetAttribute("value"), formattingInfo));
                return(longProp);

            case "uol":
                WzUOLProperty uol = new WzUOLProperty(element.GetAttribute("name"), element.GetAttribute("value"));
                return(uol);

            case "vector":
                WzVectorProperty vector = new WzVectorProperty(element.GetAttribute("name"), new WzIntProperty("x", Convert.ToInt32(element.GetAttribute("x"))), new WzIntProperty("y", Convert.ToInt32(element.GetAttribute("y"))));
                return(vector);

            case "float":
                WzFloatProperty floatProp = new WzFloatProperty(element.GetAttribute("name"), float.Parse(element.GetAttribute("value"), formattingInfo));
                return(floatProp);

            case "extended":
                WzConvexProperty convex = new WzConvexProperty(element.GetAttribute("name"));
                foreach (XmlElement subelement in element)
                {
                    convex.AddProperty(ParsePropertyFromXMLElement(subelement));
                }
                return(convex);
            }
            throw new InvalidDataException("unknown XML prop " + element.Name);
        }
示例#3
0
 // TODO: this is not deserializable due to missing type information
 protected void WritePropertyToJson(TextWriter tw, WzImageProperty prop, bool isArray = false)
 {
     tw.Write("\n");
     if (prop is WzCanvasProperty)
     {
         WzCanvasProperty property = (WzCanvasProperty)prop;
         if (!isArray)
         {
             tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\":");
         }
         if (ExportBase64Data)
         {
             MemoryStream stream = new MemoryStream();
             property.PngProperty.GetPNG(false).Save(stream, System.Drawing.Imaging.ImageFormat.Png);
             byte[] pngbytes = stream.ToArray();
             stream.Close();
             tw.Write($"{{" +
                      $"\"width\": {property.PngProperty.Width}, " +
                      $"\"height\": {property.PngProperty.Height}, " +
                      $"\"basedata\": {Convert.ToBase64String(pngbytes)}\",");
         }
         else
         {
             tw.Write($"{{" +
                      $"\"width\": {property.PngProperty.Width}, " +
                      $"\"height\": {property.PngProperty.Height},");
         }
         if (property.WzProperties.Count() > 0)
         {
             var last = property.WzProperties.Last();
             foreach (WzImageProperty p in property.WzProperties)
             {
                 WritePropertyToJson(tw, p);
                 if (!p.Equals(last))
                 {
                     tw.Write(",");
                 }
             }
         }
         tw.Write("}");
     }
     else if (prop is WzIntProperty)
     {
         WzIntProperty property = (WzIntProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {property.Value}");
     }
     else if (prop is WzDoubleProperty)
     {
         WzDoubleProperty property = (WzDoubleProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {property.Value}");
     }
     else if (prop is WzNullProperty)
     {
         WzNullProperty property = (WzNullProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": null");
     }
     else if (prop is WzSoundProperty)
     {
         WzSoundProperty property = (WzSoundProperty)prop;
         if (!isArray)
         {
             tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\":");
         }
         if (ExportBase64Data)
         {
             tw.Write($"{{" +
                      $"\"length\":\"{property.Length}\", " +
                      $"\"basehead\": \"{Convert.ToBase64String(property.Header)}\"" +
                      $"\"basedata\": \"{Convert.ToBase64String(property.GetBytes(false))}\"" +
                      $"}}");
         }
         else
         {
             tw.Write("{}");
         }
     }
     else if (prop is WzStringProperty)
     {
         WzStringProperty property = (WzStringProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {JsonConvert.ToString(property.Value)}");
     }
     else if (prop is WzSubProperty)
     {
         WzSubProperty property = (WzSubProperty)prop;
         if (!isArray)
         {
             tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\":");
         }
         // This has the same problem as the convex property
         bool propertyIsArray = property.WzProperties.TrueForAll(x => { int num; return(int.TryParse(x.Name, out num)); });
         tw.Write(propertyIsArray ? "[" : "{");
         if (property.WzProperties.Count() > 0)
         {
             var last = property.WzProperties.Last();
             foreach (WzImageProperty p in property.WzProperties)
             {
                 bool isObject = p is WzConvexProperty || p is WzSubProperty || p is WzSoundProperty || p is WzCanvasProperty || p is WzVectorProperty;
                 if (propertyIsArray)
                 {
                     tw.Write($"{{\"index\":{p.Name}, \"item\":");
                     tw.Write(!isObject ? "{" : "");
                 }
                 WritePropertyToJson(tw, p, propertyIsArray);
                 if (propertyIsArray)
                 {
                     tw.Write(!isObject ? "}" : "");
                     tw.Write("}");
                 }
                 if (!p.Equals(last))
                 {
                     tw.Write(",");
                 }
             }
         }
         tw.Write(propertyIsArray ? "]" : "}");
     }
     else if (prop is WzShortProperty)
     {
         WzShortProperty property = (WzShortProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {property.Value}");
     }
     else if (prop is WzLongProperty)
     {
         WzLongProperty property = (WzLongProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {property.Value}");
     }
     else if (prop is WzUOLProperty)
     {
         WzUOLProperty property = (WzUOLProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": \"{property.Value}\"");
     }
     else if (prop is WzVectorProperty)
     {
         WzVectorProperty property = (WzVectorProperty)prop;
         if (!isArray)
         {
             tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\":");
         }
         tw.Write($"{{" +
                  $"\"x\": {property.X.Value}, " +
                  $"\"y\": {property.Y.Value}" +
                  $"}}");
     }
     else if (prop is WzFloatProperty)
     {
         WzFloatProperty property = (WzFloatProperty)prop;
         tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\": {property.Value * 1.0}");
     }
     else if (prop is WzConvexProperty)
     {
         WzConvexProperty property = (WzConvexProperty)prop;
         if (!isArray)
         {
             tw.Write($"\"{XmlUtil.SanitizeText(property.Name)}\":");
         }
         tw.Write("[");
         if (property.WzProperties.Count() > 0)
         {
             var last = property.WzProperties.Last();
             foreach (WzImageProperty p in property.WzProperties)
             {
                 bool isObject = p is WzConvexProperty || p is WzSubProperty || p is WzSoundProperty || p is WzCanvasProperty || p is WzVectorProperty;
                 tw.Write(isObject ? "" : "{");
                 WritePropertyToJson(tw, p, true);
                 tw.Write(isObject ? "" : "}");
                 if (!p.Equals(last))
                 {
                     tw.Write(",");
                 }
             }
         }
         tw.Write("]");
     }
 }