private static void ReadAscii(XmlReader reader, string name, uint offset, bool visible, IPluginVisitor visitor, uint pluginLine) { int size = 0; if (reader.MoveToAttribute("size") || reader.MoveToAttribute("length")) { size = ParseInt(reader.Value); } visitor.VisitAscii(name, offset, visible, size, pluginLine); }
private static void ReadAscii(XmlReader reader, string name, uint offset, bool visible, IPluginVisitor visitor, uint pluginLine, string tooltip) { // Both "size" and "length" are accepted here because they are the same // with ASCII strings, but "size" should be preferred because it's less ambiguous // and <utf16> only supports "size" int size = 0; if (reader.MoveToAttribute("size") || reader.MoveToAttribute("length")) size = ParseInt(reader.Value); visitor.VisitAscii(name, offset, visible, size, pluginLine, tooltip); }
private static void ReadAscii(XmlReader reader, string name, uint offset, bool visible, IPluginVisitor visitor, uint pluginLine) { // Both "size" and "length" are accepted here because they are the same // with ASCII strings, but "size" should be preferred because it's less ambiguous // and <utf16> only supports "size" var size = 0; if (reader.MoveToAttribute("size") || reader.MoveToAttribute("length")) size = ParseInt(reader.Value); visitor.VisitAscii(name, offset, visible, size, pluginLine); }
private static void ReadAscii(XmlReader reader, string name, uint offset, bool visible, IPluginVisitor visitor, uint pluginLine) { int size = 0; if (reader.MoveToAttribute("size") || reader.MoveToAttribute("length")) size = ParseInt(reader.Value); visitor.VisitAscii(name, offset, visible, size, pluginLine); }
/// <summary> /// Handles an element which describes how a value /// should be read from the cache file. /// </summary> /// <param name="reader">The XmlReader that read the element.</param> /// <param name="elementName">The element's name.</param> /// <param name="visitor">The IPluginVisitor to call to.</param> private void HandleValueElement(XmlReader reader, string elementName, IPluginVisitor visitor) { string name = "Unknown"; uint offset = 0; var pluginLine = (uint) (reader as IXmlLineInfo).LineNumber; bool visible = true; if (reader.MoveToAttribute("name")) name = reader.Value; if (reader.MoveToAttribute("offset")) offset = ParseUInt(reader.Value); if (reader.MoveToAttribute("visible")) visible = ParseBool(reader.Value); reader.MoveToElement(); switch (elementName.ToLower()) { case "uint8": case "byte": visitor.VisitUInt8(name, offset, visible, pluginLine); break; case "sbyte": case "int8": visitor.VisitInt8(name, offset, visible, pluginLine); break; case "ushort": case "uint16": visitor.VisitUInt16(name, offset, visible, pluginLine); break; case "short": case "int16": visitor.VisitInt16(name, offset, visible, pluginLine); break; case "dword": case "uint": case "uint32": case "long": case "true": visitor.VisitUInt32(name, offset, visible, pluginLine); break; case "int": case "int32": visitor.VisitInt32(name, offset, visible, pluginLine); break; case "undefined": case "unknown": visitor.VisitUndefined(name, offset, visible, pluginLine); break; case "float": case "float32": case "degree": visitor.VisitFloat32(name, offset, visible, pluginLine); break; case "vector3": visitor.VisitVector3(name, offset, visible, pluginLine); break; case "stringid": visitor.VisitStringID(name, offset, visible, pluginLine); break; case "tag": case "tagid": case "tagref": case "ident": ReadTagRef(reader, name, offset, visible, visitor, pluginLine); break; case "string": case "ascii": ReadAscii(reader, name, offset, visible, visitor, pluginLine); break; case "string32": visitor.VisitAscii(name, offset, visible, 32, pluginLine); break; case "string64": visitor.VisitAscii(name, offset, visible, 64, pluginLine); break; case "string256": visitor.VisitAscii(name, offset, visible, 256, pluginLine); break; case "unicode": case "utf16": ReadUtf16(reader, name, offset, visible, visitor, pluginLine); break; case "unicode32": visitor.VisitUtf16(name, offset, visible, 32, pluginLine); break; case "unicode64": visitor.VisitUtf16(name, offset, visible, 64, pluginLine); break; case "unicode256": visitor.VisitUtf16(name, offset, visible, 256, pluginLine); break; case "bitfield8": case "bitmask8": if (visitor.EnterBitfield8(name, offset, visible, pluginLine)) ReadBits(reader, visitor); break; case "bitmask16": case "bitfield16": if (visitor.EnterBitfield16(name, offset, visible, pluginLine)) ReadBits(reader, visitor); break; case "bitmask32": case "bitfield32": if (visitor.EnterBitfield32(name, offset, visible, pluginLine)) ReadBits(reader, visitor); break; case "enum8": if (visitor.EnterEnum8(name, offset, visible, pluginLine)) ReadOptions(reader, visitor); break; case "enum16": if (visitor.EnterEnum16(name, offset, visible, pluginLine)) ReadOptions(reader, visitor); break; case "enum32": if (visitor.EnterEnum32(name, offset, visible, pluginLine)) ReadOptions(reader, visitor); break; case "tagdata": case "dataref": visitor.VisitDataReference(name, offset, ReadDataRef(reader), visible, pluginLine); break; case "struct": case "reflexive": case "reflexives": ReadReflexive(reader, name, offset, visible, visitor, pluginLine); break; case "bytearray": case "raw": ReadRaw(reader, name, offset, visible, visitor, pluginLine); break; case "color8": case "color16": case "color24": case "color32": visitor.VisitColorInt(name, offset, visible, ReadColorFormat(reader), pluginLine); break; case "colorf": visitor.VisitColorF(name, offset, visible, ReadColorFormat(reader), pluginLine); break; case "id": // Class ID, part of a tag reference break; case "unused": case "unusued": case "ununused": // Do nothing, I really don't understand the point of this break; default: throw new ArgumentException("Unknown element \"" + elementName + "\"." + PositionInfo(reader)); } }
/// <summary> /// Handles an element which describes how a value /// should be read from the cache file. /// </summary> /// <param name="reader">The XmlReader that read the element.</param> /// <param name="elementName">The element's name.</param> /// <param name="visitor">The IPluginVisitor to call to.</param> private void HandleValueElement(XmlReader reader, string elementName, IPluginVisitor visitor) { string name = "Unknown"; uint offset = 0; var pluginLine = (uint)(reader as IXmlLineInfo).LineNumber; bool visible = true; if (reader.MoveToAttribute("name")) { name = reader.Value; } if (reader.MoveToAttribute("offset")) { offset = ParseUInt(reader.Value); } if (reader.MoveToAttribute("visible")) { visible = ParseBool(reader.Value); } reader.MoveToElement(); switch (elementName.ToLower()) { case "uint8": case "byte": visitor.VisitUInt8(name, offset, visible, pluginLine); break; case "sbyte": case "int8": visitor.VisitInt8(name, offset, visible, pluginLine); break; case "ushort": case "uint16": visitor.VisitUInt16(name, offset, visible, pluginLine); break; case "short": case "int16": visitor.VisitInt16(name, offset, visible, pluginLine); break; case "dword": case "uint": case "uint32": case "long": case "true": visitor.VisitUInt32(name, offset, visible, pluginLine); break; case "int": case "int32": visitor.VisitInt32(name, offset, visible, pluginLine); break; case "undefined": case "unknown": visitor.VisitUndefined(name, offset, visible, pluginLine); break; case "float": case "float32": case "degree": visitor.VisitFloat32(name, offset, visible, pluginLine); break; case "point2": visitor.VisitPoint2(name, offset, visible, pluginLine); break; case "point3": visitor.VisitPoint3(name, offset, visible, pluginLine); break; case "vector2": visitor.VisitVector2(name, offset, visible, pluginLine); break; case "vector3": visitor.VisitVector3(name, offset, visible, pluginLine); break; case "vector4": case "quaternion": visitor.VisitVector4(name, offset, visible, pluginLine); break; case "degree2": visitor.VisitDegree2(name, offset, visible, pluginLine); break; case "degree3": visitor.VisitDegree3(name, offset, visible, pluginLine); break; case "plane2": visitor.VisitPlane2(name, offset, visible, pluginLine); break; case "plane3": visitor.VisitPlane3(name, offset, visible, pluginLine); break; case "rect16": visitor.VisitRect16(name, offset, visible, pluginLine); break; case "stringid": visitor.VisitStringID(name, offset, visible, pluginLine); break; case "tag": case "tagid": case "tagref": case "ident": ReadTagRef(reader, name, offset, visible, visitor, pluginLine); break; case "string": case "ascii": ReadAscii(reader, name, offset, visible, visitor, pluginLine); break; case "string32": visitor.VisitAscii(name, offset, visible, 32, pluginLine); break; case "string64": visitor.VisitAscii(name, offset, visible, 64, pluginLine); break; case "string256": visitor.VisitAscii(name, offset, visible, 256, pluginLine); break; case "unicode": case "utf16": ReadUtf16(reader, name, offset, visible, visitor, pluginLine); break; case "unicode32": visitor.VisitUtf16(name, offset, visible, 32, pluginLine); break; case "unicode64": visitor.VisitUtf16(name, offset, visible, 64, pluginLine); break; case "unicode256": visitor.VisitUtf16(name, offset, visible, 256, pluginLine); break; case "bitfield8": case "bitmask8": if (visitor.EnterBitfield8(name, offset, visible, pluginLine)) { ReadBits(reader, visitor); } break; case "bitmask16": case "bitfield16": if (visitor.EnterBitfield16(name, offset, visible, pluginLine)) { ReadBits(reader, visitor); } break; case "bitmask32": case "bitfield32": if (visitor.EnterBitfield32(name, offset, visible, pluginLine)) { ReadBits(reader, visitor); } break; case "bitmask64": case "bitfield64": if (visitor.EnterBitfield64(name, offset, visible, pluginLine)) { ReadBits(reader, visitor); } break; case "enum8": if (visitor.EnterEnum8(name, offset, visible, pluginLine)) { ReadOptions(reader, visitor); } break; case "enum16": if (visitor.EnterEnum16(name, offset, visible, pluginLine)) { ReadOptions(reader, visitor); } break; case "enum32": if (visitor.EnterEnum32(name, offset, visible, pluginLine)) { ReadOptions(reader, visitor); } break; case "tagdata": case "dataref": ReadDataRef(reader, name, offset, visible, visitor, pluginLine); break; case "struct": case "reflexive": case "reflexives": ReadReflexive(reader, name, offset, visible, visitor, pluginLine); break; case "bytearray": case "raw": ReadRaw(reader, name, offset, visible, visitor, pluginLine); break; case "shader": ReadShader(reader, name, offset, visible, visitor, pluginLine); break; case "uniclist": ReadUnicList(reader, name, offset, visible, visitor, pluginLine); break; case "color8": case "color16": case "color24": case "color32": visitor.VisitColorInt(name, offset, visible, ReadColorFormat(reader), pluginLine); break; case "colorf": visitor.VisitColorF(name, offset, visible, ReadColorFormat(reader), pluginLine); break; case "id": // Class ID, part of a tag reference break; case "unused": case "unusued": case "ununused": // Do nothing, I really don't understand the point of this break; default: throw new ArgumentException("Unknown element \"" + elementName + "\"." + PositionInfo(reader)); } }