在做脱离unity处理unity的yaml文档的工具(prefab、material等)

unity使用的yaml是YAML的语法子集,主要难点在处理文本标量上,如果用工具修改以后和unity生成的格式不一致,实际应用价值就打折扣了,每次使用工具都会变来变去。

字符串类型

首先把字符串分成4种类型:

  • 0 可能是数字,或者是单行的列表、字典,没什么好说的,都在一行内
  • 1 不带引号,在yaml文档中出现的换行符\n+ *n(缩进)需要转成实际的单个空格
  • 2 带单引号,在yaml文档中出现的''需要转义成', 空格同上, 换行符\n换行符\n+ *n(缩进)转成实际的单个换行符
  • 3 带双引号,在yaml文档中出现的\n\r\t\"\uXXXX对应转义,\n+ *n(缩进)+\需要转成单个空格

判断字符串类型

一个字符串会自动生成什么类型,直接按照不会影响解析的原则来区分

0. 单行标量原封不动

  1. 存在非ascii字符或\t,直接3类型
  2. 存在\n ,3类型 (单引号如果换行后带空格,缩进对不上了)
  3. 存在: ,2类型 (避免解析成key)
  4. 存在\n,2类型 (无引号不能解析换行)
  5. :,[,{,,,', 开头,2类型 (这些是yaml的结构元素)
  6. :, 结尾,2类型 (这些事yaml的结构元素)
  7. 简单判断下是不是数字,不是数字的1类型

字符串写YAML

设最大宽度_STRING_LINE_WIDTH为80,带key的行,计算key的宽度(不算key后面: 的两个字符)

  1. 单行标量直接写
  2. 0类型直接写
  3. 1类型,不是空格的字符直接写;是空格,判断当前行非空格宽度<=_STRING_LINE_WIDTH, 继续写;否则如果是单个空格,写一个换行符,再写换行缩进,在下一行重复;如果是多个空格,不换行继续往后写
  4. 2类型,'转成'', 空格逻辑和1类型一致,如果有换行符(n个连续,n>=1),写n个换行符,再写一个换行符,写空格缩进
  5. 3类型,符号转义,unicode字符转成\uXXXX。不是空格的字符直接写;是空格,判断当前行非空格宽度<=_STRING_LINE_WIDTH,继续写;否则如果是当个空格,写一个换行符,再写换行缩进;如果是多个空格,写一个换行符,写换行缩进,再写一个\,再写n-1个空格

遇到问题再修改。YAML优势在于数据量小,但解析是真的难搞,unity罪大恶极。

Unity Yaml文本标量处理的更多相关文章

  1. Unity中文本AssetBundle的解析

     Unity在其安装目录下提供了许多实用的小工具,就存放在unity安装目录下的:Editor/Data/Tools, 其中该路径下的WebExtract.ext和binary2text.exe可以用 ...

  2. unity 读取文本与写入文本

    void writeData(string str,string file)    {        string parth = Application.dataPath;        Strea ...

  3. Unity 读写文本 文件

    1. LitJson的使用 https://blog.csdn.net/qq_35669619/article/details/78928966 https://blog.csdn.net/qq_14 ...

  4. C语言文本处理

    一.conf文本 http://blog.163.com/lixiangqiu_9202/blog/static/53575037201431743236762/ http://blog.csdn.n ...

  5. Y服务-你真的懂 Yaml 吗

    目录 一.什么是 Yaml 二.Yaml 的语法 三.操作 Yaml A. 引入框架 B. 代码片段 C. 完整案例 参考文档 在Java 的世界里,配置的事情都交给了 Properties,要追溯起 ...

  6. #华为云·寻找黑马程序员#微服务-你真的懂 Yaml 吗?

    在Java 的世界里,配置的事情都交给了 Properties,要追溯起来这个模块还是从古老的JDK1.0 就开始了的. "天哪,这可是20年前的东西了,我居然还在用 Properties. ...

  7. python语言使用yaml 管理selenium元素

    1.所有元素都在PageElement下的.yaml,如图 login_page.yaml文件: username: dec: 登录页 type: xpath value: //input[@clas ...

  8. 使用Unity的50个建议

    关于这些建议 这些建议并不适用于所有的项目 这些建议是基于我与3-20人的小团队项目经验总结出来的 结构.可重复使用性.明晰度都是有价的——团队规模和项目规模决定了是否值得付这个价. 一些建议也许公然 ...

  9. opencv3-core之基本操作

    这一篇打算将core部分的例子说完,这都是基于<opencv2.4.9tutorial.pdf>中的core部分,其实这些例子后期都很稳定的,也就是说就算是2.3.1和2.4.10 ,这几 ...

  10. kubernetes之kube-ApiServer代码分析

    一.概述: kube-ApiServer相当于是k8集群的一个入口,不论通过kubectl还是使用remote api 直接控制,都要经过apiserver.apiserver说白了就是一个serve ...

随机推荐

  1. ISP图像处理——紫边Purple Fringing检测

    之前写过文章记紫边的形成原因,以下小结改善方法 图像紫边存在数码相机.监控摄像头等数字成像图像,使用设备在逆光.大光圈条件下拍摄图像的高反差区域容易出现紫边,解决图像自编问题有助设备得到完美图像. 紫 ...

  2. Linux实现双击自动安装deb文件

    在Linux中,有几个常用的软件可以实现双击自动安装.deb文件的功能.以下是一些推荐的软件: 1. GDebi:GDebi是一个轻量级的图形化工具,专门用于安装.deb文件.它可以解决依赖关系,并提 ...

  3. 解决AccessDatabaseEngine.exe 32位64位安装失败问题

    cmd下执行 你的路径\AccessDatabaseEngine.exe /quiet 转载于:https://www.cnblogs.com/64mb/p/10844676.html

  4. Gin+Xterm.js实现远程Kubernetes Pod(一)

    Xterm.js简介 xterm.js (https://xtermjs.org/)是一个开源的 JavaScript 库,它模拟了一个终端接口,可以在网页中嵌入一个完全功能的终端.这个库非常灵活,并 ...

  5. 《深入理解Java虚拟机》读书笔记:判断对象是否存活

    本节内容的概要如下; 对象已死吗? 一.判断对象是否存活的算法 1.引用计数器算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0 ...

  6. 原来TypeScript中的接口和泛型这么好理解

    "接口"和"泛型"是 TypeScript 相比于 JavaScript 新增的内容,都用于定义数据类型 前面两篇文章总结了TypeScript中的 类型注解. ...

  7. 【译】基于XAML的跨平台框架对比分析

    多年来,基于XAML的UI框架已经有了很大的发展.下面的图表是最好的说明.这些框架主要包含:支持跨平台应用的Avalonia UI, Uno Platform和 .NET MAUI.事实上,除了Ava ...

  8. 【JMeter】使用BeanShell写入内容到文件

    使用BeanShell写入内容到文件 目录 使用BeanShell写入内容到文件 一.前言 二.提取 三.写入 一.前言 ​ 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中.在我们使用J ...

  9. C盘无法创建文件处理

    icacls c:\ /setintegritylevel M 打开终端执行上方命令,亲测可用

  10. LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...