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对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
随机推荐
- 07 在Windows下编译Memcached
一:windows下编译Memcached (1)下载地址dll:http://down.51cto.com/data/442606 (2)在php下输出 echo phpinfo():查看php的版 ...
- UFLDL深度学习笔记 (四)用于分类的深度网络
UFLDL深度学习笔记 (四)用于分类的深度网络 1. 主要思路 本文要讨论的"UFLDL 建立分类用深度网络"基本原理基于前2节的softmax回归和 无监督特征学习,区别在于使 ...
- 再理解 as3.0接口
As3.0 接口的理解与运用 1.把接口当作"类"来理解.你easy接受她. 我们看她的标准结构: package 包路径{ public interface 接口名称{ func ...
- Binding基础 文摘
简要 Binding基础 Binding源与路径 列举Binding的源 Binding基础 从Coding中看Binding的基础. 先定义一个Student类: public class Stud ...
- Lumen开发:lumen源码解读之初始化(5)——注册(register)与启动(boot)
版权声明:本文为博主原创文章,未经博主允许不得转载. register()是在服务容器注册服务, bootstrap/app.php /** * 注册外部服务 */ $app->register ...
- hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- python利用正则表达式提取字符串
前言 正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串.日志分析会遇到这种情况,下面我会分别讲一下对应的 ...
- thinkphp自动验证无效的问题
新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...
- jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色
jQuery的min版本和原版功能是一样的,min版主要应用于已经开发成的网页中,而非min版 的文件比较大,里面有整洁的代码书写规范和注释,主要应用于脚本开发过程当中. JQuery是继protot ...
- CSS 布局实例系列(三)如何实现一个左右宽度固定,中间自适应的三列布局——也聊聊双飞翼
今天聊聊一个经典的布局实例: 实现一个三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化 可能很多朋友已经笑了,这玩意儿通过双飞翼布局就能轻松实现.不过,还请容我在双飞 ...