ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity Yaml文本标量处理

2021-12-30 19:04:03  阅读:113  来源: 互联网

标签:缩进 yaml unity 空格 Yaml Unity 类型 标量 换行符


在做脱离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为82,有问题再调整

  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罪大恶极。

标签:缩进,yaml,unity,空格,Yaml,Unity,类型,标量,换行符
来源: https://www.cnblogs.com/lunoctis/p/15750134.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有