init lserp cs 5.0

This commit is contained in:
cyf
2026-07-10 15:25:05 +08:00
commit 90f3fda86a
3799 changed files with 976868 additions and 0 deletions
@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class ArrayJsonParser : JsonParserBase {
private List<object> list = new List<object>();
public override Object getResult() {
return list;
}
public ArrayJsonParser( CharSource charSrc )
: base( charSrc ) {
}
protected override void parse() {
charSrc.moveToText();
if (charSrc.getCurrent() != '[') throw ex( "json array must start with [" );
charSrc.moveToText();
if (charSrc.getCurrent() == ']') return;
// 回到[
charSrc.back();
parseOne();
}
private void parseOne() {
charSrc.moveToText();
if (charSrc.getCurrent() == ',') {
charSrc.back();
list.Add( null );
}
else {
charSrc.back();
// 将值加入列表
Object val = moveAndGetParser().getResult();
list.Add( val );
}
// 剩余字符处理
charSrc.moveToText();
char c = charSrc.getCurrent();
if (c == ']') {
return;
}
if (c != ',') throw ex( "json array must seperated with , " );
charSrc.moveToText();
if (charSrc.getCurrent() == ']') {
return;
}
else {
charSrc.back();
parseOne();
}
}
}
}
@@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class CharSource {
public char[] charList;
private int index = -1;
public String strSrc { get; set; }
public CharSource( String src ) {
this.strSrc = clearComment( src );
this.charList = this.strSrc.ToCharArray();
}
private String clearComment( String src ) {
if (src == null) return null;
String[] arr = src.Split( '\n' );
StringBuilder sb = new StringBuilder();
foreach (String line in arr) {
if (line.Trim().StartsWith( "//" )) continue;
sb.Append( line );
sb.AppendLine();
}
return sb.ToString();
}
public char getCurrent() {
return charList[index];
}
public void move() {
if (index >= charList.Length - 1) return;
index++;
}
public void back() {
index--;
}
public void moveToText() {
index++;
char c = this.getCurrent();
if (c == 0 || c > ' ') return;
moveToText();
}
public Boolean isEnd() {
return (index >= charList.Length - 1);
}
public int getIndex() {
return this.index;
}
}
}
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class InitJsonParser : JsonParserBase {
private Object _result;
public InitJsonParser( CharSource charSrc )
: base( charSrc ) {
}
protected override void parse() {
_result = moveAndGetParser().getResult();
}
public override Object getResult() {
return _result;
}
}
}
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal abstract class JsonParserBase {
protected CharSource charSrc;
protected abstract void parse();
public abstract Object getResult();
public JsonParserBase() {
}
public JsonParserBase( CharSource charSrc ) {
this.charSrc = charSrc;
parse();
}
protected JsonParserBase moveAndGetParser() {
charSrc.moveToText();
char c = charSrc.getCurrent();
if (c == '"' || c == '\'') {
return new StringJsonParser( this.charSrc, c );
}
if (c == '{') {
charSrc.back();
return new ObjectJsonParser( this.charSrc );
}
if (c == '[') {
charSrc.back();
return new ArrayJsonParser( this.charSrc );
}
return new ValueJsonParser( this.charSrc );
}
protected JsonParserException ex( String msg ) {
return new JsonParserException( msg + "(index:"+this.charSrc.getIndex().ToString()+")\n" + this.charSrc.strSrc );
}
}
}
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class JsonParserException : Exception {
private String msg;
public JsonParserException() {
}
public JsonParserException( String msg ) {
this.msg = msg;
}
public JsonParserException( String msg, Exception inner )
: base( msg, inner ) {
}
public override String Message {
get {
return base.Message + Environment.NewLine + this.msg;
}
}
public override String ToString() {
return base.ToString() + Environment.NewLine + this.msg;
}
}
}
@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class ObjectJsonParser : JsonParserBase {
private Dictionary<String, object> map = new Dictionary<String, object>();
public override Object getResult() {
return this.map;
}
public ObjectJsonParser( CharSource charSrc )
: base( charSrc ) {
}
protected override void parse() {
charSrc.moveToText();
if (charSrc.getCurrent() != '{') throw ex( "json Object must start with { " );
charSrc.moveToText();
if (charSrc.getCurrent() == '}') return;
charSrc.back();
parseOne();
}
private void parseOne() {
charSrc.moveToText();
if (charSrc.getCurrent() == '}') return;
// 解析key
charSrc.back();
String key = moveAndGetParser().getResult().ToString();
// 解析冒号
charSrc.moveToText();
if (charSrc.getCurrent() != ':') throw ex( "json object's property pair must seperated with :" );
// 解析value
Object val = moveAndGetParser().getResult();
// 获取值
map.Add( key, val );
// 处理剩下的字符
charSrc.moveToText();
char c = charSrc.getCurrent();
if (c == '}') return;
if (c != ',') throw ex( "json object's property must seperated with ," );
charSrc.moveToText();
if (charSrc.getCurrent() == '}')
return;
else {
charSrc.back();
parseOne();
}
}
}
}
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class StringJsonParser : ValueJsonParser {
private String _result;
public override Object getResult() {
return _result;
}
public StringJsonParser( CharSource charSrc, char c ) {
this.quote = c;
this.charSrc = charSrc;
parse();
}
private char quote = '"';
protected override void parse() {
charSrc.move();
char c = charSrc.getCurrent();
if (c == '\n' || c == '\r') throw ex( "String ends at a new line while not end" );
if (c == quote) {
_result = sb.ToString();
return;
}
if (c == '\\')
processEscape();
else
sb.Append( c );
parse();
}
}
}
@@ -0,0 +1,95 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhaizj.Framework.Serialization {
internal class ValueJsonParser : JsonParserBase {
protected StringBuilder sb = new StringBuilder();
private static readonly String separatorChars = ",\":[]{}";
private Object _result;
public override Object getResult() {
return _result;
}
public ValueJsonParser() {
}
public ValueJsonParser( CharSource charSrc )
: base( charSrc ) {
}
protected override void parse() {
paserOne();
charSrc.back();
String s = sb.ToString().Trim();
if (s.Equals( "" )) throw ex( "value is empty" );
_result = getStringValue( s );
}
private void paserOne() {
char c = charSrc.getCurrent();
if (c >= ' ' && separatorChars.IndexOf( c ) < 0) {
if (c == '\\') {
processEscape();
}
else
sb.Append( c );
if (charSrc.isEnd()) return;
charSrc.move();
paserOne();
}
}
protected void processEscape() {
charSrc.move();
char c = charSrc.getCurrent();
if (c == 'b')
sb.Append( '\b' );
else if (c == 't')
sb.Append( '\t' );
else if (c == 'n')
sb.Append( '\n' );
else if (c == 'n')
sb.Append( '\n' );
else if (c == 'r')
sb.Append( '\r' );
else if (c == 'u') {
//sb.Append( '' ); // TODO
}
else if (c == '"' || c == '\'' || c == '/' || c == '\\')
sb.Append( c );
else
throw ex( "not a valid escape character" );
}
private static Object getStringValue( String s ) {
if (cvt.IsInt( s )) return cvt.ToInt( s );
if (cvt.IsDecimal( s )) return cvt.ToDecimal( s );
if (cvt.IsBool( s )) return cvt.ToBool( s );
return s;
}
}
}