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;
}
cssParser的更多相关文章
- 浏览器-05 HTML和CSS解析1
一个浏览器内核几个主要部分,HTML/CSS解析器,网络处理,JavaScript引擎,2D/3D图形引擎,多媒体支持等; HTML 解析和 DOM 网页基本结构 一个网页(Page),每个Page都 ...
- JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
前些天,在进行分布式参数化测试的时候,出现了如题所示的错误报错信息.此文,针对此做一个简略的重现及分析说明. JMX脚本线程组参数配置如下所示: 参数文件路径配置如下所示: 执行JMX脚本后,服务器对 ...
- 使用Maven构建RichFaces 4.x项目
使用Maven构建RichFaces 4.x项目 目录 开始之前 第一步 - 创建Maven项目 第二布 - 添加依赖文件 第三步 - 配置RichFaces 第四步 - 创建显示页面 开始之前 本文 ...
- javafx之CSS初探
文档:http://www.haogongju.net/art/1807238 javafx中的css元素必须有-fx-前缀. 一.介绍 java8中新增了javafx.css开放了css相关api. ...
- Android常用组件
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Top Android App使用的组件 3
8684公交 AdChina:com.adchina:易传媒广告平台 AdsMogo:com.adsmogo:芒果移动广告平台 大姨吗 AChartEngine:org.achartengine:An ...
- Android常用组件【转】
UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...
- Android经常使用开源组件汇总
http://www.cnblogs.com/scige/p/3456790.html UI相关 图片 Android-Universal-Image-Loader:com.nostra13.univ ...
- CSS3基础(4)——CSS3 渲染属性
一. CSS3 计数器详解 CSS3计数器(CSS Counters)可以允许我们使用CSS对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
随机推荐
- 嵌入式开发之工具---比开发手册更重要的一个命令 man page
man http://bbs.chinaunix.net/thread-826490-1-1.html http://read.pudn.com/downloads70/ebook/254107/ch ...
- Unity3D研究院之在开始学习拓展编辑器
Unity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器.如下图所示 ...
- win10下VS2010中文输入法切换为英文卡死
中文输入法下输入英文,VS2010会出现卡顿现象,之后会出现一大串的重复英文字母. win10下VS2010安装的助手VAssit系统不兼容,而win7下不会出现上述问题. 解决办法:卸载安装的助手V ...
- Cadence 15.7 win7无法启动解决方法
原帖地址:http://blog.sina.com.cn/s/blog_69a5dce90100kscf.html 按照XP下的破解方法安装Cadence15.7后, 如果不能正常启动Cadence ...
- vue项目目录
项目目录说明 . |-- config // 项目开发环境配置 | |-- index.js // 项目 ...
- CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼
今天聊聊一个经典的布局实例: 实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化 可能很多朋友已经笑了,这玩意儿通过双飞翼布局就能轻松实现.不过,还请容我在双飞 ...
- centos修改mysql密码或者进入mysql后解决Access denied for user ''@'localhost' to database 'mysql错误
原因是MySQL的密码有问题 用mysql匿名用户可以进入数据库,但是看不见mysql数据库. 解决办法:具体操作步骤:关闭mysql:# service mysqld stop然后:# mysqld ...
- 我的Android进阶之旅------>MIME类型大全
今天在实现一个安装apk的代码中看到一段代码为:application/vnd.android.package-archive,不知其意,所以百度了一下,了解到这是一种MIME的类型,代表apk类型. ...
- (转)RequireJS shim 用法说明
RequireJS中如果使用AMD规范,在使用的过程中没有太多的问题,如果加载非AMD规范的JS文件,就需要使用Require中的shim. require.config({ paths:{ jque ...
- 关于date和String互相转换的问题
其实原理很简单,就是将String类型的变量使用SimpleDateFormat来转换成Date,然后用getTime()方法比较 SimpleDateFormat sdf = new SimpleD ...