SNAP Library 2.2, User Reference  2014-03-11 19:15:55
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
unicodestring.cpp
Go to the documentation of this file.
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 }
00161