SNAP Library , Developer Reference
2013-01-07 14:03:36
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
00001 00002 // Unicode-Definition 00003 00004 TUnicodeDef TUnicodeDef::UnicodeDef; 00005 00006 TStr TUnicodeDef::GetDfFNm(){ 00007 return TSysProc::GetExeFNm().GetFPath()+"UnicodeDef.Bin"; 00008 } 00009 00011 // Unicode-String 00012 TUStr::TUStr(const TStr& Str){ 00013 AssertUnicodeDefOk(); 00014 TUnicodeDef::GetDef()->DecodeUtf8(Str, UniChV); 00015 TIntV NfcUniChV; TUnicodeDef::GetDef()->Decompose(UniChV, NfcUniChV, true); 00016 UniChV=NfcUniChV; 00017 } 00018 00019 void TUStr::ToLowerCase(){ 00020 TUnicodeDef::GetDef()->ToSimpleLowerCase(UniChV); 00021 } 00022 00023 void TUStr::ToUpperCase(){ 00024 TUnicodeDef::GetDef()->ToSimpleUpperCase(UniChV); 00025 } 00026 00027 void TUStr::ToStarterCase(){ 00028 TIntV StarterUniChV; 00029 TUnicodeDef::GetDef()->ExtractStarters(UniChV, StarterUniChV); 00030 TUnicodeDef::GetDef()->Decompose(StarterUniChV, UniChV, true); 00031 } 00032 00033 void TUStr::GetWordBoundPV(TBoolV& WordBoundPV){ 00034 TUnicodeDef::GetDef()->FindWordBoundaries(UniChV, WordBoundPV); 00035 } 00036 00037 void TUStr::GetWordUStrV(TUStrV& WordUStrV){ 00038 // clear word vector 00039 WordUStrV.Clr(); 00040 // create boundaries 00041 TBoolV WordBoundPV; GetWordBoundPV(WordBoundPV); 00042 IAssert(Len()==WordBoundPV.Len()-1); 00043 IAssert((WordBoundPV.Len()>0)&&(WordBoundPV.Last())); 00044 // traverse characters and bounds 00045 int UniChs=Len(); TIntV WordUniChV; 00046 for (int UniChN=0; UniChN<=UniChs; UniChN++){ 00047 if ((UniChN==UniChs)||(WordBoundPV[UniChN+1])){ // finish or word-boundary 00048 if (UniChN<UniChs){ // if not finish 00049 // if last-word-char or single-alphabetic-char 00050 if ((!WordUniChV.Empty())||(IsAlphabetic(UniChV[UniChN]))){ 00051 WordUniChV.Add(UniChV[UniChN]); // add char 00052 } 00053 } 00054 if (!WordUniChV.Empty()){ // add current word to vector 00055 TUStr WordUStr(WordUniChV); // construct word from char-vector 00056 WordUStrV.Add(WordUStr); // add word to word-vector 00057 WordUniChV.Clr(false); // clear char-vector 00058 } 00059 } else { 00060 // add character to char-vector 00061 WordUniChV.Add(UniChV[UniChN]); 00062 } 00063 } 00064 } 00065 00066 TStr TUStr::GetStr() const { 00067 TStr Str=TUnicodeDef::GetDef()->EncodeUtf8Str(UniChV); 00068 return Str; 00069 } 00070 00071 TStr TUStr::GetStarterStr() const { 00072 TIntV UniChV1; TIntV UniChV2; 00073 TUnicodeDef::GetDef()->ExtractStarters(UniChV, UniChV1); 00074 TUnicodeDef::GetDef()->Decompose(UniChV1, UniChV2, true); 00075 TStr Str=TUnicodeDef::GetDef()->EncodeUtf8Str(UniChV2); 00076 return Str; 00077 } 00078 00079 TStr TUStr::GetStarterLowerCaseStr() const { 00080 TIntV UniChV1; TIntV UniChV2; TIntV UniChV3; 00081 TUnicodeDef::GetDef()->GetSimpleLowerCase(UniChV, UniChV1); 00082 TUnicodeDef::GetDef()->ExtractStarters(UniChV1, UniChV2); 00083 TUnicodeDef::GetDef()->Decompose(UniChV2, UniChV3, true); 00084 TStr Str=TUnicodeDef::GetDef()->EncodeUtf8Str(UniChV3); 00085 return Str; 00086 } 00087 00088 int TUStr::GetScriptId(const TStr& ScriptNm){ 00089 return TUnicodeDef::GetDef()->ucd.GetScriptByName(ScriptNm); 00090 } 00091 00092 TStr TUStr::GetScriptNm(const int& ScriptId){ 00093 return TUnicodeDef::GetDef()->ucd.GetScriptName(ScriptId); 00094 } 00095 00096 int TUStr::GetChScriptId(const int& UniCh){ 00097 return TUnicodeDef::GetDef()->ucd.GetScript(UniCh); 00098 } 00099 00100 TStr TUStr::GetChScriptNm(const int& UniCh){ 00101 return GetScriptNm(GetChScriptId(UniCh)); 00102 } 00103 00104 TStr TUStr::GetChNm(const int& UniCh){ 00105 TStr UniChNm(TUnicodeDef::GetDef()->ucd.GetCharNameS(UniCh)); 00106 return UniChNm; 00107 } 00108 00109 TStr TUStr::GetChTypeStr(const int& UniCh){ 00110 TChA ChTypeChA; 00111 ChTypeChA+='['; 00112 if (IsCase(UniCh)){ChTypeChA+="Case,";} 00113 if (IsUpperCase(UniCh)){ChTypeChA+="UpperCase,";} 00114 if (IsLowerCase(UniCh)){ChTypeChA+="LowerCase,";} 00115 if (IsAlphabetic(UniCh)){ChTypeChA+="Alphabetic,";} 00116 if (IsMath(UniCh)){ChTypeChA+="Math,";} 00117 if (ChTypeChA.LastCh()=='['){ChTypeChA+=']';} 00118 else {ChTypeChA[ChTypeChA.Len()-1]=']';} 00119 return ChTypeChA; 00120 } 00121 00122 bool TUStr::IsCase(const int& UniCh){ 00123 TUniChInfo ChInfo; 00124 if (TUnicodeDef::GetDef()->ucd.IsGetChInfo(UniCh, ChInfo)){ 00125 return ChInfo.IsCased();} 00126 else {return false;} 00127 } 00128 00129 bool TUStr::IsUpperCase(const int& UniCh){ 00130 TUniChInfo ChInfo; 00131 if (TUnicodeDef::GetDef()->ucd.IsGetChInfo(UniCh, ChInfo)){ 00132 return ChInfo.IsUppercase();} 00133 else {return false;} 00134 } 00135 00136 bool TUStr::IsLowerCase(const int& UniCh){ 00137 TUniChInfo ChInfo; 00138 if (TUnicodeDef::GetDef()->ucd.IsGetChInfo(UniCh, ChInfo)){ 00139 return ChInfo.IsLowercase();} 00140 else {return false;} 00141 } 00142 00143 bool TUStr::IsAlphabetic(const int& UniCh){ 00144 TUniChInfo ChInfo; 00145 if (TUnicodeDef::GetDef()->ucd.IsGetChInfo(UniCh, ChInfo)){ 00146 return ChInfo.IsAlphabetic();} 00147 else {return false;} 00148 } 00149 00150 bool TUStr::IsMath(const int& UniCh){ 00151 TUniChInfo ChInfo; 00152 if (TUnicodeDef::GetDef()->ucd.IsGetChInfo(UniCh, ChInfo)){ 00153 return ChInfo.IsMath();} 00154 else {return false;} 00155 } 00156 00157 TStr TUStr::EncodeUtf8(const int& UniCh) { 00158 AssertUnicodeDefOk(); 00159 return TUnicodeDef::GetDef()->EncodeUtf8Str(TIntV::GetV(UniCh)); 00160 }