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对页面中的任意元素进行计数,实现类似于有序列表的功能. 与有序列表相比,它的突出特性在于可以对任意元素 ...
随机推荐
- laravel学习之路3 数据库相关
读写分离之多个读? 有 'host' => $readHosts[array_rand($readHosts)], 上面的好像有缓存问题php artisan config:cache ] ); ...
- window 怎么样让nginx开机自启动
安装Nginx 下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),之后解压到需要放置的位置(D:\xampp\nginx) 将N ...
- Lumen开发:结合Redis实现消息队列(1)
1.简介 Lumen队列服务为各种不同的后台队列提供了统一的API.队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度. 1.1 配置 .env文件的QUEUE_DRIVER选项 ...
- 将非递减有序排列(L L1)归并为一个新的线性表L2 线性表L2中的元素仍按值非递减
#include "stdio.h"#include "stdlib.h"#include "function.h"void main(){ ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- EF中几个重要的类:ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager
ObjectContext封装 .NET Framework 和数据库之间的连接.此类用作“创建”.“读取”.“更新”和“删除”操作的网关. ObjectContext 类为主类,用于与作为对象(这些 ...
- Arrays类--Arrays.asList()方法使用
java.util类 Arrays java.lang.Object——java.util.Arrays public class Arrays extends Object 此类包含用来操作数组(比 ...
- 1.BeanFactory解析
package org.springframework.beans.factory; import org.springframework.beans.BeansException; import o ...
- SQLServer将一个表内指定列的所有值插入另一个表
insert into records_resolve_bak(resolve_save_addr,resolve_time,resolve_status) select resolve_save_ ...
- Webpack探索【5】--- plugins详解
本文主要讲plugins相关内容. https://gitbook.cn/gitchat/column/59e065f64f7fbe555e479204/topic/59e96d87a35cf44e1 ...