1 Star 0 Fork 0

zhyulo/DocEngine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
output.c 1.81 KB
一键复制 编辑 原始数据 按行查看 历史
zhyulo 提交于 2022-04-17 21:13 . 内存精细化
#include "output.h"
#define LOG_TAG "Output"
#include "log.h"
static const char *Space = " ";
void WriteStrPtr(const char *str)
{
StringEty strBuf;
StringSet(&strBuf, str);
WriteString(&strBuf);
}
void WriteNewLine(int space)
{
StringEty strBuf;
StringSet(&strBuf, "\n");
WriteString(&strBuf);
StringSet(&strBuf, Space);
while (space > 0) {
space--;
WriteString(&strBuf);
}
}
void WriteStringMap(StringMap map)
{
int i;
for (i = 0; i < map->count; i++) {
WriteStrPtr(" ");
WriteString(&map->items[i].key);
WriteStrPtr("=\"");
WriteString(&map->items[i].val);
WriteStrPtr("\"");
}
}
void WriteXmlItem(XmlItem xml, int space)
{
// 新增一空行
WriteNewLine(space);
// 输出起始标签
WriteStrPtr("<");
WriteString(&xml->name);
// 注释和声明
if (xml->name.ptr[0] == '!') {
WriteString(&xml->val);
if (StringEqualStr(&xml->name, "!--")) {
WriteStrPtr("-->");
} else {
WriteStrPtr(">");
}
return;
} else if (xml->name.ptr[0] == '?') {
WriteStringMap(&xml->attr);
WriteStrPtr("?>");
return;
}
// 输出元素属性
WriteStringMap(&xml->attr);
if (StringIsEmpty(&xml->val)) {
WriteStrPtr("/>");
return;
}
WriteStrPtr(">");
// 输出元素内容
if (xml->hasFreeVal) {
WriteString(&xml->val);
} else {
int i;
for (i = 0; i < xml->sub.count; i++) {
WriteXmlItem(xml->sub.list[i], space + 1);
}
WriteNewLine(space);
}
// 输出结束标签
WriteStrPtr("</");
WriteString(&xml->name);
WriteStrPtr(">");
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/zhyulo/DocEngine.git
git@gitee.com:zhyulo/DocEngine.git
zhyulo
DocEngine
DocEngine
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385