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对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
随机推荐
- 搭建apphouse(docker镜像私服)
1.下载apphouse,地址为http://www.youruncloud.com/soft.html2.上传AppHouse_v1.0.2.tar到服务器并解压3../apphouse_insta ...
- java实体类如果不重写toString方法,会如何?
先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符“@”和此对象哈希码的无符号十六进制表示组成.换句话说,该方法返 ...
- 多媒体开发之---h264格式slice_header
从Slice_Header学习H.264 写在前面: $ H.264我是结合标准和毕厚杰的书一块学的.看句法语义时最是头疼,一大堆的元素,很需要耐心.标准中在介绍某个元素的语义时,经常会突然冒 ...
- log4j日志异步化大幅提升系统性能
.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能影 ...
- volatile的含义及使用场景
volatile保证线程间的数据是可见的(共享的),但不保证数据同步 volatile相当于synchronized的弱实现,也就是说volatile实现了类似synchronized的语义,却又没有 ...
- UISegmentedControl 功能简单 分析
UISegmentedControl类似于UIButton,它可以提供多个选择操作,响应事件,但具有很大的局限性,我们更多的是使用自定义的,不过在这里还是介绍下它的基本用法. NSArray *seg ...
- poj 2524 Ubiquitous Religions(并查集)
Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23168 Accepted: ...
- 自定义TextView带有各类.ttf字体的TextView
最近项目遇到了将普通文字转化为带有字体样式的文字,这里就涉及到了.ttf文件,我上网百度了不少资料最终终于实现了,现在想想其实并不复杂 1,你需要下载一种.ttf字体文件,你可以从网上找到一种字体的. ...
- 自定义tabpageindicator,可以自定义tab是三角形还是矩形,但是tab不具有滑动的功能
我是不会滴,但是看了一些大神写的,我修改了一下,大家可以参照参照 一,自定义Mytabpageindicator,直接贴代码了,具体的在代码中有注释 package com.wangy.mytabpa ...
- Centos 安装libreoffice 生成office 报错信息见内容
个人博客:https://blog.sharedata.info/ 错误信息:/opt/libreoffice5.2/program/soffice.bin: error while loading ...