public int Write(char[] chars, ref int offset) { StringBuilder sb = new StringBuilder(MaxTagLength); sb.Append('{'); if (EnumCache <FFXIIITextTagCode> .IsDefined(Code)) { sb.Append(Code); } else { sb.Append("Var").AppendFormat(((byte)Code).ToString("X2")); } if (Param != null) { sb.Append(' '); sb.Append(Param); } sb.Append('}'); if (sb.Length > MaxTagLength) { throw Exceptions.CreateException(Lang.Error.Text.TooLongTagNameFormat, sb.ToString()); } for (int i = 0; i < sb.Length; i++) { chars[offset++] = sb[i]; } return(sb.Length); }
public override string ToString() { StringBuilder sb = new StringBuilder(MaxTagLength); sb.Append('{'); if (EnumCache <FFXIIITextTagCode> .IsDefined(Code)) { sb.Append(Code); } else { sb.Append("Var").AppendFormat(((byte)Code).ToString("X2")); } if (Param != null) { sb.Append(' '); sb.Append(Param); } sb.Append('}'); return(sb.ToString()); }
public static FFXIIITextTag TryRead(char[] chars, ref int offset, ref int left) { int oldOffset = offset; int oldleft = left; string tag, par; if (chars[offset++] != '{' || !TryGetTag(chars, ref offset, ref left, out tag, out par)) { offset = oldOffset; left = oldleft; return(null); } FFXIIITextTagCode?code = EnumCache <FFXIIITextTagCode> .TryParse(tag); if (code == null) { byte varCode, numArg; if (tag.Length == 5 && byte.TryParse(tag.Substring(3, 2), NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out varCode) && byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { return(new FFXIIITextTag((FFXIIITextTagCode)varCode, (FFXIIITextTagParam)numArg)); } } if (code == null) { offset = oldOffset; left = oldleft; return(null); } switch (code.Value) { case FFXIIITextTagCode.End: case FFXIIITextTagCode.Escape: case FFXIIITextTagCode.Italic: case FFXIIITextTagCode.Many: case FFXIIITextTagCode.Article: case FFXIIITextTagCode.ArticleMany: return(new FFXIIITextTag(code.Value)); case FFXIIITextTagCode.VarF4: case FFXIIITextTagCode.VarF6: case FFXIIITextTagCode.VarF7: { byte numArg; if (byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { return(new FFXIIITextTag(code.Value, (FFXIIITextTagParam)numArg)); } break; } case FFXIIITextTagCode.Icon: { byte numArg; FFXIIITextTagIcon?arg = EnumCache <FFXIIITextTagIcon> .TryParse(par); if (arg == null && byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { arg = (FFXIIITextTagIcon)numArg; } if (arg != null) { return(new FFXIIITextTag(code.Value, arg.Value)); } break; } case FFXIIITextTagCode.Text: { byte numArg; FFXIIITextTagText?arg = EnumCache <FFXIIITextTagText> .TryParse(par); if (arg == null && byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { arg = (FFXIIITextTagText)numArg; } if (arg != null) { return(new FFXIIITextTag(code.Value, arg.Value)); } break; } case FFXIIITextTagCode.Key: { byte numArg; FFXIIITextTagKey?arg = EnumCache <FFXIIITextTagKey> .TryParse(par); if (arg == null && byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { arg = (FFXIIITextTagKey)numArg; } if (arg != null) { return(new FFXIIITextTag(code.Value, arg.Value)); } break; } case FFXIIITextTagCode.Color: { byte numArg; FFXIIITextTagColor?arg = EnumCache <FFXIIITextTagColor> .TryParse(par); if (arg == null && byte.TryParse(par, NumberStyles.Integer, CultureInfo.InvariantCulture, out numArg)) { arg = (FFXIIITextTagColor)numArg; } if (arg != null) { return(new FFXIIITextTag(code.Value, arg.Value)); } break; } } offset = oldOffset; left = oldleft; return(null); }