ملف 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 بواسطة
Alexey Dubovoi (أحد مؤسسي Elemental Games) في عملية العمل على لعبة Space Rangers. في وقت لاحق ،
قرر ألكسندر زيبرغ (المبرمج الرئيسي السابق لـ Katauri Interactive
[ بعد مغادرة الشركة إلى Katauri Interactive و Elemental Games ، غادر إلى Katauri ] ) استخدام هذا التنسيق للعبة King's Bounty: Legend of the Knight.
تم تخزين تعريف كل كائن لعبة بتنسيق 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
وترميز الكمبيوتر . على سبيل المثال:
if len(indentation_levels) and indentation_levels[-1][0] == -1:
وأخيرًا ، نتيجة لمعرفي مع Python ، أسرتني فكرة رفض الأقواس المتعرجة لدرجة أنني قررت أن تنسيق blockpar يمكن تبسيطه أكثر
[ بالتخلي عن الأقواس المتعرجة المطلوبة ] .
يتأثر أيضًا بـ:
- تنسيق تخزين النص في مكتبة تسلسل أخرى يستخدمها عميل Royal Quest.
- تنسيق ملف التكوين nginx (ومع ذلك ، فقد رفضت فكرة التخلي عن المحدد (الرمز
=
أو :
بين اسم المعلمة وقيمته ( لماذا )). - YAML (أي فكرة الاستخدام
.
قبل اسم عنصر الصفيف [ في استخدامات YAML -
] ).
لماذا 0V و 1V؟- غالبًا ما يتم استخدام صواب / خطأ مع نعم / لا (يتم استخدام نعم / لا في الهدف جيم) ، تشغيل / إيقاف أو تمكين / تعطيل (على سبيل المثال: يمكنك تمكين نهايات سطر العرض ؛ تشغيل تسجيل الدخول / إيقاف التشغيل ؛ هل الرقم؟ نعم ) ، وفي الجبر البولي ، يتم استخدام 0 و 1 ، لذا فإن استخدام الكلمات الرئيسية صواب وخطأ في معظم الحالات أمر قابل للنقاش.
- لا أحب صواب / خطأ في النسخة الروسية من التنسيق ، ويمكن ربط 0B و 1 B (هنا B هو الحرف الكبير الروسي c) مع 0Off و 1 On. [ أطلب منكم عدم إثارة مسألة ملاءمة النسخة الروسية. ]
- يتم استخدام 0B و 1 B في لغة البرمجة 11 لتر للأسباب الموضحة في الوثائق .
سلاسل علامات الاقتباس المفردة
عنصر آخر
[ بالإضافة إلى 0B و 1 B ] عنصر مثير للجدل / غير عادي لهذا التنسيق هو استخدام علامات الاقتباس المزدوجة
''
للسلاسل الأولية
[ بدون تسلسلات الهروب / تسلسلات الهروب ] .
لكن خياري له ما يبرره بحقيقة أن اتحاد Unicode وافق هذا العام على أنه رمز لفتح عرض مزدوج مزدوج .كيفية كتابة مثل هذه الاقتباسات على لوحة المفاتيح - انظر
هنا .
إذا كانت هناك علامات اقتباس غير زوجية في السطر ، فأنت بحاجة إلى تنفيذ "موازنة الخط" بنفس الطريقة التي يتم بها ترميز الكمبيوتر لإدراج كود HTML.
على سبيل المثال ، هناك خط
don't
.
نظرًا لأنه يحتوي على اقتباس إغلاق غير متوازن ، أضف اقتباسًا افتتاحيًا متوازنًا في بداية السطر:
'
don't
.
نرفق السلسلة المتوازنة بين علامتي اقتباس:
'
'don't
'
.
تحتاج الآن إلى إظهار المحلل بطريقة أو بأخرى أنه لا يجب تضمين الاقتباس المضاف على اليسار في السلسلة ، حيث إنه مطلوب فقط لاستعادة
التوازن . للقيام بذلك ، استخدم رمز الفاصلة العليا المكتوبًا "، والذي يجب وضعه قطعة واحدة لكل علامة اقتباس موازنة
[ وبالتالي ،" فاصلة مطبوعة واحدة "تأكل" علامة اقتباس زوجية واحدة ] ، وفي هذه الحالة يجب وضعها في بداية السطر:
'''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)
للحصول على سلسلة بتنسيق thindf المقابل للكائن الذي تم تمريره (تناظري json.dumps
و JSON.stringify
).thindf.parse(str)
للحصول على كائن من سلسلة بتنسيق thindf (مشابه لـ json.loads
و json.loads
).
في الختام ، سأعطي بعض الأمثلة الأخرى:بضعة أسطر من
ملفي الافتراضي (Windows). sububime-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 ] :
{ "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 = {} |