void SkSVGParser::translateMatrix(SkString& string, SkString* stringID) { if (string.size() == 0) return; if (stringID->size() > 0) { _startElement("add"); _addAttribute("use", stringID->c_str()); _endElement(); // add return; } SkASSERT(strncmp(string.c_str(), "matrix", 6) == 0); ++gGeneratedMatrixID; _startElement("matrix"); char idStr[24]; strcpy(idStr, "sk_matrix"); sprintf(idStr + strlen(idStr), "%d", gGeneratedMatrixID); _addAttribute("id", idStr); stringID->set(idStr); const char* str = string.c_str(); SkASSERT(strncmp(str, "matrix(", 7) == 0); str += 6; const char* strEnd = strrchr(str, ')'); SkASSERT(strEnd != NULL); SkString mat(str, strEnd - str); ConvertToArray(mat); const char* elems[6]; static const int order[] = {0, 3, 1, 4, 2, 5}; const int* orderPtr = order; str = mat.c_str(); strEnd = str + mat.size(); while (str < strEnd) { elems[*orderPtr++] = str; while (str < strEnd && *str != ',' ) str++; str++; } string.reset(); for (int index = 0; index < 6; index++) { const char* end = strchr(elems[index], ','); if (end == NULL) end= strchr(elems[index], ']'); string.append(elems[index], end - elems[index] + 1); } string.remove(string.size() - 1, 1); string.append(",0,0,1]"); _addAttribute("matrix", string); _endElement(); // matrix }
CString GetNDCRulFile(CString& sNDC,CString& sMobnum,DWORD& dwMaxLen) { dwMaxLen=0; static CFileInfoArray dir; static BOOL bAdded=0; static CMapStringToString aNDCIndex; if(bAdded==0){ bAdded=1; dir.AddDir(GetAppFolder()+"Sms/","*.rul",TRUE,0,FALSE); for(int i=0;i<dir.GetSize();i++){ CString sItemPath=dir[i].GetFilePath(); CString sContent; ReadFile(sItemPath,sContent); sContent.Replace("\r",""); sContent+="\n"; CString sLen=CDataXMLSaver::GetInstringPart("SmsMaxLength=","\n",sContent); CString sNDCs=CDataXMLSaver::GetInstringPart("SmsNdcList=","\n",sContent); CString sName=CDataXMLSaver::GetInstringPart("WndTitle=","\n",sContent); if(sNDCs!=""){ CStringArray aNDCs; ConvertToArray(sNDCs,aNDCs,','); for(int j=0;j<aNDCs.GetSize();j++){ CString sOld=aNDCIndex[aNDCs[j]]; if(sOld!=""){ sOld+="|"; } sOld+=sItemPath+"\t"+sLen+"\t"+sName; aNDCIndex.SetAt(aNDCs[j],sOld); } } } } CString sNDCData=aNDCIndex[sNDC]; if(sNDCData.Find("|")!=-1){ // Выбор :( CStringArray aOperators; ConvertToArray(sNDCData,aOperators,'|'); CStringArray aOperatorsNames; int i=0; for(i=0;i<aOperators.GetSize();i++){ CStringArray aDats; ConvertToArray(aOperators[i],aDats,'\t'); if(aDats.GetSize()>=3){ aOperatorsNames.Add(aDats[2]); } } i=SelectFromMenu(aOperatorsNames,0); if(i>=0){ sNDCData=aOperators[i]; }else{ return "000"; } } if(sNDCData!=""){ CStringArray aDats; ConvertToArray(sNDCData,aDats,'\t'); if(aDats.GetSize()>=2){ dwMaxLen=atol(aDats[1]); return aDats[0]; } } // Доверяем гуглу? CString sRetFile=GetAppFolder()+"Sms/default.rul"; if(isFileExist(sRetFile)){ CString sContent; ReadFile(sRetFile,sContent); CString sCList=CDataXMLSaver::GetInstringPart("SmsCarriersList=","\n",sContent); CStringArray aCarriers; ConvertToArray(sCList,aCarriers,','); int i=SelectFromMenu(aCarriers,0); if(i>0){ dwMaxLen=1000; sMobnum=sNDC+sMobnum; sNDC=Format("%i",i); return sRetFile; } if(i<0){ return "000"; } } return ""; }