cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)
执行后效果:

前端使用:

后台SuperRichText解析code
void SuperRichText::renderNode(tinyxml2::XMLNode *node){
while (node!=nullptr) {
if (node->ToText()) {
CCLOG("文本信息:%s",node->ToText()->Value());
auto n=node->ToText();
std::u16string text;
StringUtils::UTF8ToUTF16(n->Value(),text);
std::u16string::size_type pos=0;
pos=text.find('\n');
while ((pos!=std::u16string::npos)) {
text.erase(pos,1);
pos=text.find('\n',pos);
}
pos=0;
pos=text.find('\r');
while ((pos!=std::u16string::npos)) {
text.erase(pos,1);
pos=text.find('\r',pos);
}
std::string utf8Text;
StringUtils::UTF16ToUTF8(text,utf8Text);
auto font=_fontList[_fontList.size()-1];
auto textElement=ui::RichElementText::create(0,font.color,font.opacity,utf8Text,font.fontName,font.fontSize);
_line->pushBackElement(textElement);
}else if (node->ToElement()){
auto n=node->ToElement();
std::string name=n->Name();
std::transform(name.begin(),name.end(),name.begin(),::toupper);
if (name=="FONT") {
CCLOG("字体标签");
auto attr=n->FirstAttribute();
FontInfo newFont=_fontList[_fontList.size()-1];
while (attr!=nullptr) {
//遍历所有属性
std::string attrName=attr->Name();
std::transform(attrName.begin(),attrName.end(),attrName.begin(),::toupper);
if (attrName=="FACE") {
//设置字体
newFont.fontName=attr->Value();
}else if (attrName=="COLOR"){
//设置颜色
newFont.color=charToColor3B(attr->Value());
}else if(attrName=="SIZE"){
//设置大小
newFont.fontSize=attr->IntValue();
}else if (attrName=="OPACITY"){
//设置不透明度
newFont.opacity=attr->IntValue();
}
attr=attr->Next();
}
_fontList.push_back(newFont);//添加新字体
renderNode(n->FirstChild());//继续渲染子集
_fontList.pop_back();//移除新字体
}else if (name=="IMG") {
CCLOG("图片标签");
//图片标签的属性
auto attr=n->FirstAttribute();
const char *src;
Color3B col(255,255,255);
GLubyte opacity=255;
while (attr!=nullptr) {
//遍历所有属性
std::string attrName=attr->Name();
std::transform(attrName.begin(),attrName.end(),attrName.begin(),::toupper);
if (attrName=="SRC") {
//设置图片路径
src=attr->Value();
}else if (attrName=="COLOR"){
//设置颜色
col=charToColor3B(attr->Value());
}else if (attrName=="OPACITY"){
//设置不透明度
opacity=attr->IntValue();
}
attr=attr->Next();
}
auto img=ui::RichElementImage::create(0,col,opacity,src);
_line->pushBackElement(img);
}else if (name=="BR") {
CCLOG("换行标签");
addNewLine();
}
}
node=node->NextSibling();
}
}
cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)的更多相关文章
- cocos2d-x之利用富文本控件遍历xml
1. #ifndef SuperRichText_hpp #define SuperRichText_hpp #include <stdio.h> #include "cocos ...
- ASP.NET MVC 页面使用富文本控件的XSS漏洞问题
目前在做的项目存在XSS安全漏洞! 原因是有一些页面使用了富文本编辑框,为了使得其内容可以提交,为相关action设置了[ValidateInput(false)] 特性: [HttpPost] [V ...
- ASP.NET MVC或者.net Core mvc 页面使用富文本控件的 保存问题
https://blog.csdn.net/leftfist/article/details/69629394 目前在做的项目存在XSS安全漏洞! 原因是有一些页面使用了富文本编辑框,为了使得其内容可 ...
- MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)
惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...
- [寒江孤叶丶的Cocos2d-x之旅_33]RichTextEx一款通过HTML标签控制文字样式的富文本控件
RichTextEx一款通过HTML标签控制文字样式的富文本控件 原创文章,欢迎转载.转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net ...
- 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误
建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果: 带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...
- WCF学习(二)对控件简单了解以及4个文本控件的简介
WPF基础控件 系统默认提供的基础控件: 文本控件介绍与用法 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label控件 ...
- 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow
原文:重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBl ...
- wxPython中按钮、文本控件的简单运用
本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...
随机推荐
- C# RSA 分段加解密
RSA加解密: 1024位的证书,加密时最大支持117个字节,解密时为128:2048位的证书,加密时最大支持245个字节,解密时为256. 加密时支持的最大字节数:证书位数/8 -11(比如:204 ...
- java多线程之hashmap concurrenthashmap的状态同步
最近在高并发的系统中发现,concurrenthashmap除了大家熟知的避免循环期间发生ConcurrentModificationException异常外,还有重要的一点是Retrievals r ...
- 左求值表达式,堆栈,调试陷阱与ORM查询语言的设计
1,表达式的求值顺序与堆栈结构 “表达式” 是程序语言一个很重要的术语,也是大家天天写的程序中很常见的东西,但是表达式的求值顺序一定是从左到右么? C/C++语言中没有明确规定表达式的运算顺序(从左到 ...
- Redis-分片
分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集.本文第一部分将向你介绍分片的概念,第二部分将向你展示 Redis 分片的可选方案. ...
- HTML自学基础
关于自学HTML中遇到的各类细节问题 1.<a>表示链接标签,类似的有<img src>.链接的地址在<base>中填写.<base href="h ...
- javascript的switch的使用注意
如果是以下代码: <script> var t_keleyi_com = 65; switch (t_keleyi_com) { case '65': alert("字符串65. ...
- Spring MVC 处理模型数据(@ModelAttribute)
SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据. 直白来讲,上面这句话的意思就是:当有一个查询的请求, ...
- vs2010 未能将脚本调试器附加到计算机上的进程。已附加了一个调试器
图片: 上周不小心升级了IE10,今天,VS2010报:未能将脚本调试器附加到计算机XXX上的进程iexplore.exe . 已附加了一个调试器”.启动调试失败. 到网上查找解决办法,最后用这个解决 ...
- arcgis engine 调用arcgis server服务
首先需要添加两个引用: using ESRI.ArcGIS.GISClient;using ESRI.ArcGIS.DataSourcesRaster; /// <summary> /// ...
- SharePoint 创建模版页
[1]需要安装SharePoint Designer 最新版编辑工具 [2]我用的是SharePoint Server 2013 如果是Office 请匹配寻找 1.创建母版页面 打开右上角-网站设 ...