File AppData \ Local \ Dropbox \ info.json:
{ "personal": { "host": 5060852864, "is_team": false, "subscription_type": "Basic", "path": "C:\\Users\\DNS\\Dropbox" } }
| Dalam format baru, tampilannya seperti ini:
personal host = 5060852864 is_team = 0B subscription_type = Basic path = C:\Users\DNS\Dropbox |
File Konfigurasi Editor Teks Luhur:
{ "added_words": [ "plugin", "habrahabr", "" ], "default_line_ending": "unix", | Dalam format baru, tampilannya seperti ini:
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 |
Sedikit sejarah
Format ini berutang penampilannya ke format lain dengan nama blockpar yang aneh.
Blockpar dikembangkan oleh
Alexey Dubovoi (salah satu pendiri Elemental Games) dalam proses mengerjakan game Space Rangers. Selanjutnya,
Alexander Zeberg (mantan programmer utama Katauri Interactive
[ setelah meninggalkan perusahaan untuk Katauri Interactive dan Elemental Games, ia berangkat ke Katauri ] ) memutuskan untuk menggunakan format ini untuk permainan King's Bounty: Legend of the Knight.
Definisi setiap objek game disimpan dalam format blockpar dalam file terpisah dengan ekstensi .atom, misalnya, berikut ini kliping dari file
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 } ... } ...
Selanjutnya
[ saat bekerja pada proyek Royal Quest ] saya sedikit memperluas format ini sehingga bukannya:
button { name=close pos=400,600 size=200,40 image=button_close.png anchors=0,0,100,0 }
tulis seperti ini:
button=close,400,600,200,40 { image=button_close.png anchors=0,0,100,0 }
Saya juga menambahkan dukungan untuk nilai string multi-line melalui apostrof belakang (backtick - `):
button=... { onmouseover=` ... ` }
Mengapa saya menolak `string terlampir di tanda kutip terbalik`Dalam nilai parameter, diizinkan untuk secara langsung menempelkan kode skrip, dan dalam komentar dalam kode saya menggunakan tanda kutip terbalik dalam arti yang sama seperti yang digunakan dalam Markdown dan
markup pc . Sebagai contoh:
if len(indentation_levels) and indentation_levels[-1][0] == -1:
Dan akhirnya, sebagai hasil dari kenalan saya dengan Python, gagasan menolak kurung keriting sangat memikat saya sehingga saya memutuskan bahwa format blockpar dapat lebih disederhanakan
[dengan meninggalkan kawat gigi keriting yang diperlukan ] .
Juga dipengaruhi oleh:
- Format penyimpanan teks di Pustaka Serialisasi Lain yang digunakan oleh klien Royal Quest.
- Format file konfigurasi nginx (namun, saya menolak ide untuk meninggalkan pembatas (simbol
=
atau :
antara nama parameter dan nilainya ( mengapa )). - YAML (yaitu, ide untuk digunakan
.
Sebelum nama elemen array [ di YAML menggunakan -
] ).
Mengapa 0V dan 1V?- Seringkali benar / salah digunakan dengan ya / tidak (YA / TIDAK digunakan dalam Objective-C) , on / off atau aktifkan / nonaktifkan (misalnya: Anda dapat mengaktifkan akhir baris tayangan; menghidupkan / mematikan logging; adalah digit? Ya ), dan dalam aljabar Boolean, 0 dan 1 digunakan, jadi menggunakan kata kunci benar dan salah dalam banyak kasus cukup bisa diperdebatkan.
- Saya tidak suka benar / salah dalam format versi Rusia, dan 0B dan 1B (di sini B adalah huruf kapital Rusia c) dapat dikaitkan dengan 0Off dan 1On. [ Saya meminta Anda untuk tidak mengajukan pertanyaan tentang kesesuaian versi Rusia. ]
- 0B dan 1B digunakan dalam bahasa pemrograman 11L untuk alasan yang ditunjukkan dalam dokumentasi .
String dalam tanda kutip tunggal
Elemen
[ selain 0B dan 1B ] lain yang kontroversial / tidak biasa dari format ini adalah penggunaan tanda kutip ganda
''
untuk string mentah
[ tanpa urutan sekuens \ sekuens lolos ] .
Tapi pilihan saya dibenarkan oleh fakta bahwa Konsorsium Unicode disetujui tahun ini sebagai kode untuk kutipan ganda tunggal .Cara mengetikkan kutipan seperti itu di keyboard - lihat di
sini .
Jika ada tanda kutip tidak berpasangan di baris, maka Anda perlu melakukan "keseimbangan garis" dengan cara yang sama seperti pada markup PC untuk memasukkan kode HTML.
Misalnya, ada garis
don't
.
Karena ini berisi kutipan penutupan yang tidak seimbang, tambahkan kutipan pembuka yang menyeimbangkan ke bagian paling awal dari baris:
'
don't
.
Kami melampirkan string seimbang dalam tanda kutip ganda:
'
'don't
'
.
Sekarang Anda perlu menunjukkan parser bahwa kutipan yang ditambahkan di sebelah kiri tidak boleh dimasukkan dalam string, karena itu hanya diperlukan untuk mengembalikan
keseimbangan . Untuk melakukan ini, gunakan simbol tanda kutip yang diketik ', yang harus diletakkan satu bagian untuk setiap tanda kutip penyeimbang
[ dengan demikian, satu tanda kutip yang diketik “makan” satu tanda kutip sepasang ] , dalam hal ini harus diletakkan di awal baris:
'''don't'
.
Anda dapat memasukkan garis seimbang seperti di baris lain dalam tanda kutip ganda:
'text = '''don't''
.
Gunakan
Saat ini, ada implementasi
dalam Python dan
JavaScript (Anda dapat mencoba mengubah JSON ke format baru langsung di browser pada
halaman web proyek ).
Untuk Python - instal seperti biasa:
pip install thindf
Untuk JavaScript:
npm install thindf node const thindf = require('thindf');
Dan gunakan:
thindf.to_thindf(object, indent = 4)
untuk mendapatkan string dalam format thindf yang sesuai dengan objek yang dikirimkan (analog dari json.dumps
dan JSON.stringify
).thindf.parse(str)
untuk mendapatkan objek dari string dalam format thindf (analog dengan json.loads
dan JSON.parse
).
Sebagai kesimpulan, saya akan memberikan beberapa contoh lagi:Beberapa baris dari
Default (Windows) .sublime-keymap saya :
[ { "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": "'"} }, ]
Dengan menggunakan format baru, saya akan menulis ini:
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
Sepotong dari file
d.json [ dari repositori pengelola plugin untuk Teks Sublime ] :
{ "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-" } ] } ] }
Dalam format baru, tampilannya seperti ini:
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- ] ]
Beberapa kasus sudut: |
{ "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 = {} |