推荐文章:WSDL: 描述你的Web服务
推荐文章简介:
WSDL: 描述你的Web服务柴晓路2001-8-13 本文最初由 IBM developerWorks 中国网站发表,其网址是http://www.ibm.com/developerWorks/cn/Web Service “Stack”在我的先前的文章中,我已经介绍过Web服务的整个技术体系
using System;
using System.Text.RegularExpressions;
using System.Collections;
/*********************************************************************
DWG INI Parser 1.0
作者:DWG
Copyright(C)2002-2003
作者网站:http://asp.6to23.com/mulansystem
版权声明:
(1)版权归“DWG”所有,任何个人或企业未经许可不得用于商业用途;
(2)个人可免费使用本程序,但不得去除版权信息,修改后的版本不得去除原作者信息;
若要发布修改版本,应该先给作者发一份修改后的源程序;
(3)本源程序发布在http://asp.6to23.com/mulansystem 技术/原创作品展示
使用方法:
请参考http://asp.6to23.com/mulansystem 技术/原创作品展示内的相关文档;
*********************************************************************/
namespace StrProcessor
{
public class Ini
{
public delegate void OnDebugMessage(bool errorflag,string msg);
public event OnDebugMessage OnDebug;
private Regex regex;
private MatchCollection mc;
private Comment cm;
private Convert cv;
// Temporary swap variable
private string strA,strAA;
private string [] strB,strBB;
// Control flags
private string iniEOL;
private bool iniCleanSpilthEOL,iniProcError,iniCaseSensitive;
//
public Ini()
{
cm=new Comment();
cv=new Convert();
ResetDefaultOptions();
OnDebug+=new OnDebugMessage(OnDefaultDebugMessage);
}
///////////////////////////// Interface Functions /////////////////////////////////
public string SetString(string src_ini,string mainkey,string subkey,string val){
string temp=cv.EncodeString(val);
if(temp.Length==src_ini.Length) return AutoSetKeyValue(src_ini,mainkey,subkey,temp);
else return AutoSetKeyValue(src_ini,mainkey,subkey,"\""+temp+"\"");
}
public string GetString(string src_ini,string mainkey,string subkey){
string temp=GetKeyValue(src_ini,mainkey,subkey);
if(!iniProcError){
if(temp.IndexOf("\"")==0&&temp.IndexOf("\"",temp.Length-1)==temp.Length-1&&temp.Length>2)
return cv.DecodeString(temp.Substring(1,temp.Length-2));
else
return temp;
}
else return "";
}
public string[] GetMainkeyNames(string src_ini){
strB=new string[]{""};
strAA=CleanComments(src_ini);
if(!iniProcError){
cm.WithoutContainer();
strA=cm.EmptyComments(strAA,"\"","\"");
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
mc = regex.Matches(strA);
int cnt=0;
for(int i=0;i<mc.Count;i++)
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length!=0)
cnt++;
strB=new string[cnt];
cnt=0;
for(int i=0;i<mc.Count;i++)
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length!=0)
strB[cnt++]=mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim();
SendOkMsg("Get mainkey names OK.");
return strB;
}
else return strB;
}
public string[] GetSubkeyNames(string src_ini,string mainkey){
strB=new string[]{""};
if(TestMainkeyExist(src_ini,mainkey)){
strB=new string[]{""};
strAA=CleanComments(src_ini);
if(!iniProcError){
cm.WithoutContainer();
strA=cm.EmptyComments(strAA,"\"","\"");
mainkey=CaseProc(mainkey.Trim());
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
mc=regex.Matches(strA);
int sloc=0,length=0;
for(int i=0;i<mc.Count;i++)
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length!=0)
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
sloc=mc[i].Index+mc[i].Value.Length;
if((i+1)!=mc.Count) length=mc[i+1].Index-sloc;
else length=strA.Substring(sloc).Length;
break;
}
strB=strAA.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
length=0;
for(int i=0;i<strB.Length;i++)
if(strB[i].Trim().Replace("\ua1a1","").Length!=0)
if(strB[i].Trim().Replace("\ua1a1","").Split(''='').Length>1)
length++;
strBB=new String[length];
length=0;
for(int i=0;i<strB.Length;i++)
if(strB[i].Trim().Replace("\ua1a1","").Length!=0)
if(strB[i].Trim().Replace("\ua1a1","").Split(''='').Length>1)
strBB[length++]=strB[i].Split(''='')[0].Trim();
SendOkMsg("Get subkey names OK.");
return strBB;
}
else return strB;
}
else return strB;
}
public bool TestKeyExist(string src_ini,string mainkey,string subkey){
if(mainkey.Trim().Length==0&&subkey.Trim().Length==0){
SendErrorMsg("Test key exist exception:must be specify the mainkey & subkey names.");
return false;
}
else{
if(subkey.Trim().Length==0) return TestMainkeyExist(src_ini,mainkey);
else return TestSubkeyExist(src_ini,mainkey,subkey);
}
}
public string GetKeyValue(string src_ini,string mainkey,string subkey){
if(TestSubkeyExist(src_ini,mainkey,subkey)){
strAA=CleanComments(src_ini);
cm.WithoutContainer();
strA=cm.EmptyComments(strAA,"\"","\"");
if(iniProcError) return "";
mainkey=CaseProc(mainkey.Trim());
subkey=CaseProc(subkey.Trim());
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
mc=regex.Matches(strA);
int sloc=0,length=0;
for(int i=0;i<mc.Count;i++)
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length!=0)
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
sloc=mc[i].Index+mc[i].Value.Length;
if((i+1)!=mc.Count) length=mc[i+1].Index-sloc;
else length=strA.Substring(sloc).Length;
break;
}
strB=strAA.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
strA="";
for(int i=0;i<strB.Length;i++)
if(strB[i].Trim().Replace("\ua1a1","").Length!=0)
if(strB[i].Trim().Replace("\ua1a1","").Split(''='').Length>1)
if(CaseProc(strB[i].Split(''='')[0].Trim())==subkey)
strA=strB[i].Substring(strB[i].IndexOf("=")+1).Trim();
SendOkMsg("The value of key:\""+mainkey.Trim()+"."+subkey+"\" is "+strA+".");
return strA;
}else return "";
}
public long GetKeyValueLong(string src_ini,string mainkey,string subkey)
{
strA=GetKeyValue(src_ini,mainkey,subkey);
if(!iniProcError&&strA.Trim().Length!=0){
regex=new Regex(@"[^0-9]*");
mc=regex.Matches(strA);
if(mc.Count==0) return Int64.Parse(strA.Trim());
else return 0;
}
else return 0;
}
public string SetKeyValue(string src_ini,string mainkey,string subkey,string val){
if(TestSubkeyExist(src_ini,mainkey,subkey)){
strAA=EmptyComments(src_ini);
cm.WithoutContainer();
strA=cm.EmptyComments(strAA,"\"","\"");
mainkey=CaseProc(mainkey.Trim());
subkey=CaseProc(subkey.Trim());
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
mc=regex.Matches(strA);
int sloc=0,length=0;
for(int i=0;i<mc.Count;i++)
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length>0)
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
sloc=mc[i].Index+mc[i].Value.Length;
if((i+1)!=mc.Count)length=mc[i+1].Index-sloc;
else length=strA.Substring(sloc).Length;
break;
}
strB=strAA.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
strBB=src_ini.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
strA="";
for(int i=0;i<strB.Length;i++)
if(strB[i].Trim().Replace("\ua1a1","").Length!=0){
if(strB[i].Trim().Split(''='').Length>1){
if(CaseProc(strB[i].Split(''='')[0].Trim())==subkey){
strA+=strB[i].Trim().Split(''='')[0].Trim()+"="+val.Trim();
if(strBB[i].IndexOf(@";")!=-1&&strBB[i].IndexOf(@"//")!=-1){
if(strBB[i].IndexOf(@";")<strBB[i].IndexOf(@"//"))
strA+=strBB[i].Substring(strBB[i].IndexOf(@";"));
else
strA+=strBB[i].Substring(strBB[i].IndexOf(@"//"));
}
else if(strBB[i].IndexOf(@"//")!=-1){
strA+=strBB[i].Substring(strBB[i].IndexOf("//"));
}
else if(strBB[i].IndexOf(@";")!=-1){
strA+=strBB[i].Substring(strBB[i].IndexOf(@";"));
}
strA+=iniEOL;
}
else strA+=strBB[i]+iniEOL;
}else strA+=strBB[i]+iniEOL;
}else strA+=strBB[i]+iniEOL;
SendOkMsg("Set the value of key:\""+mainkey.Trim()+"."+subkey+"\" to \""+val.Trim()+"\".");
strA=src_ini.Substring(0,sloc)+strA+src_ini.Substring(sloc+length);
return CleaningSpilthEOL(strA);
}
else return src_ini;
}
public string SetKeyValueLong(string src_ini,string mainkey,string subkey,long val){
return SetKeyValue(src_ini,mainkey,subkey,val.ToString());
}
public string AutoSetKeyValue(string src_ini,string mainkey,string subkey,string val){
if(!TestMainkeyExist(src_ini,mainkey))src_ini=CreateMainkey(src_ini,mainkey);
return CreateSubkey(src_ini,mainkey,subkey,val);
}
public string CleanComments(string src_ini){
if(src_ini.Trim()!=""){
cm.WithoutContainer("\"","\"","\''","\''");
strA=cm.CleanComments(src_ini,@"/*",@"*/",@"//","",@";","");
SendOkMsg("Clean comments OK.");
![](/Images/OutliningIndicators/InBlock.gif)
for(int i=0;i<src.Length;i++){
if(src[i]<=''\x1f''||(src[i]>=''\x7f''&&src[i]<=''\xff'')) temp+=ToHexString(src[i]);
else temp+=src[i].ToString();
}
return temp;
}
else return src;
}
public string StringToValue(string src,ref int loc){
string temp;
if(loc+1<src.Length){
if(loc+1<src.Length-1){
temp=src.Substring(loc+1);
ushort a=0,b=0,c=0;
if(temp[0]==''0''){
if(temp[1]>=''0''&&temp[1]<=''7''){
a=(ushort)(temp[1]-''0'');
if(temp.Length>=3){
if(temp[2]>=''0''&&temp[2]<=''7''){
b=(ushort)(temp[2]-''0'');
if(temp.Length>=4){
if(temp[3]>=''0''&&temp[3]<=''7''){
c=(ushort)(temp[3]-''0'');
loc+=5;
return ((char)(a*64+b*8+c)).ToString();
}
else{
loc+=4;
return ((char)(a*8+b)).ToString();
}
}
else{
loc+=4;
return ((char)(a*8+b)).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=2;
return @"\0";
}
}
else if(temp[0].ToString().ToLower()=="x"){
if( (temp[1]>=''0''&&temp[1]<=''9'') || ( (temp[1]|0x20) >=''a'' && (temp[1]|0x20) <=''f'') ){
if(temp[1]<=''9''){
a=(ushort)(temp[1]-''0'');
}
else{
a=(ushort)((temp[1]|0x20)-''a''+10);
}
if(temp.Length>=3){
if( (temp[2]>=''0''&&temp[2]<=''9'') || ( (temp[2]|0x20) >=''a'' && (temp[2]|0x20) <=''f'') ){
if(temp[2]<=''9''){
b=(ushort)(temp[2]-''0'');
}
else{
b=(ushort)((temp[2]|0x20)-''a''+10);
}
loc+=4;
return ((char)(a*16+b)).ToString();
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=2;
return @"\"+temp[0].ToString();
}
}
else{
loc++;
return @"\";
}
}
else{
loc+=2;
return @"\"+src[loc-1].ToString();
}
}
else{
loc++;
return @"\";
}
}
protected string ToHexString(char val){
ushort baseradix=16;
return @"\x"+HexCode((ushort)(val/baseradix))+HexCode((ushort)(val%baseradix));
}
protected string ToOctString(char val){
int baseradix=8,a=0,b=0,c=0,v;
v=(int)val;
if(v>baseradix*baseradix)
a=v/(baseradix*baseradix);
if(v>baseradix)
b=(v-a*baseradix*baseradix)/baseradix;
c=(ushort)(v-a*baseradix*baseradix-b*baseradix);
return @"\0"+a.ToString()+b.ToString()+c.ToString();
}
private string HexCode(ushort val){
val=(ushort)(val%16);
string temp=val.ToString();
if(val>9)
{
switch(val){
case 10:
temp="a";
break;
case 11:
temp="b";
break;
case 12:
temp="c";
break;
case 13:
temp="d";
break;
case 14:
temp="e";
break;
case 15:
temp="f";
break;
}
}
return temp;
}
}
public class Comment{
private string comEOL,strA;
private string [] strB;
private const char splitor='','';
//
private int [,] info;
private string[,] without;
private bool comCleanSpilthEOL;
//
public Comment(){
ResetDefault();
}
public void ResetDefault(){
comEOL="\r\n";
info=new int[0,0];
without=new string[0,0];
comCleanSpilthEOL=true;
}
///////////////////////////////////// Public Functions /////////////////////////////////////
public void WithoutContainer(params string [] para){
if(para.GetUpperBound(0)==-1){
without=new string[0,0];
}
else{
int count=para.GetUpperBound(0)+1;
int cnt=count/2;
if(count%2==1)cnt++;
without=new string[cnt,2];
for(int i=0,j=0;i<cnt;i++){
without[i,0]=para[j++].Trim();
if(j+1>=count)
without[i,1]="";
else
without[i,1]=para[j++].Trim();
}
}
info=new int[0,0];
}
public void ProcessComments(string src,params string[] para){
if(src==null)src="";
strA="";
info=new int[0,0];
if(src.Trim().Length>0&¶.GetUpperBound(0)!=-1) {
int count=para.GetUpperBound(0)+1;
int cnt=count/2;
if(count%2==1)cnt++;
string [,]keyword=new String[cnt,3];
for(int i=0,j=0;i<cnt;i++){
keyword[i,0]=i.ToString();
keyword[i,1]=para[j++].Trim();
if(j+1>=count)
keyword[i,2]="";
else
keyword[i,2]=para[j++].Trim();
}
//check double first
int loc,end,begin;
string temp;
bool prev=false;
strA=src;
string al="";
for(int z=0;z<2;z++){
for(int i=0;i<cnt;i++){
if(z==0){if(keyword[i,2].Length==0) continue;}
else {if(keyword[i,2].Length>0) continue;}
loc=0;
while(strA.IndexOf(keyword[i,1],loc)!=-1&&loc<strA.Length){
loc=strA.IndexOf(keyword[i,1],loc);
temp=LineOfIndex(strA,loc,out begin);
if(OnTheContainer(temp,loc-begin)){
loc+=keyword[i,1].Length;
continue;
}
else{ //checking if on prefore
prev=false;
for(int j=0;j<cnt;j++){
if(j!=i){
if(temp.IndexOf(keyword[j,1])!=-1){
if(!OnTheContainer(temp,temp.IndexOf(keyword[j,1]))){
if(temp.IndexOf(keyword[j,1])<loc-begin){
prev=true;
break;
}
}
}
}
}
if(!prev){
end=loc+keyword[i,1].Length;
if(end>=strA.Length-1)
end=strA.Length-1;
if(z==0){
end=strA.IndexOf(keyword[i,2],end);
if(end==-1){
end=strA.Length-1;
begin=end+1;
}
else{
end+=keyword[i,2].Length-1;
begin=end+1;
}
}
else {
end=strA.IndexOf(comEOL,end);
if(end==-1){
end=strA.Length-1;
begin=end+1;
}
else{
end+=comEOL.Length-1;
begin=end+1;
}
}
strA=MakeBlank(strA,loc,end);
if(al.Length!=0)al+=splitor.ToString();
al+=i.ToString()+splitor.ToString()+loc.ToString()+splitor.ToString()+end.ToString();
loc=begin;
if(begin>=strA.Length)break;
}
else{
loc+=keyword[i,1].Length;
}
}//else
}//while
}//for
}//for
strB=al.Split(splitor);
count=strB.Length/3;
if(count!=0){
info=new int[count,3];
for(cnt=0,begin=0;cnt<count;cnt++){
for(loc=0;loc<3;loc++)
info[cnt,loc]=(int)Int32.Parse(strB[begin++]);
}
}
}
}
public string EmptyComments(string src,params string[] para){
if(src==null)src="";
strA="";
ProcessComments(src,para);
return strA;
}
public string CleanComments(string src,params string[] para){
if(src==null)src="";
strA="";
ProcessComments(src,para);
strB=Split(strA,comEOL);
if(strB.Length>1){
strA="";
for(int i=0;i<strB.Length;i++){
strA+=strB[i].Trim()+comEOL;
}
return CleaningSpilthEOL(strA);
}
else return CleaningSpilthEOL(strB[0].Trim());
}
public static string[] Split(string src,string separator){
if(src==null)src="";
string [] str=new string[1]{src};
if(src.Trim().Length!=0){
if(src.IndexOf(separator)>-1){
int cnt=0,loc=0,begin=0;
while(loc<src.Length&&src.IndexOf(separator,loc)>-1){
cnt++;
loc=src.IndexOf(separator,loc)+separator.Length;
if(loc>=src.Length) break;
}
if(loc<=src.Length-1)cnt++;
str=new string[cnt];
loc=0;
cnt=0;
while(loc<src.Length&&src.IndexOf(separator,loc)>-1){
loc=src.IndexOf(separator,loc);
str[cnt]="";
for(int i=begin;i<loc;i++) str[cnt]+=src[i].ToString();
loc+=separator.Length;
begin=loc;
if(loc>=src.Length)break;
cnt++;
}
if(loc<=src.Length-1){
for(int i=loc;i<=src.Length-1;i++) str[cnt]+=src[i].ToString();
}
return str;
}
else return str;
}
else return str;
}
///////////////////////////////////// Internal functions /////////////////////////////////////
protected string MakeBlank(string src,int start,int end){
if(start==end||src.Trim().Length==0) return src;
else{
string temp,tempA;
tempA=src.Substring(start,end-start+1);
if(tempA.IndexOf(comEOL)==-1){
tempA="";
for(int i=0;i<end-start+1;i++) tempA+=" ";
}
else{
int at=0,begin=0;
temp="";
while(tempA.IndexOf(comEOL,at)!=-1&&at<tempA.Length){
at=tempA.IndexOf(comEOL,at);
for(int i=begin;i<at;i++) temp+=" ";
temp+=comEOL;
at+=comEOL.Length;
begin=at;
}
if(at<=tempA.Length-1){
for(int i=at;i<=tempA.Length-1;i++) temp+=" ";
}
tempA=temp;
}
return src.Substring(0,start)+tempA+src.Substring(end+1);
}
}
protected string LineOfIndex(string src,int idx,out int begin){
int start=0;
bool equ=false;
for(int loc=idx;loc>=0;loc--){
if(src[loc]==comEOL[comEOL.Length-1]){
equ=false;
if(comEOL.Length>1){
if(loc-1>=comEOL.Length-2){
for(int j=0;j<=comEOL.Length-2;j++){
if(src[loc-j-1]==comEOL[comEOL.Length-j-2])equ=true;
else equ=false;
}
}
else equ=false;
}else equ=true;
if(equ){
start=loc+1;
break;
}
}
}
begin=start;
if(src.IndexOf(comEOL,start)==-1) return src.Substring(start);
else return src.Substring(start,src.IndexOf(comEOL,start)-start);
}
protected bool OnTheContainer(string str,int idx){
if(without.GetUpperBound(0)!=-1&&without.GetUpperBound(1)!=-1){
int cnt=without.GetUpperBound(0)+1;
int left=0,right=0;
for(int i=0;i<cnt;i++){
right=-1;
while(str.IndexOf(without[i,0],right+1)!=-1&&right+1<=str.Length){
left=str.IndexOf(without[i,0],right+1);
if(without[i,1].Length==0)
right=str.IndexOf(without[i,0],left+without[i,0].Length);
else
right=str.IndexOf(without[i,1],left+without[i,0].Length);
if(right==-1)break;
else if(idx>left&&idx<right)return true;
}
}
return false;
}
else return false;
}
protected string CleaningSpilthEOL(string src_ini){
strA=src_ini;
if(comCleanSpilthEOL){
for(int i=0;i<3;i++) strA=strA.Replace(comEOL+comEOL,comEOL);
while(true){
if(strA.IndexOf(comEOL)==0) strA=strA.Substring(comEOL.Length);
else break;
}
}
return strA;
}
///////////////////////////////////// public attrib /////////////////////////////////////
public string EOL{
get{
return comEOL;
}
set{
comEOL=value;
}
}
public bool CleanSpilthEOL{
get{
return comCleanSpilthEOL;
}
set{
comCleanSpilthEOL=value;
}
}
public int Count{
get{
if(info.GetUpperBound(0)!=-1&&info.GetUpperBound(1)!=-1){
return info.GetUpperBound(0)+1;
}
else return 0;
}
}
public void GetInfo(int index,out int start,out int end,out int type){
if(index<this.Count){
start=info[index,1];
end=info[index,2];
type=info[index,0];
}
else{
start=0;
end=0;
type=0;
}
}
}
}
推荐文章简介:
WSDL: 描述你的Web服务柴晓路2001-8-13 本文最初由 IBM developerWorks 中国网站发表,其网址是http://www.ibm.com/developerWorks/cn/Web Service “Stack”在我的先前的文章中,我已经介绍过Web服务的整个技术体系
虽然在Windows里面操作INI并不是一件难事,但为了使用更强大的功能,就需要编写自己的INI解析程序,这是DWG用C#实现的一个INI解析器
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
1
return CleaningSpilthEOL(strA);
2
}
3
else{
4
SendErrorMsg("Source ini string empty exception when cleaning comments.");
5
return src_ini;
6
}
7
}
8
public void ResetDefaultOptions(){
9
iniEOL="\r\n";
10
iniCleanSpilthEOL=true;
11
iniProcError=false;
12
iniCaseSensitive=true;
13
cm.EOL=iniEOL;
14
cm.CleanSpilthEOL=iniCleanSpilthEOL;
15
}
16
public string DeleteKey(string src_ini,string mainkey,string subkey){
17
if(subkey.Trim().Length==0) return DeleteMainkey(src_ini,mainkey);
18
else return DeleteSubkey(src_ini,mainkey,subkey);
19
}
20
/////////////////////////////// Internal functions ////////////////////////////////
21
protected string CreateMainkey(string src_ini,string mainkey){
22
if(mainkey.Trim().Length==0){
23
SendErrorMsg(@"Internal:create mainkey error,must specify the mainkey name.");
24
return src_ini;
25
}
26
else{
27
if(TestMainkeyExist(src_ini,mainkey))src_ini=CleaningSpilthEOL(DeleteMainkey(src_ini,mainkey));
28
src_ini+=iniEOL+"["+mainkey.Trim()+"]"+iniEOL;
29
SendOkMsg("Internal:create mainkey \""+mainkey.Trim()+"\" OK.");
30
return CleaningSpilthEOL(src_ini);
31
}
32
}
33
protected string CreateSubkey(string src_ini,string mainkey,string subkey,string val){
34
if(TestMainkeyExist(src_ini,mainkey)){
35
if(TestSubkeyExist(src_ini,mainkey,subkey)) return SetKeyValue(src_ini,mainkey,subkey,val);
36
strAA=EmptyComments(src_ini);
37
cm.WithoutContainer();
38
strA=cm.EmptyComments(strAA,"\"","\"");
39
mainkey=CaseProc(mainkey.Trim());
40
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
41
mc=regex.Matches(strA);
42
int sloc=0,length=0;
43
for(int i=0;i<mc.Count;i++)
44
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length>0)
45
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
46
sloc=mc[i].Index+mc[i].Value.Length;
47
if((i+1)!=mc.Count)length=mc[i+1].Index-sloc;
48
else length=strA.Substring(sloc).Length;
49
break;
50
}
51
strA=src_ini.Substring(0,sloc+length)+iniEOL+subkey+"="+val.Trim()+iniEOL+src_ini.Substring(sloc+length);
52
SendOkMsg("Create the subkey:\""+mainkey.Trim()+"."+subkey.Trim()+"\" OK.");
53
return CleaningSpilthEOL(strA);
54
}
55
else return src_ini;
56
}
57
protected string DeleteMainkey(string src_ini,string mainkey){
58
if(TestMainkeyExist(src_ini,mainkey)){
59
strAA=EmptyComments(src_ini);
60
cm.WithoutContainer();
61
strA=cm.EmptyComments(strAA,"\"","\"");
62
mainkey=CaseProc(mainkey.Trim());
63
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
64
mc=regex.Matches(strA);
65
int sloc=0,length=0;
66
for(int i=0;i<mc.Count;i++)
67
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length>0)
68
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
69
sloc=mc[i].Index;
70
if((i+1)!=mc.Count)length=mc[i+1].Index-sloc;
71
else length=strA.Substring(sloc).Length;
72
break;
73
}
74
strA=src_ini.Substring(0,sloc)+iniEOL+src_ini.Substring(sloc+length);
75
SendOkMsg("Delete the mainkey:\""+mainkey.Trim()+"\" OK.");
76
return CleaningSpilthEOL(strA);
77
}
78
else return src_ini;
79
}
80
protected string DeleteSubkey(string src_ini,string mainkey,string subkey){
81
if(TestSubkeyExist(src_ini,mainkey,subkey)){
82
strAA=EmptyComments(src_ini);
83
cm.WithoutContainer();
84
strA=cm.EmptyComments(strAA,"\"","\"");
85
mainkey=CaseProc(mainkey.Trim());
86
subkey=CaseProc(subkey.Trim());
87
regex=new Regex(@"(\r\n)?\[[\x20\ua1a1]*\S+[\x20\ua1a1]*\]\s*(\r\n)?");
88
mc=regex.Matches(strA);
89
int sloc=0,length=0;
90
for(int i=0;i<mc.Count;i++)
91
if(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim().Replace("\ua1a1","").Length>0)
92
if(CaseProc(mc[i].Value.Replace(iniEOL,"").Replace("[","").Replace("]","").Trim())==mainkey){
93
sloc=mc[i].Index+mc[i].Value.Length;
94
if((i+1)!=mc.Count)length=mc[i+1].Index-sloc;
95
else length=strA.Substring(sloc).Length;
96
break;
97
}
98
strB=strAA.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
99
strBB=src_ini.Substring(sloc,length).Replace(iniEOL,"\n").Split(''\n'');
100
strA="";
101
for(int i=0;i<strB.Length;i++)
102
if(strB[i].Trim().Replace("\ua1a1","").Length!=0){
103
if(strB[i].Trim().Replace("\ua1a1","").Split(''='').Length>1){
104
if(CaseProc(strB[i].Split(''='')[0].Trim())!=subkey)strA+=strBB[i]+iniEOL;
105
}else strA+=strBB[i]+iniEOL;
106
}else strA+=strBB[i]+iniEOL;
107
SendOkMsg("Delete the subkey:\""+mainkey.Trim()+"."+subkey+"\" OK.");
108
strA=src_ini.Substring(0,sloc)+strA+src_ini.Substring(sloc+length);
109
return CleaningSpilthEOL(strA);
110
}
111
else return src_ini;
112
}
113
protected string EmptyComments(string src_ini){
114
if(src_ini.Trim().Length!=0){
115
cm.WithoutContainer("\"","\"","\''","\''");
116
strA=cm.EmptyComments(src_ini,@"/*",@"*/",@"//","",@";","");
117
SendOkMsg(@"Internal:empty comments OK.");
118
return strA;
119
}
120
else{
121
SendErrorMsg(@"Internal:source ini empty exception.");
122
return src_ini;
123
}
124
}
125
protected bool TestMainkeyExist(string src_ini,string mainkey){
126
strB=GetMainkeyNames(src_ini);
127
if(!iniProcError){
128
mainkey=CaseProc(mainkey.Trim());
129
if(mainkey.Length==0){
130
SendErrorMsg("Test mainkey exist exception:must specify the mainkey name.");
131
return false;
132
}
133
for(int i=0;i<strB.Length;i++)
134
if(CaseProc(strB[i])==mainkey){
135
SendOkMsg("The main key:\""+mainkey+"\" to be exist.");
136
return true;
137
}
138
SendOkMsg("The main key:\""+mainkey+"\" not exist.");
139
return false;
140
}
141
else return false;
142
}
143
protected bool TestSubkeyExist(string src_ini,string mainkey,string subkey){
144
if(TestMainkeyExist(src_ini,mainkey)){
145
strB=new string[]{""};
146
strB=GetSubkeyNames(src_ini,mainkey);
147
if(!iniProcError){
148
subkey=CaseProc(subkey.Trim());
149
if(subkey.Length==0){
150
SendErrorMsg("Test subkey exist exception:must specify the subkey name.");
151
return false;
152
}
153
if(strB.Length>0){
154
for(int i=0;i<strB.Length;i++)
155
if(CaseProc(strB[i])==subkey){
156
SendOkMsg("The key:\""+mainkey.Trim()+"."+subkey+"\" to be exist.");
157
return true;
158
}
159
}
160
SendOkMsg("The key:\""+mainkey.Trim()+"."+subkey+"\" not exist.");
161
return false;
162
}
163
else return false;
164
}
165
else return false;
166
}
167
private string CleaningSpilthEOL(string src_ini){
168
strA=src_ini;
169
if(iniCleanSpilthEOL){
170
for(int i=0;i<3;i++) strA=strA.Replace(iniEOL+iniEOL,iniEOL);
171
while(strA.IndexOf(iniEOL)==0){
172
strA=strA.Substring(iniEOL.Length);
173
}
174
}
175
return strA;
176
}
177
private void SendOkMsg(string msg){
178
iniProcError=false;
179
OnDebug(iniProcError,msg);
180
}
181
private void SendErrorMsg(string msg){
182
iniProcError=true;
183
OnDebug(iniProcError,msg);
184
}
185
private void OnDefaultDebugMessage(bool error,string msg){
186
}
187
private string CaseProc(string str){
188
if(iniCaseSensitive) return str;
189
else return str.ToLower();
190
}
191
/////////////////////////////// Attributes function ///////////////////////////////
192
public string EOL{
193
get{
194
return iniEOL;
195
}
196
set{
197
iniEOL=value;
198
cm.EOL=iniEOL;
199
}
200
}
201
public bool CleanSpilthEOL{
202
get{
203
return iniCleanSpilthEOL;
204
}
205
set{
206
iniCleanSpilthEOL=value;
207
cm.CleanSpilthEOL=iniCleanSpilthEOL;
208
}
209
}
210
public bool CaseSensitive{
211
get{
212
return iniCaseSensitive;
213
}
214
set{
215
iniCaseSensitive=value;
216
}
217
}
218
public bool Error{
219
get{
220
return iniProcError;
221
}
222
}
223
}
224
public class Convert{
225
public string DecodeString(string src){
226
if(src.Trim().Length>0){
227
src=src.Replace(@"\a","\a");
228
src=src.Replace(@"\b","\b");
229
src=src.Replace(@"\t","\t");
230
src=src.Replace(@"\r","\r");
231
src=src.Replace(@"\v","\v");
232
src=src.Replace(@"\f","\f");
233
src=src.Replace(@"\n","\n");
234
src=src.Replace(@"\d","\x22");
235
src=src.Replace(@"\s","\x27");
236
src=src.Replace(@"\m","\\");
237
int loc=0,begin=0;
238
string temp="";
239
while(loc<src.Length&&src.IndexOf(@"\",loc)>-1){
240
loc=src.IndexOf(@"\",loc);
241
for(int i=begin;i<loc;i++) temp+=src[i].ToString();
242
temp+=StringToValue(src,ref loc);
243
begin=loc;
244
if(loc>=src.Length)break;
245
}
246
if(loc<=src.Length-1){
247
for(int i=loc;i<=src.Length-1;i++)
248
temp+=src[i].ToString();
249
}
250
return temp;
251
}
252
else return src;
253
}
254
public string EncodeString(string src){
255
if(src.Trim().Length>0){
256
src=src.Replace("\\",@"\m");
257
src=src.Replace("\a",@"\a");
258
src=src.Replace("\b",@"\b");
259
src=src.Replace("\t",@"\t");
260
src=src.Replace("\r",@"\r");
261
src=src.Replace("\v",@"\v");
262
src=src.Replace("\f",@"\f");
263
src=src.Replace("\n",@"\n");
264
src=src.Replace("\x22",@"\d");
265
src=src.Replace("\x27",@"\s");
266
&nb
sp;string temp="";![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
20
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
21
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
26
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
33
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
57
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
80
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
103
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
113
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
114
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
124
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
125
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
143
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
144
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
145
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
153
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
159
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
167
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
174
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
177
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/InBlock.gif)
180
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
181
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
185
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
186
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
187
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
191
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
192
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
193
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
196
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
200
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
201
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
202
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
205
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
209
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
210
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
211
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
214
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
217
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
218
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
219
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
222
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
223
![](/Images/OutliningIndicators/None.gif)
224
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
225
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
226
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/InBlock.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
240
![](/Images/OutliningIndicators/InBlock.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/InBlock.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
246
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/InBlock.gif)
249
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
255
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
256
![](/Images/OutliningIndicators/InBlock.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/InBlock.gif)
261
![](/Images/OutliningIndicators/InBlock.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/InBlock.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
for(int i=0;i<src.Length;i++){
if(src[i]<=''\x1f''||(src[i]>=''\x7f''&&src[i]<=''\xff'')) temp+=ToHexString(src[i]);
else temp+=src[i].ToString();
}
return temp;
}
else return src;
}
public string StringToValue(string src,ref int loc){
string temp;
if(loc+1<src.Length){
if(loc+1<src.Length-1){
temp=src.Substring(loc+1);
ushort a=0,b=0,c=0;
if(temp[0]==''0''){
if(temp[1]>=''0''&&temp[1]<=''7''){
a=(ushort)(temp[1]-''0'');
if(temp.Length>=3){
if(temp[2]>=''0''&&temp[2]<=''7''){
b=(ushort)(temp[2]-''0'');
if(temp.Length>=4){
if(temp[3]>=''0''&&temp[3]<=''7''){
c=(ushort)(temp[3]-''0'');
loc+=5;
return ((char)(a*64+b*8+c)).ToString();
}
else{
loc+=4;
return ((char)(a*8+b)).ToString();
}
}
else{
loc+=4;
return ((char)(a*8+b)).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=2;
return @"\0";
}
}
else if(temp[0].ToString().ToLower()=="x"){
if( (temp[1]>=''0''&&temp[1]<=''9'') || ( (temp[1]|0x20) >=''a'' && (temp[1]|0x20) <=''f'') ){
if(temp[1]<=''9''){
a=(ushort)(temp[1]-''0'');
}
else{
a=(ushort)((temp[1]|0x20)-''a''+10);
}
if(temp.Length>=3){
if( (temp[2]>=''0''&&temp[2]<=''9'') || ( (temp[2]|0x20) >=''a'' && (temp[2]|0x20) <=''f'') ){
if(temp[2]<=''9''){
b=(ushort)(temp[2]-''0'');
}
else{
b=(ushort)((temp[2]|0x20)-''a''+10);
}
loc+=4;
return ((char)(a*16+b)).ToString();
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=3;
return ((char)a).ToString();
}
}
else{
loc+=2;
return @"\"+temp[0].ToString();
}
}
else{
loc++;
return @"\";
}
}
else{
loc+=2;
return @"\"+src[loc-1].ToString();
}
}
else{
loc++;
return @"\";
}
}
protected string ToHexString(char val){
ushort baseradix=16;
return @"\x"+HexCode((ushort)(val/baseradix))+HexCode((ushort)(val%baseradix));
}
protected string ToOctString(char val){
int baseradix=8,a=0,b=0,c=0,v;
v=(int)val;
if(v>baseradix*baseradix)
a=v/(baseradix*baseradix);
if(v>baseradix)
b=(v-a*baseradix*baseradix)/baseradix;
c=(ushort)(v-a*baseradix*baseradix-b*baseradix);
return @"\0"+a.ToString()+b.ToString()+c.ToString();
}
private string HexCode(ushort val){
val=(ushort)(val%16);
string temp=val.ToString();
if(val>9)
{
switch(val){
case 10:
temp="a";
break;
case 11:
temp="b";
break;
case 12:
temp="c";
break;
case 13:
temp="d";
break;
case 14:
temp="e";
break;
case 15:
temp="f";
break;
}
}
return temp;
}
}
public class Comment{
private string comEOL,strA;
private string [] strB;
private const char splitor='','';
//
private int [,] info;
private string[,] without;
private bool comCleanSpilthEOL;
//
public Comment(){
ResetDefault();
}
public void ResetDefault(){
comEOL="\r\n";
info=new int[0,0];
without=new string[0,0];
comCleanSpilthEOL=true;
}
///////////////////////////////////// Public Functions /////////////////////////////////////
public void WithoutContainer(params string [] para){
if(para.GetUpperBound(0)==-1){
without=new string[0,0];
}
else{
int count=para.GetUpperBound(0)+1;
int cnt=count/2;
if(count%2==1)cnt++;
without=new string[cnt,2];
for(int i=0,j=0;i<cnt;i++){
without[i,0]=para[j++].Trim();
if(j+1>=count)
without[i,1]="";
else
without[i,1]=para[j++].Trim();
}
}
info=new int[0,0];
}
public void ProcessComments(string src,params string[] para){
if(src==null)src="";
strA="";
info=new int[0,0];
if(src.Trim().Length>0&¶.GetUpperBound(0)!=-1) {
int count=para.GetUpperBound(0)+1;
int cnt=count/2;
if(count%2==1)cnt++;
string [,]keyword=new String[cnt,3];
for(int i=0,j=0;i<cnt;i++){
keyword[i,0]=i.ToString();
keyword[i,1]=para[j++].Trim();
if(j+1>=count)
keyword[i,2]="";
else
keyword[i,2]=para[j++].Trim();
}
//check double first
int loc,end,begin;
string temp;
bool prev=false;
strA=src;
string al="";
for(int z=0;z<2;z++){
for(int i=0;i<cnt;i++){
if(z==0){if(keyword[i,2].Length==0) continue;}
else {if(keyword[i,2].Length>0) continue;}
loc=0;
while(strA.IndexOf(keyword[i,1],loc)!=-1&&loc<strA.Length){
loc=strA.IndexOf(keyword[i,1],loc);
temp=LineOfIndex(strA,loc,out begin);
if(OnTheContainer(temp,loc-begin)){
loc+=keyword[i,1].Length;
continue;
}
else{ //checking if on prefore
prev=false;
for(int j=0;j<cnt;j++){
if(j!=i){
if(temp.IndexOf(keyword[j,1])!=-1){
if(!OnTheContainer(temp,temp.IndexOf(keyword[j,1]))){
if(temp.IndexOf(keyword[j,1])<loc-begin){
prev=true;
break;
}
}
}
}
}
if(!prev){
end=loc+keyword[i,1].Length;
if(end>=strA.Length-1)
end=strA.Length-1;
if(z==0){
end=strA.IndexOf(keyword[i,2],end);
if(end==-1){
end=strA.Length-1;
begin=end+1;
}
else{
end+=keyword[i,2].Length-1;
begin=end+1;
}
}
else {
end=strA.IndexOf(comEOL,end);
if(end==-1){
end=strA.Length-1;
begin=end+1;
}
else{
end+=comEOL.Length-1;
begin=end+1;
}
}
strA=MakeBlank(strA,loc,end);
if(al.Length!=0)al+=splitor.ToString();
al+=i.ToString()+splitor.ToString()+loc.ToString()+splitor.ToString()+end.ToString();
loc=begin;
if(begin>=strA.Length)break;
}
else{
loc+=keyword[i,1].Length;
}
}//else
}//while
}//for
}//for
strB=al.Split(splitor);
count=strB.Length/3;
if(count!=0){
info=new int[count,3];
for(cnt=0,begin=0;cnt<count;cnt++){
for(loc=0;loc<3;loc++)
info[cnt,loc]=(int)Int32.Parse(strB[begin++]);
}
}
}
}
public string EmptyComments(string src,params string[] para){
if(src==null)src="";
strA="";
ProcessComments(src,para);
return strA;
}
public string CleanComments(string src,params string[] para){
if(src==null)src="";
strA="";
ProcessComments(src,para);
strB=Split(strA,comEOL);
if(strB.Length>1){
strA="";
for(int i=0;i<strB.Length;i++){
strA+=strB[i].Trim()+comEOL;
}
return CleaningSpilthEOL(strA);
}
else return CleaningSpilthEOL(strB[0].Trim());
}
public static string[] Split(string src,string separator){
if(src==null)src="";
string [] str=new string[1]{src};
if(src.Trim().Length!=0){
if(src.IndexOf(separator)>-1){
int cnt=0,loc=0,begin=0;
while(loc<src.Length&&src.IndexOf(separator,loc)>-1){
cnt++;
loc=src.IndexOf(separator,loc)+separator.Length;
if(loc>=src.Length) break;
}
if(loc<=src.Length-1)cnt++;
str=new string[cnt];
loc=0;
cnt=0;
while(loc<src.Length&&src.IndexOf(separator,loc)>-1){
loc=src.IndexOf(separator,loc);
str[cnt]="";
for(int i=begin;i<loc;i++) str[cnt]+=src[i].ToString();
loc+=separator.Length;
begin=loc;
if(loc>=src.Length)break;
cnt++;
}
if(loc<=src.Length-1){
for(int i=loc;i<=src.Length-1;i++) str[cnt]+=src[i].ToString();
}
return str;
}
else return str;
}
else return str;
}
///////////////////////////////////// Internal functions /////////////////////////////////////
protected string MakeBlank(string src,int start,int end){
if(start==end||src.Trim().Length==0) return src;
else{
string temp,tempA;
tempA=src.Substring(start,end-start+1);
if(tempA.IndexOf(comEOL)==-1){
tempA="";
for(int i=0;i<end-start+1;i++) tempA+=" ";
}
else{
int at=0,begin=0;
temp="";
while(tempA.IndexOf(comEOL,at)!=-1&&at<tempA.Length){
at=tempA.IndexOf(comEOL,at);
for(int i=begin;i<at;i++) temp+=" ";
temp+=comEOL;
at+=comEOL.Length;
begin=at;
}
if(at<=tempA.Length-1){
for(int i=at;i<=tempA.Length-1;i++) temp+=" ";
}
tempA=temp;
}
return src.Substring(0,start)+tempA+src.Substring(end+1);
}
}
protected string LineOfIndex(string src,int idx,out int begin){
int start=0;
bool equ=false;
for(int loc=idx;loc>=0;loc--){
if(src[loc]==comEOL[comEOL.Length-1]){
equ=false;
if(comEOL.Length>1){
if(loc-1>=comEOL.Length-2){
for(int j=0;j<=comEOL.Length-2;j++){
if(src[loc-j-1]==comEOL[comEOL.Length-j-2])equ=true;
else equ=false;
}
}
else equ=false;
}else equ=true;
if(equ){
start=loc+1;
break;
}
}
}
begin=start;
if(src.IndexOf(comEOL,start)==-1) return src.Substring(start);
else return src.Substring(start,src.IndexOf(comEOL,start)-start);
}
protected bool OnTheContainer(string str,int idx){
if(without.GetUpperBound(0)!=-1&&without.GetUpperBound(1)!=-1){
int cnt=without.GetUpperBound(0)+1;
int left=0,right=0;
for(int i=0;i<cnt;i++){
right=-1;
while(str.IndexOf(without[i,0],right+1)!=-1&&right+1<=str.Length){
left=str.IndexOf(without[i,0],right+1);
if(without[i,1].Length==0)
right=str.IndexOf(without[i,0],left+without[i,0].Length);
else
right=str.IndexOf(without[i,1],left+without[i,0].Length);
if(right==-1)break;
else if(idx>left&&idx<right)return true;
}
}
return false;
}
else return false;
}
protected string CleaningSpilthEOL(string src_ini){
strA=src_ini;
if(comCleanSpilthEOL){
for(int i=0;i<3;i++) strA=strA.Replace(comEOL+comEOL,comEOL);
while(true){
if(strA.IndexOf(comEOL)==0) strA=strA.Substring(comEOL.Length);
else break;
}
}
return strA;
}
///////////////////////////////////// public attrib /////////////////////////////////////
public string EOL{
get{
return comEOL;
}
set{
comEOL=value;
}
}
public bool CleanSpilthEOL{
get{
return comCleanSpilthEOL;
}
set{
comCleanSpilthEOL=value;
}
}
public int Count{
get{
if(info.GetUpperBound(0)!=-1&&info.GetUpperBound(1)!=-1){
return info.GetUpperBound(0)+1;
}
else return 0;
}
}
public void GetInfo(int index,out int start,out int end,out int type){
if(index<this.Count){
start=info[index,1];
end=info[index,2];
type=info[index,0];
}
else{
start=0;
end=0;
type=0;
}
}
}
}