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]-----\n", strDirectory.c_str(), outPath.c_str());
  inFile.close();
  outFile.close();
  return false;
 }

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

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

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(‘\r‘);
  if (cutIndex != -1)
  {
   strColorValue = strColorValue.substr(0, cutIndex);
  }
  //构造Css样式语句
  ItemCss = strIDName+"{\r\n"+strStyleName+":"+strColorValue+";\r\n}\r\n";
  //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  +++++\n", 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+"{\r\n"+strStyleName+":"+strUrlValue+";\r\n}\r\n";
   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;
}

时间: 2024-11-05 11:41:35

cssParser的相关文章

Android经常使用开源组件汇总

http://www.cnblogs.com/scige/p/3456790.html UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步载入.缓存.显示图片 ImageLoader:com.novoda.imageloader:异步载入.缓存.显示图片 picasso:com.squareup.picasso:功能强大的图片下载缓存库 PhotoView:uk\co\senab\photovie

javafx之CSS初探

javaFX 可以通过css来设计界面.javafx中的css只是w3c css2.1规范的一个扩展和子集,并不完全支持所有的css特性. javafx中的css元素必须有-fx-前缀. 一.介绍 java8中新增了javafx.css开放了css相关api. 选择器分类: Type选择器:通过Node的getTypeSelector可以获取 id选择器:通过设定id=属性(注意这里的id不是fx:id) styleClass属性: styleClass可以使用class选择器 选择器命名规范:

CSS3基础(4)——CSS3 渲染属性

一. CSS3 计数器详解    CSS3计数器(CSS Counters)可以允许我们使用CSS对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素计数,同时实现个性化计数. 1.CSS3计数器属性一览表 属性 描述 counter-reset 定义计算器,包括初始值.作用域等 counter-increment 设置计数器的增数 content 在::before和::after中生成内容 counter 在content属性中使用,用来调用

android 三种网络通信接口及各个接口的代码示例

第一部分 Android网络基础 Android平台浏览器采用了WeBKit引擎,这款名为Chorme Lite的Web浏览器拥有强大扩展特性,每个开发者都以为编写自己的插件,使得浏览器的功能更加完善. 目前Android平台有3种网络接口. 第一种 java.net.*(标准java接口) 此接口提供与联网有关的类,包括流和数据包套接字.Internet协议.常见HTTP处理.如:创建URL以及URLConnection/HttpURLConnection对象.设置连接参数.连接服务器.向服务

CyanogenMod源码下载、编译、刷机过程记录(HTC buzz)

一.背景介绍 CyanogenMod(简称CM):Cyanogen团队是基于开源的AOSP源码的,目前全球最大的Android第三方编译团队.用户可以通过CM源码编译出适用特定机型的刷机包,并将编译出来的刷机包刷到相应的手机里. Cyanogenmod官方支持的手机设备类型有Htc.Samsung.Huawei.Sony等其各自旗下的主流型号,通过以下网址可以查看Cyanogenmod官方支持的手机设备及对应CM版本. http://wiki.cyanogenmod.org/w/Devices#

android开发常用组件【持续更新中。。。】

UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:com.novoda.imageloader:异步加载.缓存.显示图片 picasso:com.squareup.picasso:功能强大的图片下载缓存库 PhotoView:uk\co\senab\photoview:支持缩放和各种手势的ImageView ListView JazzyListView

Android常用组件

UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:com.novoda.imageloader:异步加载.缓存.显示图片 picasso:com.squareup.picasso:功能强大的图片下载缓存库 PhotoView:uk\co\senab\photoview:支持缩放和各种手势的ImageView ListView JazzyListView

Android的网络与通信(转)

第一部分 Android网络基础   Android平台浏览器采用了WeBKit引擎,这款名为Chorme Lite的Web浏览器拥有强大扩展特性,每个开发者都以为编写自己的插件,使得浏览器的功能更加完善.   目前Android平台有3种网络接口.  第一种 java.net.*(标准java接口)   此接口提供与联网有关的类,包括流和数据包套接字.Internet协议.常见HTTP处理.如:创建URL以及URLConnection/HttpURLConnection对象.设置连接参数.连接

jmeter4.0 统计结果次数 BeanShell Sampler,Debug Sampler

jmeter4.0 统计结果次数 BeanShell Sampler,Debug Sampler 业务场景:抽奖活动,程序按比例分配奖品,测试员想模拟100次抽奖,获取抽奖的结果,分析大致的概率 1.setUp Thread Group 前置,右击添加 BeanShell Sampler输入 props.put("a",0); props.put("b",0); props.put("c",0); props.put("d",