تطبيع مسافات النص البادئة
تُقرأ الأسطر المزاحة بمسافتين وأربع وست مسافات على أنها المستويات 1 و2 و3 لوحدة من مسافتين، ثم يُعاد كتابة كل سطر ليطابقها تمامًا. أما ما يأتي بعد المسافة البادئة فلا يُمس أبدًا. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- النص
- def foo(): if True: bar() baz() return
- المُدخَل
- def foo(): if True: bar() baz() return
- نمط المسافة البادئة
- spaces
- وحدة المسافة البادئة
- 2
- الوحدة المكتشفة
- 2
المسافات البيضاء البادئة غير المتسقة من أكثر المشكلات شيوعًا عند لصق الشيفرة في مراجعات الكود ومخرجات الإعداد وكتل التوثيق. قد يخلط المقطع بين خطوتين بمسافتين وأربع مسافات، أو —وهو أسوأ— علامات جدولة في بعض الأسطر ومسافات في أخرى، حتى يرفض الملف أداة تحقق أو زميل. يقبل مُطبّع المسافات البادئة هذا نصًا عاديًا متعدد الأسطر، ويصنّف كل سطر غير فارغ بحسب كيفية كتابة مسافته البادئة، ويكتشف وحدة أساسية واحدة —القاسم المشترك الأكبر لأعداد المسافات، أو علامة جدولة واحدة— ثم يعيد كتابة كل سطر بحيث تكون المسافة البادئة مضاعفًا تامًا لتلك الوحدة.
كيف يعمل اكتشاف الوحدة الأساسية وإعادة كتابة المستويات
يطبّع الخوارزم أولًا نهايات أسطر Windows CRLF وCR القديمة إلى شكل LF واحد، ثم يقسم المستند إلى أسطر. تبقى الأسطر الفارغة تمامًا فارغة ولا تسهم في أسلوب المسافة البادئة. لكل سطر غير فارغ تُقاس سلسلة المسافات وعلامات الجدولة في البداية: إن ظهر الحرفان معًا في تلك السلسلة، أو ظهر فراغ Unicode آخر هناك، يُعامل السطر كمختلط وتفشل الطلبية كاملة برسالة واضحة تذكر رقم السطر.
إن كانت بعض الأسطر غير الفارغة بمسافات وأخرى بعلامات جدولة، فلا أسلوب واضح واحد للمستند ويُرفض أيضًا —يجب أن يكون التحويل متعمدًا لا تخمينًا. عندما تستخدم كل الأسطر ذات المسافة البادئة المسافات، تكون الوحدة الأساسية القاسم المشترك الأكبر لجميع أعداد المسافات البادئة الموجبة؛ وإن لم يُباعد أي سطر فوحدة الإبلاغ الافتراضية مسافتان. عندما تستخدم كل الأسطر ذات المسافة البادئة علامات الجدولة، تكون الوحدة علامة جدولة واحدة وكل علامة بادئة تعدّ مستوى واحدًا.
يُعاد حساب مستوى كل سطر كالعدّة مقسومة على الوحدة (دقيق لـ GCD لأعداد المسافات المرصودة، وعدّ صحيح لعلامات الجدولة في وضع التاب)، ثم يُعاد كتابة السطر ببادئة خالصة من مسافات مكررة بطول المستوى مضروبًا في وحدة الإخراج، أو علامات جدولة مكررة بطول المستوى. لا يُغيَّر المحتوى بعد المسافة البادئة أبدًا: المسافات الداخلية والمسافات الختامية ورموز الشيفرة تبقى متطابقة بايتًا ببايت.
متى تستخدم هذه الأداة وكيف تختلف عن عمليات البحث ذات الصلة
استخدم هذه القدرة عندما تكون نية البحث تطبيع مستويات المسافات البادئة للنص، أو إصلاح مسافة بادئة غير متسقة عبر الإنترنت، أو تحويل لصق غير منتظم بمسافتين وأربع مسافات إلى وحدة واحدة، أو اكتشاف أسلوب التاب مقابل المسافة قبل الالتزام. راعِ المسافات الختامية وأعمدة المحاذاة الداخلية —هذه الأداة تعيد كتابة سلسلة المسافة البادئة فقط، لا مسافات المحاذاة داخل السطر. ليست منسّق شيفرة كاملًا، ولا طابعة تجميل واعية باللغة، ولا حاذف أسطر فارغة، ولا String.trim عامًا يدمر البنية المقصودة.
تستفيد مواقع المحتوى التي ترتب لتطبيع المسافات البادئة من ودجت مباشر يطابق مساره المجاني في المتصفح المسار الآلي المدفوع بايتًا ببايت على الوحدة النقية نفسها، فلا تختلف العروض والإنتاج أبدًا على حالة حد لـ GCD.
حالات الاستخدام
تنظيف الشيفرة والإعداد الملصقين قبل الالتزام
يلصق المطورون مقاطع بخطوات مختلطة بمسافتين وأربع مسافات؛ تعيد الأداة كتابة كل سطر إلى وحدة أساسية واحدة وتبلّغ عن أقصى عمق مسافة بادئة للمراجعة.
الأسئلة الشائعة
كيف تختار الأداة وحدة المسافة البادئة الأساسية؟
للأسطر ذات المسافات تستخدم القاسم المشترك الأكبر لجميع أعداد المسافات البادئة الموجبة (وحدة الإبلاغ الافتراضية اثنتان عندما لا شيء مُباعد). لأسطر علامات الجدولة الوحدة علامة جدولة واحدة لكل مستوى.
ماذا يحدث إذا استخدمت بعض الأسطر علامات جدولة وأخرى مسافات؟
خلط على مستوى المستند بين علامات الجدولة والمسافات بلا نمط واحد واضح؛ حوّل أولًا إلى أسلوب واحد ثم طبّع.
هل يمكنني تحويل مسافة بادئة بمسافتين إلى أربع مسافات؟
تُحفظ المستويات المكتشفة ويُعاد كتابة كل مستوى بأربع مسافات.
هل يغيّر التطبيع الشيفرة داخل السطر؟
لا. تُعاد كتابة سلسلة المسافة البادئة فقط. التباعد الداخلي والمسافات الختامية وجميع الأحرف غير البادئة تبقى دون تغيير.
ماذا يحدث للأسطر الفارغة وفواصل أسطر ويندوز؟
تبقى الأسطر الفارغة تمامًا فارغة ولا تُحسب عند اكتشاف نمط المسافات البادئة. وتُوحَّد فواصل أسطر ويندوز والصيغ الأقدم في شكل واحد قبل القياس، فلا تسبب أي اختلاف في النتيجة.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/text/text-indentation-normalize \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"def foo():\n if True:\n bar()\n baz()"}'const res = await fetch("https://api.kit.forhosting.com/text/text-indentation-normalize", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "def foo():\n if True:\n bar()\n baz()"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/text-indentation-normalize",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "def foo():\n if True:\n bar()\n baz()"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/text-indentation-normalize", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"def foo():\\n if True:\\n bar()\\n baz()"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"def foo():\n if True:\n bar()\n baz()"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/text-indentation-normalize", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "def foo():\n if True:\n bar()\n baz()"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.text_indentation_normalize",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_tokens | 20000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
عندما يخلط السطر نفسه أو المستند كاملًا بين علامات الجدولة والمسافات بلا نمط واضح، تفشل المهمة بـ invalid_input بدل التخمين بصمت. يتيح target_unit الاختياري إعادة قياس المستويات المعتمدة على المسافات (مثلًا من اثنتين إلى أربع) دون تغيير شجرة العمق المنطقية. تشغّل الوحدة النقية الحتمية نفسها ودجت المتصفح المجانية ومسار API المدفوع مسبقًا، فتظل أدوات تصحيح الواجبات وتجهيزات CI ومعالجات الإنتاج متفقة دائمًا على البايتات المطبّعة.
كيف يعمل اكتشاف الوحدة الأساسية وإعادة كتابة المستويات
ينطبق target_unit الاختياري فقط على مستندات أسلوب المسافات: تُحفظ المستويات وتستخدم المخرجات ذلك العدد من المسافات لكل مستوى، وهكذا تحوّل شجرة بمسافتين إلى أربع في استدعاء واحد. يتجاهل إدخال أسلوب علامات الجدولة target_unit حتى لا تُوسَّع علامات الجدولة بصمت.
عقد الإدخال وحقول الاستجابة وسلوك الأخطاء
فضّل إرسال الجسم متعدد الأسطر خامًا بدل طيّ الأسطر مسبقًا عندما تريد دلالات مسافة بادئة حقيقية لكل سطر؛ للسطر الطويل الواحد مسافة بادئة واحدة فقط للتطبيع. أرسل جسم JSON بطريقة POST مع حقل نصي إلزامي text (والأسماء البديلة input وvalue وstring وs وcontent وbody). يجب أن تكون القيمة سلسلة غير فارغة بعد قصّ المسافات البيضاء الكلية، وألا تتجاوز مئة ألف حرف حتى لا يستنزف لصق واحد ذاكرة Worker أو المتصفح. target_unit الاختياري عدد صحيح موجب من واحد إلى اثنين وثلاثين؛ تفشل القيم غير الصحيحة وخارج النطاق في التحقق. عند النجاح تعيد الاستجابة input كالسلسلة الأصلية، وtext كنتيجة متعددة الأسطر المعاد كتابتها موصولة بـ LF، وindent_style كـ spaces أو tabs أو none، وindent_unit كحجم وحدة الإخراج الفعلي، وdetected_unit كالوحدة المستنتجة قبل أي تجاوز للهدف، وline_count كعدد الأسطر بما فيها الفارغة، وindented_lines كعدد الأسطر ذات المستوى الموجب، وmax_level كأعمق مستوى مسافة بادئة، وlevels كمصفوفة عمق صحيحة لكل سطر محاذاة لـ lines، وlines كمصفوفة مرتبة لسلاسل الأسطر المعاد كتابتها، وmessage كملخص قصير للأسلوب والوحدة وعدد الأسطر والمستوى الأقصى. التحقق الفاشل —غياب text، قيم غير نصية، محتوى فارغ، حمولة مفرطة، target_unit غير صالح، خلط تاب ومسافة في السطر نفسه، أو خلط أساليب على مستوى المستند— يعيد invalid_input ولا يُحاسب أبدًا. التسعير مبلغ ثابت $0.002 لكل طلب ناجح بوحدة item. عند الدمج أكّد على text أو lines للمحتوى النظيف، وقارن اختياريًا levels وindent_unit لاختبارات الانحدار، وعامل invalid_input كتعارض أسلوب من جهة العميل في اللصق المختلط لا كحدث فوترة.
متى تستخدم هذه الأداة وكيف تختلف عن عمليات البحث ذات الصلة
فحوصات الذهاب والإياب للاختبارات سهلة: أدخل كتلة من ثلاثة أسطر بصفر ومسافتين وأربع مسافات بادئة وتوقع indent_unit اثنين مع levels صفر وواحد واثنين؛ أدخل كتلًا متداخلة بمسافات بادئة تاب فقط وتوقع indent_style tabs بمستويات صحيحة تطابق أعداد التاب؛ أرسل عمدًا سطرًا يبدأ بتاب ثم مسافات، أو سطر تاب بجوار سطر مسافات، وأكد invalid_input الذي يذكر خلط التاب والمسافات. فضّل str.trim_lines عندما تحتاج فقط إزالة المسافات البادئة والختامية من كل سطر دون حفظ شجرة عمق؛ وفضّل data.json_format عندما تكون الحمولة JSON يجب طباعته بمسافة بادئة ثابتة؛ وفضّل هذه القدرة عندما كتب البشر فعلًا نصًا هرميًا بسيطًا أو كتلًا شبيهة بالشيفرة وتحتاج وحدة أساسية متسقة. المهام الفاشلة التي تعيد invalid_input لا تستهلك الرصيد المدفوع مسبقًا، فيبقى التحقق من النماذج واختبارات CI السلبية رخيصة.
حالات التكامل
معالجات مسبقة لـ CI وأدوات التحقق
ترفض الأنابيب مبكرًا خلط علامات الجدولة والمسافات بـ invalid_input، أو تطبّع أشجار المسافات فقط إلى target_unit للمشروع قبل فحوص الأسلوب.
التوثيق والدروس وتجهيزات التمارين
يولّد المؤلفون والمعلمون أمثلة متعددة الأسطر ذات مسافات بادئة معروفة صحيحة وحالات خطأ بأسلوب مختلط للمحررات وأدوات LMS واختبارات golden.
أسئلة تقنية
كم تكلفة تطبيع مسافات النص البادئة؟
أداة المتصفح مجانية. تستخدم طلبات API رصيد KIT المدفوع مسبقًا بمبلغ $0.002 لكل استدعاء ناجح؛ الإدخال غير الصالح لا يُحاسب.