Example #1
0
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 "";
}