75 lines
3.0 KiB
C#
Raw Normal View History

2025-07-14 21:54:09 +08:00
// ParseException
using System;
using Leguar.TotalJSON.Internal;
namespace Leguar.TotalJSON {
/// <summary>
/// Exception thrown if parsing string to JSON or JArray fails.
/// </summary>
public class ParseException : ArgumentException {
private ParseException(string message) : base(message) {
}
internal static ParseException forEmpty(String message, ParseStringSettings parseStrignSettings) {
string fullMessage=message+getExceptionMessageTail(parseStrignSettings);
return (new ParseException(fullMessage));
}
internal static ParseException forInvalidStart(String message, ParseStringRunner parseStrignRunner) {
StringPointer sp=parseStrignRunner.getStringPointer();
string fullMessage=message+" - "+sp.getLineAndColumnForException()+getExceptionMessageTail(parseStrignRunner);
return (new ParseException(fullMessage));
}
internal static ParseException forInvalidCharacter(String message, ParseStringRunner parseStrignRunner) {
StringPointer sp=parseStrignRunner.getStringPointer();
string fullMessage=message+" - "+sp.getLineAndColumnForException()+", near: "+sp.getSubStringForException(32)+getExceptionMessageTail(parseStrignRunner);
return (new ParseException(fullMessage));
}
internal static ParseException forInvalidEnd(ParseStringRunner parseStrignRunner) {
StringPointer sp=parseStrignRunner.getStringPointer();
string fullMessage="Unexpected end of input - "+sp.getLineAndColumnForException()+", near: "+sp.getSubStringForException(16)+getExceptionMessageTail(parseStrignRunner);
return (new ParseException(fullMessage));
}
internal static ParseException forCharactersAfterEnd(ParseStringRunner parseStrignRunner, char nonWhiteChar) {
StringPointer sp=parseStrignRunner.getStringPointer();
int nonWhiteCharInt = (int)(nonWhiteChar);
string nonWhiteCharHex = "0x"+nonWhiteCharInt.ToString("X"+(nonWhiteCharInt<256?"2":"4"));
string fullMessage="Unexpected non-white character ("+nonWhiteCharHex+") after end of object - "+sp.getLineAndColumnForException()+", near: "+sp.getSubStringForException(32)+getExceptionMessageTail(parseStrignRunner);
return (new ParseException(fullMessage));
}
private static string getExceptionMessageTail(ParseStringRunner parseStringRunner) {
if (parseStringRunner!=null) {
return getExceptionMessageTailForID(parseStringRunner.getParseDebugIDForExceptions());
}
return getExceptionMessageTailForID(null);
}
internal static string getExceptionMessageTail(ParseStringSettings parseStringSettings) {
if (parseStringSettings!=null) {
return getExceptionMessageTailForID(parseStringSettings.DebugIDForExceptions);
}
return getExceptionMessageTailForID(null);
}
internal static string getExceptionMessageTailForID(string debugIDForExceptions) {
return InternalTools.getExceptionMessageTailForID(debugIDForExceptions,"Parse");
}
public override string StackTrace {
get {
return InternalTools.getCleanedStackTrace(base.StackTrace);
}
}
}
}