文件AppData \ Local \ Dropbox \ info.json:
{ "personal": { "host": 5060852864, "is_team": false, "subscription_type": "Basic", "path": "C:\\Users\\DNS\\Dropbox" } }
| 在新格式中,它看起来像这样:
personal host = 5060852864 is_team = 0B subscription_type = Basic path = C:\Users\DNS\Dropbox |
Sublime文本编辑器配置文件:
{ "added_words": [ "plugin", "habrahabr", "" ], "default_line_ending": "unix", | 在新格式中,它看起来像这样:
added_words = [ plugin habrahabr ] default_line_ending = unix //font_face = Fira Code font_size = 11 ignored_packages = [ Sublimerge Pro Vintage ] ignored_words = [ utf ] line_numbers = 0B show_encoding = 1B show_line_endings = 1B tab_size = 4 theme = Default.sublime-theme |
一点历史
这种格式的出现归因于另一种名称为blockpar的格式。
Blockpar由
Alexey Dubovoi (元素游戏的创始人之一)在开发“太空游侠”游戏的过程中开发。 随后,
亚历山大·泽伯格 (Katauri Interactive的前首席程序员
[ 离开 公司,从事Katauri互动游戏和Elemental Games之后,他离开了Katauri ] )决定将这种格式用于《国王的赏金:骑士传说》。
每个游戏对象的定义都以blockpar格式存储在扩展名为.atom的单独文件中,例如,以下是文件
data / data.kfs / spider.atom的剪辑 :
main { class=chesspiece model=spider.bma cullcat=0 } arena_params { race=neutral cost=24 level=1 leadership=14 attack=4 defense=4 ... resistances { physical=20 poison=0 magic=0 fire=-10 } ... } ...
随后
[ 在进行Royal Quest项目时 ]我对该格式进行了扩展,以便代替:
button { name=close pos=400,600 size=200,40 image=button_close.png anchors=0,0,100,0 }
这样写:
button=close,400,600,200,40 { image=button_close.png anchors=0,0,100,0 }
我还通过反撇号(backtick-`)添加了对多行字符串值的支持:
button=... { onmouseover=` ... ` }
为什么我拒绝“用反撇号括起来的字符串”在参数值中,可以直接粘贴脚本代码,在代码的注释中,我使用反撇号,其含义与Markdown和
pc markup中使用的含义相同。 例如:
if len(indentation_levels) and indentation_levels[-1][0] == -1:
最后,由于我熟悉Python,拒绝花括号的想法深深吸引了我,以至于我决定可以进一步简化blockpar格式
(通过 放弃所需的花括号 ) 。
还受以下因素影响:
为什么选择0V和1V?- 经常使用true / false和yes / no (在Objective-C中使用YES / NO) ,on / off或启用/禁用(例如:您可以启用显示行尾;打开/关闭登录;是数字吗? 是 ),在布尔代数中使用0和1,因此在大多数情况下使用关键字true和false是值得商bat的。
- 我不喜欢俄语版本格式的true / false,并且0B和1B(此处B是俄语大写字母c)可以与0Off和1On关联。 [ 我请你不要提出俄文版本是否适当的问题。 ]
- 由于文档中指出的原因,在11l编程语言中使用了0B和1B。
字符串用单引号引起来
此格式的另一个
[ 除了0B和1B之外 ]有争议/不寻常的元素是对原始字符串
[ 不使用转义序列\转义序列 ]使用双引号
''
。
但是我的选择是有道理的,因为Unicode联合会今年批准了开头单引号的代码 。如何在键盘上输入此类引号-参见
此处 。
如果行中有不成对的引号,则需要以与PC标记中相同的方式执行“行平衡”以插入HTML代码。
例如,有一行
don't
。
由于它包含不平衡的结束报价,因此请在行的开头添加一个平衡的开始报价:
'
don't
。
我们将平衡字符串括在双引号中:
'
'don't
'
。
现在,您需要以某种方式向解析器显示,字符串中不应包含在左侧添加的引号,因为只需要使用该引号即可恢复
balance 。 为此,请使用打字的撇号“”,每个平衡引号必须将其放置一个
[ 因此,一个打字的撇号“吃”一对引号 ] ,在这种情况下,必须将其放置在行的开头:
'''don't'
。
您可以像其他行一样用双引号插入平衡行:
'text = '''don't''
。
使用方法
目前,有一个
Python和
JavaScript实现 (您可以尝试
在项目网页的浏览器中直接将JSON转换为新格式)。
对于Python-照常安装:
pip install thindf
对于JavaScript:
npm install thindf node const thindf = require('thindf');
并使用:
thindf.to_thindf(object, indent = 4)
以获取与传递的对象( json.dumps
和JSON.stringify
类似物)相对应的Thindf格式的字符串。thindf.parse(str)
从Thindf格式的字符串中获取对象(类似于json.loads
和JSON.parse
)。
最后,我将给出更多示例:从
我的Default(Windows).sublime-keymap几行:
[ { "keys": ["f4"], "command": "f4" }, { "keys": ["shift+f4"], "command": "f4", "args": {"shift_key_pressed": true} }, { "keys": ["alt+shift+`"], "command": "insert", "args": {"characters": "`"} }, // ( { "keys": [":", ")"], "command": "insert_snippet", "args": {"contents": ":)(:"} }, { "keys": ["alt+9"], "context": [{"key": "selector", "operator": "equal", "operand": "text.pq"}], "command": "insert_pq" }, // ' (for balance) { "keys": ["alt+0"], "context": [{"key": "selector", "operator": "equal", "operand": "text.pq"}], "command": "insert", "args": {"characters": "'"} }, ]
使用新格式,我会这样写:
f4 = on_f4() shift+f4 = on_f4(shift_key_pressed' 1B) alt+shift+` = insert(characters' '`') // ( :,) = insert_snippet(contents' ':)(:') alt+9 = if selector == 'text.pq' {insert_pq()} else 0B // ' (for balance) alt+0 = if selector == 'text.pq' {insert(characters' "'")} else 0B
d.json文件的一部分
( 来自Sublime Text的插件管理器的存储库 ) :
{ "schema_version": "3.0.0", "packages": [ { "name": "Django Lookup Snippets", "details": "https://github.com/icycandle/sublime-django-lookup", "releases": [ { "sublime_text": "*", "tags": true } ] }, { "name": "Django Manage Commands", "details": "https://github.com/vladimirnani/DjangoCommands", "labels": ["Django", "python", "web", "management"], "releases": [ { "sublime_text": "<3000", "tags": "st2-" }, { "sublime_text": ">=3000", "tags": "st3-" } ] } ] }
在新格式中,它看起来像这样:
schema_version = '3.0.0' packages = [ . name = Django Lookup Snippets details = https://github.com/icycandle/sublime-django-lookup releases = [ . sublime_text = * tags = 1B ] . name = Django Manage Commands details = https://github.com/vladimirnani/DjangoCommands labels = [ Django python web management ] releases = [ . sublime_text = <3000 tags = st2- . sublime_text = >=3000 tags = st3- ] ]
一些极端情况: |
{ "a": "'...'", "b": "string which ends with a space ", "cd": "\n", "e ": "3", "dirs": [ ["Doc,Scans", ".t'xt"] ], "node": null, "n" : "N", "files": [], "f": "[]", "ff": [ [] ], "products": {} } | a = ''...'' b = 'string which ends with a space ' cd = "\n" 'e ' = '3' dirs = [ ['Doc,Scans', '''.t'xt'] ] node = N n = 'N' files = [] f = '[]' ff = [ [] ] products = {} |