|
Go to the documentation of this file.
35 mPreceedingSpace(false),
36 mPreceedingNewline(false),
44 mStringValue(rToken.mStringValue),
45 mOptionValue(rToken.mOptionValue),
46 mIntegerValue(rToken.mIntegerValue),
47 mFloatValue(rToken.mFloatValue),
48 mPreceedingSpace(rToken.mPreceedingSpace),
49 mPreceedingNewline(rToken.mPreceedingNewline),
50 mAttributes(rToken.mAttributes),
51 mAttributeCount(rToken.mAttributeCount)
348 if(ait->second.mType & String) return true;
358 if(ait->second.mType & Integer) return true;
368 if(ait->second.mType & Number) return true;
375 static const std::string emptystr= "";
379 if(!(ait->second.mType & String)) return emptystr;
380 return ait->second.mStringValue;
389 if(!(ait->second.mType & Integer)) return 0;
390 return ait->second.mIntegerValue;
399 if(!(ait->second.mType & Number)) return 0;
400 return ait->second.mFloatValue;
426 *pStream << std::endl;
427 *pStream << "<![CDATA[";
428 *pStream << std::endl;
430 std::string esc= "]]>";
433 while(pos < rData.size()) {
434 std::size_t next= rData.find(esc,pos);
435 if(next==std::string::npos) next=rData.size()+1;
437 *pStream << rData.substr(pos,next-pos);
439 if(next<=rData.size())
440 *pStream << "]]]]><![CDATA[>";
445 *pStream << std::endl;
447 *pStream << std::endl;
454 FD_DV( "Token::ReadVerbatim()");
465 if(pStream->eof()) { mType= None; return -1;};
469 if(c == '\n') { lc++; break; }
470 if(iscntrl(c)) break;
471 if(isblank(c)) break;
476 if(verb.size()<2) return -1;
477 if(verb.at(0) != '_') return -1;
478 if(verb.at(1) != '_') return -1;
479 FD_DV( "Token::ReadVerbatim(): mark " << verb);
483 if (pStream->eof()) { mType= None; return -1;};
491 if(c== verb.at(verb.size()-1)) {
493 if(vpos!=std::string::npos) {
507 static char Base64EncodingTable[]=
508 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
514 const char* src = pData;
517 unsigned char c0=0,c1=0,c2=0,c3=0;
524 c0= ((*src & 0xFC) >> 2);
525 c1= ((*src & 0x03) << 4);
532 c1|= ((*src & 0xF0) >> 4);
533 c2|= ((*src & 0x0F) << 2);
538 c2|= ((*src & 0xC0) >> 6);
540 *pStream << Base64EncodingTable[c0] << Base64EncodingTable[c1] <<
541 Base64EncodingTable[c2] << Base64EncodingTable[c3];
555 *pStream << Base64EncodingTable[c0] << Base64EncodingTable[c1] << "=== ";
558 *pStream << Base64EncodingTable[c0] << Base64EncodingTable[c1] <<
559 Base64EncodingTable[c2] << "== ";
578 char c1=pStream->get();
579 if(c1!= '=') return -1;
586 if(c1!= '=') return -1;
589 while(!pStream->eof()) {
590 if(pStream->peek()!= '=') break;
599 int c=0, d0=0, d1=0, d2=0;
613 if(c>= 'A' && c <= 'Z') { c-= 'A'; break; }
614 if(c>= 'a' && c <= 'z') { c-= 'a'; c+= ( 'Z'- 'A')+1; break; }
615 if(c>= '0' && c <= '9') { c-= '0'; c+= 2*( 'Z'- 'A')+2; break; }
616 if(c== '+') {c= 62; break; }
617 if(c== '/') {c= 63; break; }
618 if(c== '=') {c= 0xFF; break; };
624 if(step<=3) continue;
627 d0= ((cs[0] << 2) & 0xFC) | ((cs[1] >> 4) & 0x03);
628 d1= ((cs[1] << 4) & 0xF0) | ((cs[2] >> 2) & 0x0F);
629 d2= ((cs[2] << 6) & 0xC0) | (cs[3] & 0x3F);
631 if(cs[0]!= 0xFF && cs[1]!=0xFF) {*(dst++)=d0; cnt++;}
632 if(cs[1]!= 0xFF && cs[2]!=0xFF) {*(dst++)=d1; cnt++;}
633 if(cs[2]!= 0xFF && cs[3]!=0xFF) {*(dst++)=d2; cnt++;}
635 if(cs[3]==0xFF) break;
642 return step==0 ? lc : -1;
651 FD_DV( "Token::ReadSpace()");
656 if (pStream->eof()) return lc;
686 if (pStream->eof()) { return(lc);};
694 if (c == '\n') break;
695 if (c == '\r') break;
699 FD_DV( "Token::ReadSpace(): lc " << lc);
705 if(ait->second.mType != None) return;
707 ait->second.mStringValue, ait->second.mType,
708 ait->second.mIntegerValue, ait->second.mFloatValue);
709 ait->second.mType |= String;
729 if(numstr== "inf" || numstr== "+inf") {
730 ival = std::numeric_limits<Int>::max();
737 ival=std::numeric_limits<Int>::min()+1;
743 if(numstr== "true" || numstr== "True") {
750 if(numstr== "false" || numstr== "False") {
757 std::string::const_iterator cit=numstr.begin();
758 for(;cit!=numstr.end(); cit++) {
763 if(c== 'x' && iv==0 && cnt==2 && comma<0 && !minus)
764 {base = 16; continue;}
767 {minus = true; continue;}
769 if(c== '.' && comma<0 && base==10)
770 {comma = 0; continue;}
772 if(!isdigit(c) && base==10) break;
773 if(!isxdigit(c) && base==16) break;
776 if(c>= '0' && c<= '9') vc = c- '0';
777 else if(c>= 'a' && c<= 'f') vc = c- 'a' + 10;
778 else if(c>= 'A' && c<= 'F') vc = c- 'A' + 10;
782 if(comma>=0) comma++;
786 if(cit!=numstr.end()) ok= false;
793 for(;comma>0;comma--) {
802 if(comma<=0 && !minus) type |= Integer;
803 if(comma<=0 && !minus && base==16) type |= Integer16;
828 std::map<int,caiterator> sortnames;
830 sortnames[ait->second.mSort]=ait;
831 std::map<int,caiterator>::iterator sit;
832 for(sit=sortnames.begin(); sit!=sortnames.end(); sit++) {
862 static const std::string white= " \n\r\t\f";
863 if( mStringValue.find_first_of(white)!=std::string::npos)
877 std::string escstr= "<>&\"";
879 if(outstr.find_first_of(escstr)==std::string::npos) {
881 return outstr.size();
885 std::string::const_iterator cit=outstr.begin();
886 for(;cit!=outstr.end(); cit++) {
888 { *pStream << "<"; cc+=4; continue;}
890 { *pStream << ">"; cc+=4; continue;}
892 { *pStream << "&"; cc+=5; continue;}
894 { *pStream << """; cc+=6; continue;}
895 *pStream << *cit; cc++;
906 *pStream << delim << " ";
909 *pStream << " "; cc++;
925 std::string entref= "";
926 bool ctrlblank = false;
931 if(pStream->eof()) return -1;
939 if(isblank(c) && stop== ' ') break;
940 if(iscntrl(c) && stop== ' ') break;
946 if(iscntrl(c) && ctrlblank) continue;
948 if(iscntrl(c)) { c= ' '; ctrlblank= true;}
950 if(entref.size()!=0) {
954 if(c == ' ') return -1;
957 if(entref== "&") rString.append(1, '&');
958 else if(entref== """) rString.append(1, '"');
959 else if(entref== "'") rString.append(1, '\'');
960 else if(entref== "<") rString.append(1, '<');
961 else if(entref== ">") rString.append(1, '>');
963 else rString.append(entref);
969 if(c == '&') entref.append(1,c);
971 if(c != '&') rString.append(1,c);
975 if(stop== ' ' && rString.size()==0) return -1;
985 std::string entref= "";
990 if(pStream->eof()) break;
992 if(!pStream->good()) return -1;
998 if(pStream->eof()) break;
999 if(!pStream->good()) return -1;
1005 rString.append(1,c);
1016 FD_DV( "Token::ReadAttributes()");
1021 if(pStream->eof()) return -1;
1022 c = pStream->peek();
1023 if(!(isblank(c) || iscntrl(c))) break;
1030 if(pStream->eof()) return -1;
1031 c = pStream->peek();
1032 if(isblank(c) || iscntrl(c)) break;
1039 FD_DV( "Token::ReadAttributes(): aname " << aname);
1041 if(aname.size()==0) {
1046 if(pStream->eof()) return -1;
1047 c = pStream->peek();
1048 if(!(isblank(c) || iscntrl(c))) break;
1053 if(c!= '=') return -1;
1057 if(pStream->eof()) return -1;
1058 c = pStream->peek();
1059 if(!(isblank(c) || iscntrl(c))) break;
1078 FD_DV( "Token::ReadAttributes(): aval " << aval);
1097 if(pStream->eof()) return -1;
1098 c = pStream->peek();
1099 if(!(isalpha(c) || c== '_' || c== ':')) {
1100 p1 = pStream->get();
1101 if(pStream->eof()) return -1;
1102 p2 = pStream->peek();
1104 FD_DV( "Token::ReadMarkup: " << c << "-" << p1 << "-" << p2);
1107 FD_DV( "Token::ReadMarkup: sensed XML tag");
1111 if(pStream->eof()) return -1;
1112 c = pStream->peek();
1115 if(isblank(c) || iscntrl(c)) break;
1119 if(name.size()==0) return -1;
1123 if(pStream->eof()) return -1;
1124 c = pStream->peek();
1134 if(pStream->eof()) return -1;
1135 c = pStream->peek();
1138 if(isblank(c) || iscntrl(c)) break;
1142 if(name.size()==0) return -1;
1143 if(c!= '>') return -1;
1148 if(p1== '!' && p2== '-') {
1149 FD_DV( "Token::ReadMarkup: sensed XML comment <" << p1 << p2);
1151 if(pStream->eof()) return -1;
1153 if(c!= '-') return -1;
1158 if(pStream->eof()) return -1;
1159 c = pStream->peek();
1160 if(c3== '-' && c2== '-' && c == '>') break;
1164 FD_DV( "Token::ReadMarkup: sensed XML comment end " << c3 << c2 << c);
1167 if(p1== '!' && (p2== 'D' || p2== 'd')) {
1168 FD_DV( "Token::ReadMarkup doc.type.dec. not implemented (!)");
1171 if(pStream->eof()) return -1;
1172 c = pStream->peek();
1179 if(p1== '!' && p2== '[' ) {
1180 FD_DV( "Token::ReadMarkup: sense CDATA?");
1183 if(pStream->eof()) return -1;
1184 if(pStream->get()!= 'C') return -1;
1185 if(pStream->eof()) return -1;
1186 if(pStream->get()!= 'D') return -1;
1187 if(pStream->eof()) return -1;
1188 if(pStream->get()!= 'A') return -1;
1189 if(pStream->eof()) return -1;
1190 if(pStream->get()!= 'T') return -1;
1191 if(pStream->eof()) return -1;
1192 if(pStream->get()!= 'A') return -1;
1193 if(pStream->eof()) return -1;
1194 if(pStream->get()!= '[') return -1;
1196 FD_DV( "Token::ReadMarkup: sense CDATA!");
1201 if(pStream->eof()) return -1;
1202 c = pStream->peek();
1203 if(c3== ']' && c2== ']' && c == '>') break;
1204 if(pStream->eof()) return -1;
1234 if(pStream->eof()) return -1;
1239 if(pStream->eof()) return -1;
1240 c = pStream->peek();
1241 if(c2== '?' && c == '>') break;
1247 if(pStream->eof()) return -1;
1248 c = pStream->peek();
1252 if(pStream->eof()) return -1;
1253 c = pStream->peek();
1273 if(pStream->eof()) return(lc);
1277 if(pStream->eof()) return(lc);
1292 else if(c1 == '\'') {
1303 else if(c1 == '+') {
1316 else if(c1 == '=') {
1323 else if(c1 == '_') {
1330 else if(c1 == '<') {
1333 if(pStream->eof()) return(lc);
1362 std::stringstream ostr;
1363 ostr << "Token( Type=";
1364 if( IsNone()) { ostr << "None)"; return ostr.str();}
1368 if( IsFloat()) ostr << "Float";
1370 if( IsBegin()) ostr << "Begin";
1371 if( IsEnd()) ostr << "End";
1372 ostr << " Value=\"";
1379 ostr << " attr[" << ait->first << "=\"" << ait->second.mStringValue << "\"]";
libFAUDES 2.26g
--- 2015.08.17
--- c++ api documentaion by doxygen
|