You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.8 KiB
143 lines
4.8 KiB
using Apewer;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Apewer.Internals
|
|
{
|
|
|
|
internal class TextList
|
|
{
|
|
|
|
|
|
private const char Delimiter = '|';
|
|
private const string Equal = "=";
|
|
|
|
/// <summary>在 List 中增加项。</summary>
|
|
public static string ListAppend(string argList, string argItem)
|
|
{
|
|
string vlist;
|
|
vlist = string.IsNullOrEmpty(argList) ? "" : argList;
|
|
if (string.IsNullOrEmpty(argItem))
|
|
{
|
|
return vlist;
|
|
}
|
|
else
|
|
{
|
|
if (TextHelper.Len(vlist) > 0) vlist = vlist + Delimiter;
|
|
vlist = vlist + TextConverter.EncodeText(argItem);
|
|
return vlist;
|
|
}
|
|
}
|
|
|
|
/// <summary>解析。</summary>
|
|
public static List<string> ListUnlash(string argText)
|
|
{
|
|
List<string> vlist = new List<string>();
|
|
if (!string.IsNullOrEmpty(argText))
|
|
{
|
|
string[] va = TextUtility.Split(TextHelper.LCase(argText), Delimiter);
|
|
for (int i = 0; i < va.Length; i++) vlist.Add(TextConverter.DecodeText(va[i]));
|
|
}
|
|
return vlist;
|
|
}
|
|
|
|
/// <summary>获取 List 中的元素数量。</summary>
|
|
public static int ListCount(string argList)
|
|
{
|
|
int vresult;
|
|
if (string.IsNullOrEmpty(argList)) return 0;
|
|
try
|
|
{
|
|
string[] va = TextUtility.Split(argList, Delimiter);
|
|
vresult = va.Length;
|
|
}
|
|
catch
|
|
{
|
|
vresult = -1;
|
|
}
|
|
return vresult;
|
|
}
|
|
|
|
/// <summary>更新 Args 元素。</summary>
|
|
public static string ArgsUpdate(string argText, string argName, string argValue)
|
|
{
|
|
string vtext, vleft, vright;
|
|
vtext = string.IsNullOrEmpty(argName) ? Constant.EmptyString : TextHelper.LCase(argText);
|
|
if (string.IsNullOrEmpty(argName)) return vtext;
|
|
else vleft = TextHelper.LCase(TextConverter.EncodeText(TextHelper.LCase(argName)));
|
|
vright = string.IsNullOrEmpty(argValue) ? Constant.EmptyString : TextHelper.LCase(TextConverter.EncodeText(argValue));
|
|
if (TextHelper.Len(vtext) > 0)
|
|
{
|
|
var vb = new TextBuilder();
|
|
bool vupdated = false;
|
|
string vread, vrl, vrr;
|
|
string[] varray = TextUtility.Split(vtext, Delimiter);
|
|
for (int i = 0; i < varray.Length; i++)
|
|
{
|
|
vread = varray[i];
|
|
vrl = ArgLeft(vread);
|
|
vrr = ArgRight(vread);
|
|
if (i > 0) vb.Append(Delimiter.ToString());
|
|
if (vrl == vleft)
|
|
{
|
|
vupdated = true;
|
|
vb.Append(vleft + Equal + vright);
|
|
}
|
|
else
|
|
{
|
|
vb.Append(vread);
|
|
}
|
|
}
|
|
if (!vupdated) vb.Append(Delimiter + vleft + Equal + vright);
|
|
return vb.Value;
|
|
}
|
|
else
|
|
{
|
|
return vleft + Equal + vright;
|
|
}
|
|
}
|
|
|
|
/// <summary>查询 Args 中的元素。</summary>
|
|
public static string ArgsQuery(string argText, string argName)
|
|
{
|
|
if ((!string.IsNullOrEmpty(argText)) && (!string.IsNullOrEmpty(argName)))
|
|
{
|
|
string vtext, vname;
|
|
string[] varray;
|
|
vtext = TextHelper.LCase(argText);
|
|
vname = TextHelper.LCase(TextConverter.EncodeText(argName));
|
|
varray = TextUtility.Split(vtext, Delimiter);
|
|
for (int i = 0; i < varray.Length; i++)
|
|
{
|
|
string vleft = ArgLeft(varray[i]);
|
|
string vright = ArgRight(varray[i]);
|
|
if (vleft == vname) return TextConverter.DecodeText(vright);
|
|
}
|
|
}
|
|
return Constant.EmptyString;
|
|
}
|
|
|
|
private static string ArgLeft(string argText)
|
|
{
|
|
if (!string.IsNullOrEmpty(argText))
|
|
{
|
|
int vis = TextHelper.InStr(argText, Equal);
|
|
if (vis > 0) return TextHelper.Left(argText, vis - 1);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
private static string ArgRight(string argText)
|
|
{
|
|
if (!string.IsNullOrEmpty(argText))
|
|
{
|
|
int vis = TextHelper.InStr(argText, Equal);
|
|
if (vis > 0) return TextHelper.Right(argText, TextHelper.Len(argText) - vis);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|