• cssParser


    //cssParser.h

    #include<iostream>
    using namespace std;
    struct MyAttribute
    {
     MyAttribute*  next;
     string m_strName;
     string m_strValue;
     MyAttribute()
     {
      ReSet();
     }
     void ReSet()
     {
      m_strName = "";
      m_strValue = "";
      next = NULL;
     }

     MyAttribute& operator= (MyAttribute& rhs)
     {
      if (this != &rhs)
      {
       m_strName = rhs.m_strName;
       m_strValue = rhs.m_strValue;
       next = rhs.next;   
      }
      return *this;   
     }
    };
    class  MyHash
    {
    public :

    private:

    };

    //cssParser.cpp

    #include<iostream>
    #include<unistd.h>
    #include<fstream>
    #include<string>
    #include "CssParser.h"
    using namespace std;

    #define STR_WRITE(x) x, sizeof(x) - 1
    MyAttribute* pColorListHead = new MyAttribute();
    MyAttribute* pImageListHead = new MyAttribute();

    void DeleteMyAttribute(MyAttribute* del)
    {
     if (!del)
     {
      return ;
     } 
     DeleteMyAttribute(del->next);
     delete del;
    }


    //0xEF, 0xBB, 0xBF,  UTF-8 标记BOM
    bool InitializeColorCheckTable(MyAttribute* pHead, string path)
    {
     ifstream inFile;
     string strEqualLeft = "";
     string strKey = "";
     string strValue = "";
     int index = -1;
     MyAttribute* pTail = pHead; 
     inFile.open(path.c_str(), ios::in); 
     if (NULL == inFile )
     {   
      printf("open file failed");
      inFile.close();
      return false;
     }
     while (getline(inFile, strEqualLeft))
     { 
      if (strEqualLeft.length() >2
       && strEqualLeft[0] == 0xEF
       && strEqualLeft[1] == 0xBB
       && strEqualLeft[2] == 0xBF)
      {   
       strEqualLeft = strEqualLeft.substr(3, strEqualLeft.length());
      }
      if (strEqualLeft.length() >0
       && strEqualLeft[0] == '#')
      {
       continue;
      }
      index = (int)strEqualLeft.find_last_of('=') ;
      if (-1 == index)
      {
       continue;
      }  
      strKey = strEqualLeft.substr(0, index);   
      strValue = strEqualLeft.substr(index+1, strEqualLeft.length());

      MyAttribute* pItem = new MyAttribute();
      if (!pItem)
      {
       return false;
      }
      pItem->m_strName = strKey;
      pItem->m_strValue = strValue;
      pTail->next = pItem;
      pTail = pTail->next;
      //cout<<"Key:"<<pItem->m_strName<<" Value:"<<pItem->m_strValue<<endl;
     }

     inFile.close();
     return true;
    }

    string GetAttribute(string key)
    {
     MyAttribute *pItem = pColorListHead;
     for ( ;
      pItem !=NULL;
      pItem = pItem->next)
     {
      if (pItem->m_strName == key)
      {   
       return pItem->m_strValue;
      }
     }
     return "";
    }

    bool CssColorParser(string strDirectory, string outPath)
    {
     ifstream inFile;
     ofstream  outFile;
     int index = 0; 
     int nend = 0; 
     string StrOneline = "";
     string ItemCss = "";  
     string strEqualLeft = "";
     string strIDName="";
     string strStyleName="";
     string strColorValue="";
     
     inFile.open(strDirectory.c_str(), ios::in); 
     outFile.open(outPath.c_str(), ios::out);//"./custom.css"
     if (NULL == inFile || NULL == outFile)
     {
      printf("open file[%s] failed outPath[%s]----- ", strDirectory.c_str(), outPath.c_str());
      inFile.close();
      outFile.close();
      return false;
     }
     

     InitializeColorCheckTable(pColorListHead, "./ColorCheckTable.cfg");

     outFile.write(STR_WRITE("@charset "utf-8"; "));

     while (getline(inFile, StrOneline))
     {  
      strEqualLeft = "";
      strIDName = "";
      strStyleName = "";
      strColorValue = "";

      if (StrOneline.length() >2
       && StrOneline[0] == 0xEF
       && StrOneline[1] == 0xBB
       && StrOneline[2] == 0xBF)
      {   
       StrOneline = StrOneline.substr(3, StrOneline.length());
      }

      if (StrOneline.length() >0
       && StrOneline[0] == '#')
      {
       continue;
      }
      nend = (int)StrOneline.find_last_of('=') ;
      if(nend == -1)
      {   
       continue;
      }
      //解析=左边的值
      strEqualLeft = StrOneline.substr(0, nend);
      index = (int)strEqualLeft.find_last_of('.') ;
      strIDName = strEqualLeft.substr(0, index);  
      strIDName = GetAttribute(strIDName);
      if (strIDName == "")
      {   
       continue;
      }
      strStyleName = strEqualLeft.substr(index+1, strEqualLeft.length());
      //解析=右边的值
      strColorValue = StrOneline.substr(nend+1, StrOneline.length());
      int cutIndex = 0;
      cutIndex = strColorValue.find_last_of(' ');
      if (cutIndex != -1)
      {
       strColorValue = strColorValue.substr(0, cutIndex);
      }
      //构造Css样式语句
      ItemCss = strIDName+"{ "+strStyleName+":"+strColorValue+"; } ";
      //cout<<ItemCss<<endl;
      outFile.write(ItemCss.c_str(),ItemCss.length());

     }
     inFile.close();
     outFile.close();
     return true;
    }

    bool CssImageParser(string strDirectory, string urlPath, string randNum, string outPath)
    {
     ofstream  outFile;
     string strIDName="";
     string strStyleName="background-image";
     string strUrlValue="";
     string ItemCss = "";
     string filePath = "";

     outFile.open(outPath.c_str(), ios::app);
     if (NULL == outFile)
     {
      printf("open file[%s] failed  +++++ ", outPath.c_str());  
      outFile.close();
      return false;
     } 
     InitializeColorCheckTable(pImageListHead, "./ImageCheckTable.cfg");
     MyAttribute *p = pImageListHead->next;
     for( ;
      NULL != p ;
      p = p->next)
     {
      filePath = strDirectory + p->m_strName;
      //cout<<"filePath:"<<filePath<<endl;
      if(access(filePath.c_str(), F_OK) == 0)
      {
       strIDName = p->m_strValue;
       strUrlValue = "url("+urlPath+p->m_strName+"?"+randNum+")";
       ItemCss = strIDName+"{ "+strStyleName+":"+strUrlValue+"; } ";
       outFile.write(ItemCss.c_str(),ItemCss.length());
      }
     }
     return true;
    }

    int main(int argc, char *argv[])
    {  
     if (argc == 0)
     {

     }
     else if(argc == 3)
     {
      CssColorParser(argv[1], argv[2]);
      DeleteMyAttribute(pColorListHead);
      DeleteMyAttribute(pImageListHead);
     }
     else if (argc == 6)
     {
      CssColorParser(argv[1],argv[5]);
      CssImageParser(argv[2],argv[3],argv[4],argv[5]);
      DeleteMyAttribute(pColorListHead);
      DeleteMyAttribute(pImageListHead);
     }
     
     return 0;

  • 相关阅读:
    .Net中的加密解密
    C#集合类
    .NetFramework 1: I/O & Stream
    系列4:文件操作以及读写文件
    PetShop之表示层设计 :PetShop之表示层设计 (转)
    const和static readonly 区别
    ASP.NET经典源代码下载地址及数据库配置方法
    一个知名出版商的挫折——解读 Wrox 的历史、现在与未来(转载)
    《C++编程——数据结构与程序设计方法》程序范例:影碟店(源代码)
    ASP.NET 英语词典
  • 原文地址:https://www.cnblogs.com/hqu-ye/p/4029604.html
Copyright © 2020-2023  润新知