SNAP Library, Developer Reference  2012-10-02 12:56:23
SNAP, a general purpose network analysis and graph mining library
 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 }