// ========== This file is under LGPL, the GNU Lesser General Public Licence // ========== Dialing Graphematical Module (www.aot.ru) // ========== Copyright by Alexey Sokirko (1996-2001) // These subroutines defines NON-Context graphematical descriptors #include "StdGraph.h" #include "GraphmatFile.h" #include "GraphanDicts.h" void CGraphmatFile :: InitNonContextDescriptors (CGraLine& L) { bool fl_ra=false, /* rus alpha */ fl_la=false, /* lat alpha */ fl_lw=false, /* lower alpha */ fl_up=false, /* upper alpha */ fl_decimal_number=false; size_t TokenLength = L.GetTokenLength(); const char* Token = L.GetToken(); BYTE first_char = (BYTE)Token[0]; if (L.IsSpace()) { L.SetDes (ODel); L.SetDes (OSpc); return; } if (L.IsEOLN()) { L.SetDes (ODel); L.SetDes (OEOLN); return; } if (L.IsIdent()) { L.SetDes (ODSC); return; } if (L.IsElectronicAddress()) { L.SetDes (OElectAddr); L.SetDes(ODSC); return; } if (L.IsNotPrint()) { L.SetDes ( ODel); if (L.IsParagraphChar ()) L.SetDes (OParagraph); else L.SetDes (ONil); return; } if (L.IsPunct()) { L.SetDes (OPun); int BracketClassNo = isbracket(first_char); if (BracketClassNo) L.SetDes( (BracketClassNo == 1) ? OOpn : OCls); else if (first_char==cHyphenChar) L.SetDes(OHyp); if ( TokenLength > 1 ) L.SetDes(OPlu); return; } for (int i=0; i(Token),s, TokenLength); // приводим L.SetDes(ORLE); // говорим, что это русская лексема } } else if (fl_ra) L.SetDes(ORLE); else L.SetDes(OLLE); if ( fl_lw && !fl_up ) L.SetDes(OLw); if ( !fl_lw && fl_up ) L.SetDes(OUp); if (fl_lw && is_uppercase(first_char)) L.SetDes(OUpLw); return; } if ( ((BYTE) first_char == '\'') && (TokenLength == 1) ) { L.SetDes(ODel); L.SetDes (OPun); }; if ( (fl_decimal_number && !fl_la && !fl_ra) ) L.SetDes(ODC); if (fl_decimal_number && (fl_ra || fl_la)) L.SetDes(ODSC); if (L.GetDescriptors() == 0) L.SetDes(OUnk); }