تبدیل متن بین حروف بزرگ، حالت عنوان، camelCase و snake_case
متن را خطبهخط بین حروف بزرگ، حروف کوچک، حالت عنوان، حالت جمله، camelCase، snake_case و kebab-case تبدیل میکند. حالت عنوان بهجای گذاشتن حرف بزرگ روی هر واژه از قواعد شیکاگو یا AP پیروی میکند، بنابراین «the lord of the rings» به «The Lord of the Rings» تبدیل میشود، نه «The Lord Of The Rings».
خطبهخط
| ۱ | عنوان فیلم: the lord of the rings | عنوان فیلم: The Lord of the Rings |
| ۲ | راهنمای HTML parsing برای بقیهٔ ما | راهنمای HTML Parsing برای بقیهٔ ما |
| ۳ | طراحی state-of-the-art | طراحی State-of-the-Art |
چگونگی کار
این ابزار چه میکند
یک متن را با حالت حروف متفاوتی بازنویسی میکند. هفت حالت: حروف بزرگ، حروف کوچک، حالت عنوان، حالت جمله، camelCase، snake_case و kebab-case. هر خط عنوان، جمله یا شناسهٔ مستقل خودش تلقی میشود، بنابراین فهرستی از سرستونها در یک نوبت تبدیل میشود و هر عنوان قواعد خودش را نگه میدارد.
بخشی که ارزش توضیح دارد حالت عنوان است، چون تقریباً هر مبدل دیگری آن را اشتباه انجام میدهد. گذاشتن حرف بزرگ روی هر واژه «The Lord Of The Rings» میدهد و هیچ سبکنامهٔ منتشرشدهای با آن موافق نیست. سبک تیتر حروف تعریف، حروف ربط همپایه و حروف اضافه را کوچک میکند، مگر وقتی یکی از آنها عنوان را آغاز یا تمام کند. همین یک قاعده، تفاوت میان عنوانی است که حروفچینیشده به نظر میرسد و عنوانی که خودکار به نظر میرسد.
روش
حالت عنوان یک فهرست بهعلاوهٔ چهار قاعدهٔ موقعیتی است. فهرست واژههایی را دارد که کوچک میمانند؛ هر چه در آن نباشد بزرگ میشود، از جمله فعلهای «is»، «be» و «are» که مردم بیش از همه انتظار کوچک شدنشان را دارند. اینها واژههایی هستند که شیکاگو کوچک میکند:
articles a an the
conjunctions and but for nor or
named by rule as to
prepositions about above across after against along amid among
around at atop before behind below beneath beside
besides between beyond by concerning despite down
during except from in inside into like near of off
on onto opposite out outside over past per regarding
round since than through throughout till toward
towards under underneath unlike until unto up upon
versus via with within without
AP همان واژهها را به کار میبرد، اما فقط سهحرفیها و کوتاهترها را، چون AP هر واژهٔ چهار حرفی یا بلندتر را بزرگ میکند. کل تفاوت این دو تنظیم همین است: شیکاگو مینویسد «A Walk through the Woods»، AP مینویسد «A Walk Through the Woods».
چهار قاعدهٔ موقعیتی اینهاست: واژهٔ اول خط بزرگ میشود، واژهٔ آخر بزرگ میشود، اولین واژه پس از دونقطه بزرگ میشود، و واژهای که بلافاصله پس از خط تیره میآید از دو قاعدهٔ اول معاف است. همین آخری است که ترکیبهای خطتیرهدار را درست رفتار میدهد: «run-in with the law» به «Run-in with the Law» تبدیل میشود نه «Run-In with the Law»، در حالی که «state-of-the-art» به «State-of-the-Art» تبدیل میشود، چون «art» اسم است و اصلاً در فهرست نیست.
حالت جمله یک دام دارد که دانستنش ارزشمند است. مرزهای جمله از پیادهسازی خود مرورگر از قواعد قطعهبندی یونیکد میآیند که علامتهای نقلقول، پرانتزها، اعداد اعشاری و اختصارات را درست مدیریت میکند. اما قاعدهٔ SB۸ آن استاندارد وقتی حرف بعدی کوچک باشد شکست جمله را سرکوب میکند، با این استدلال معقول که در نثر عادی، نقطهای که پس از آن حرف کوچک میآید یک اختصار است. ورودی یک مبدل حالت حروف دقیقاً متنی است که نمیتوان فرض کرد حروفش درست است: قطعهبندی مستقیم «hello world. this is a test.» یک جمله برمیگرداند، بنابراین فقط اولین حرف بزرگ ظاهر میشود. از این رو قطعهبند روی نسخهای از خط با همهٔ حروف بزرگشده اجرا میشود، که آفستها را سر جایشان میگذارد و چیزی برای سرکوب به استاندارد نمیدهد. علاوه بر آن، جملهای که به یک حرف تنها یا به یکی از بیست اختصار فهرستشده ختم شود به جملهٔ بعدی میچسبد، بنابراین «e.g. this» به «E.g. This» تبدیل نمیشود. فایل آزمون این تعداد را تأیید میکند تا نتواند جابهجا شود.
camelCase، snake_case و kebab-case روی شناسهها کار میکنند، نه واژهها. آپاستروفهای هر واژه حذف میشود، سپس واژه هر جا که بزرگی حروف تغییر کند شکسته میشود: یک حرف کوچک یا رقم که پس از آن حرف بزرگ میآید، و رشتهای از حروف بزرگ که پس از آن حرف کوچک میآید. سومی همان است که شکنندههای سادهانگار از دست میدهند، و به همین دلیل «parseHTMLDoc» بهصورت parse، HTML، Doc درمیآید، نه پنج جزء و نه یک جزء. هر چه حرف یا رقم نیست از پیش رفته است، بنابراین «Order # (net)» میشود order_net.
هیچ چیز در اینجا به زبان محلی حساس نیست. حروف بزرگ و کوچک از نگاشتهای پیشفرض یونیکد استفاده میکنند و قطعهبندها با یک زبان محلی ثابت ساخته میشوند، چون متن یکسان باید روی هر دستگاهی یکسان تبدیل شود و پیوند اشتراکگذاریشده نباید برای کسی که بازش میکند متفاوت تبدیل شود.
پیش از ادامهٔ مطلب
در حالت عنوان شیکاگو، run-in with the law به Run-in with the Law تبدیل میشود. state-of-the-art design چه میشود؟
State-of-the-Art Design. این دو مثال به نظر متناقض میآیند و نیستند. واژهای که بلافاصله پس از خط تیره میآید از قواعد واژهٔ اول و آخر معاف است، و به همین دلیل in در Run-in کوچک میماند — اما art یک اسم ساده است که هرگز در فهرست واژههای کوچک نبوده، بنابراین هیچ چیز قرار نبود آن را پایین نگه دارد. یک قاعده تعیین میکند که واژه بهاجبار بزرگ شود یا نه؛ فهرستی جداگانه تعیین میکند که کوچک نگه داشته شود یا نه.
first word of a line -> capitalهر چه باشد. The Lord of the Rings با T بزرگ شروع میشود، هرچند the در فهرست واژههای کوچک است.
last word of a line -> capitalهمان استدلال در انتهای دیگر، تا عنوان هرگز با یک حرف اضافهٔ کوچک تمام نشود.
first word after a colon -> capitalزیرعنوان از آنجا شروع میشود. این همان The در The Return of the King است.
word directly after a hyphen -> exempt from bothبنابراین Run-in حرف i کوچک خود را نگه میدارد. بدون این، هر ترکیب خطتیرهدار در ابتدا یا انتهای خط دو بار بزرگ میشد.
یک نمونهٔ کارشده
کادر ابزار با نمونهای فارسی باز میشود که همین قواعد را روی واژههای لاتینِ درونش نشان میدهد. نمونهٔ کارشدهٔ زیر سه خط انگلیسی است که برای آزمودن هر چهار قاعده انتخاب شدهاند:
the lord of the rings: the return of the king
HTML parsing for the rest of us
state-of-the-art design
به هفت شکل تبدیلشده، با قواعد شیکاگو و گزینهٔ سرواژهها روشن:
Title Case The Lord of the Rings: The Return of the King
HTML Parsing for the Rest of Us
State-of-the-Art Design
Sentence case The lord of the rings: the return of the king
HTML parsing for the rest of us
State-of-the-art design
UPPER CASE THE LORD OF THE RINGS: THE RETURN OF THE KING
HTML PARSING FOR THE REST OF US
STATE-OF-THE-ART DESIGN
lower case the lord of the rings: the return of the king
html parsing for the rest of us
state-of-the-art design
camelCase theLordOfTheRingsTheReturnOfTheKing
htmlParsingForTheRestOfUs
stateOfTheArtDesign
snake_case the_lord_of_the_rings_the_return_of_the_king
html_parsing_for_the_rest_of_us
state_of_the_art_design
kebab-case the-lord-of-the-rings-the-return-of-the-king
html-parsing-for-the-rest-of-us
state-of-the-art-design
در بلوک حالت عنوان چهار اتفاق افتاد. «of» و «the» کوچک شدند چون در فهرستاند. «The» پس از دونقطه بزرگ شد چون زیرعنوان از آنجا شروع میشود. «HTML» باقی ماند چون آن خط سراسر حروف بزرگ نیست، پس گزینهٔ سرواژهها اعمال شد. و «State-of-the-Art» یک A بزرگ گرفت چون «art» در فهرست نیست، در حالی که «of» و «the» کنارش هستند.
ارقام گزارششده در کنار نتیجه ۳ خط، ۲۲ واژه، ۱۰۱ نویسهٔ ورودی و ۱۰۱ نویسهٔ خروجی است. در camelCase خروجی به ۸۱ نویسه کاهش مییابد، چون فاصلهها و علائم نگارشی از بین رفتهاند.
اینها همان اعدادی هستند که در فایل آزمون این ابزار تأیید میشوند، بنابراین اگر قواعد بدون تغییر این صفحه تغییر کنند، ساخت شکست میخورد.
کاری که انجام نمیدهد
دستور زبان را نمیفهمد. حالت عنوان جستوجویی در فهرست واژههای نقشی است، بنابراین حرف اضافهای که کار قید را میکند — «Look up the Answer» — در جایی که شیکاگو بزرگش میکرد کوچک میشود، و با واژهای مانند «so» یا «like» هر جا ظاهر شود یکسان رفتار میشود. اسمهای خاص را در حالت جمله بازنمیگرداند، چون متن دیگر اطلاعات لازم را ندارد؛ ضمیر I تنها واژهای است که برگردانده میشود. نویسهگردانی نمیکند، بنابراین «café» در snake_case همان «café» میماند و به «cafe» تبدیل نمیشود. نمیداند نام چه شکلی است، بنابراین «o’brien» بهصورت «O’brien» بزرگ میشود نه «O’Brien». و حروف بزرگ برگشتپذیر نیست: ß به SS تبدیل میشود و برنمیگردد.
و هیچ چیز را نمیشمارد. اگر میخواهید بهجای تغییر حالت حروف بدانید متن چقدر بلند است، شمارش نویسهها نیمهٔ دیگر همین کار است.
مراحل انجام کار
- پایان خطوط ویندوز و مک کلاسیک را به یک خطنوی واحد تبدیل کنید، سپس متن را به خطوط تقسیم کنید. هر خط جداگانه تبدیل میشود، بنابراین فهرستی از عنوانها یا نام ستونها در یک نوبت انجام میشود.
- تشخیص دهید که آیا خط «فریادی» است یا نه، یعنی حروف بزرگ دارد و هیچ حرف کوچکی ندارد. در چنین خطی گزینهٔ دستنخورده گذاشتن واژههای تمامبزرگ نادیده گرفته میشود، چون در آنجا هیچ چیز یک واژه را بهعنوان سرواژه متمایز نمیکند.
- برای حروف بزرگ و کوچک، نگاشتهای پیشفرض یونیکد را روی کل خط اعمال کنید و همینجا متوقف شوید. این نگاشتها مستقل از زبان محلیاند، بنابراین ß آلمانی به SS تبدیل میشود و پاسخ روی هر دستگاهی یکسان است.
- برای حالت عنوان، واژهها را پیدا کنید — رشتههایی از حرف و رقم که ممکن است در میانشان آپاستروف باشد. خط تیره بخشی از واژه نیست، بنابراین هر جزء یک ترکیب خطتیرهدار جداگانه داوری میشود.
- واژهٔ اول، واژهٔ آخر و اولین واژه پس از دونقطه را بزرگ کنید. هر واژهٔ دیگری را که در فهرست سبک انتخابشده است کوچک کنید. باقی را بزرگ کنید. واژهای که بلافاصله پس از خط تیره میآید از قاعدهٔ اولوآخر معاف است.
- برای حالت جمله، همهٔ واژهها را کوچک کنید، ضمیر I را برگردانید، سپس حرف اول هر جمله را بزرگ کنید. مرزهای جمله از قطعهبند یونیکد مرورگر میآیند که روی نسخهای از خط با حروف یکسانشده اجرا میشود.
- هرگاه جملهای به یک حرف تنها یا به یکی از بیست اختصار فهرستشده ختم شود، آن را به جملهٔ بعدی بچسبانید، تا نقطهٔ بعد از «e.g.» یا «Mr.» حرف بزرگ سرگردانی تولید نکند.
- برای camelCase، snake_case و kebab-case همان واژهها را بردارید، آپاستروفهایشان را حذف کنید و هر کدام را در نقطهٔ تغییر بزرگی حروف بشکنید — یک حرف کوچک یا رقم که پس از آن حرف بزرگ میآید، و رشتهای از حروف بزرگ که پس از آن حرف کوچک میآید.
- اجزا را به هم بچسبانید. برای snake و kebab سراسر حروف کوچک؛ برای camel، جزء اول کوچک و هر جزء بعدی با حرف بزرگ.
فرضها
- هر خط جداگانه تبدیل میشود. واژهٔ اول و آخر یک عنوان، واژهٔ اول و آخر همان خط است، هیچ جملهای از شکست خط عبور نمیکند و بیست سرستون در بیست خط، بیست شناسه میشوند نه یک شناسهٔ بلند.
- حالت عنوان یک فهرست واژه است، نه یک دستور زبان. شیکاگو حروف اضافه را با جستوجو در فهرست کوچک میکند، بنابراین حرف اضافهای که نقش قید دارد در جایی که شیکاگو بزرگش میکند کوچک میشود — «Look up the Answer» بهجای «Look Up the Answer». درست کردن این مورد به یک برچسبزن اجزای کلام نیاز دارد که چیزی بسیار بزرگتر و بسیار کمتر پیشبینیپذیر از یک فهرست است.
- واژهٔ اول و آخر یک خط، همراه با اولین واژه پس از دونقطه، همیشه بزرگ میشوند. واژهای که بلافاصله پس از خط تیره میآید از این قاعده معاف است، و همین است که «Run-in with the Law» را بهجای «Run-In with the Law» تولید میکند.
- در خطی که سراسر حروف بزرگ است، دستنخورده گذاشتن واژههای تمامبزرگ نادیده گرفته میشود. سرواژه یعنی واژهای با حروف بزرگ میان واژههایی که بزرگ نیستند، و یک خط فریادی چنین تضادی ندارد؛ بنابراین رعایت این گزینه در آنجا، یک اشتباه caps-lock را به خودش تبدیل میکرد.
- حالت جمله نمیتواند اسم خاص را بازگرداند. هیچ چیز در «we met in paris» نمیگوید Paris یک شهر است، بنابراین کوچک برمیگردد. ضمیر I تنها استثناست، چون به شکلی که یک نام نیست، بیابهام است.
- حالت عنوان و حالت جمله باقی هر واژه را کوچک میکنند، بنابراین واژهای که عمداً حروف مخلوط دارد صاف میشود — «parseHTMLDoc» به «Parsehtmldoc» تبدیل میشود. camelCase، snake_case و kebab-case تبدیلهایی هستند که یک شناسهٔ موجود را میفهمند.
- سرواژهها در camelCase، snake_case و kebab-case، صرفنظر از گزینه، کوچک میشوند. «Customer ID» به customer_id تبدیل میشود، چون نام snake_case با حروف بزرگ نه snake_case است و نه خواناتر.
- حروف بزرگ و کوچک از نگاشتهای پیشفرض یونیکد بدون زبان محلی استفاده میکنند. ß آلمانی به SS تبدیل میشود که درست است، و به ß برنمیگردد، یعنی این تغییر برگشتپذیر نیست. i بینقطهٔ ترکی با قواعد پیشفرض تبدیل میشود، نه با قواعد ترکی.
- واژهای که با رقم شروع میشود همانطور که هست میماند، چون رقم آغازین حرف پس از خود را بزرگ نمیکند و شمارهٔ ترتیبی انگلیسی با حروف کوچکش میماند.
- نویسهها بهصورت خوشههای نویسهای (grapheme) شمرده میشوند. یک حرف آکساندار که با دو نقطهٔ کد نوشته شده، یا ایموجیای با اصلاحگر رنگ پوست که با چهار نقطهٔ کد نوشته شده، یکی شمرده میشود.
پرسشهای رایج
آیا متنی که تبدیل میکنم جایی آپلود میشود؟
خیر. تبدیل در همین تب مرورگر و روی دستگاه شما اجرا میشود و سروری برای فرستادن آن وجود ندارد. صفحه متن را در قطعهٔ (fragment) پیوند نگه میدارد تا بتوان نتیجه را به اشتراک گذاشت، و قطعه تنها بخشی از URL است که مرورگر هرگز ارسال نمیکند.
چرا «of» در میانهٔ عنوانم کوچک است؟
چون سبک تیتر همین را میگوید. هم شیکاگو و هم AP حروف تعریف، حروف ربط همپایه و حروف اضافهٔ کوتاه را همهجا کوچک میکنند، بهجز واژهٔ اول و آخر عنوان. «The Lord Of The Rings» نسخهای است که تقریباً هر مبدل حالت حروفی تولید میکند و در هر سبکنامهٔ منتشرشدهای اشتباه است. فهرست کامل واژههایی که این ابزار کوچک میکند در ادامه آمده است.
چرا سرواژهام با حروف کوچک برگشت؟
به احتمال زیاد چون خطی که در آن بود سراسر حروف بزرگ بود. در چنین خطی چیزی نیست که USA را از MEETING متمایز کند، بنابراین گزینهٔ دستنخورده گذاشتن حروف بزرگ برای آن خط نادیده گرفته میشود — وگرنه پیامی که با caps lock تایپ شده به خودش تبدیل میشد و ابزار خراب به نظر میرسید. سرواژه را با دست درست کنید، یا ابتدا باقی خط را کوچک کنید و دوباره تبدیل کنید.
تفاوت حالت عنوان شیکاگو و AP چیست؟
طول حرف اضافه. شیکاگو هر حرف اضافهای را با هر طولی کوچک میکند، بنابراین مینویسد «A Walk through the Woods». AP هر واژهٔ چهار حرفی یا بلندتر را بزرگ میکند، بنابراین مینویسد «A Walk Through the Woods». در واژههای نقشی کوتاه این دو همنظرند، و به همین دلیل بیشتر عنوانها در هر دو حالت یکسان درمیآیند.
چرا هر خط جداگانه تبدیل میشود؟
چون همین است که یک فهرست را کارآمد میکند. بیست سرستون در بیست خط بیست شناسه میشوند و هر عنوان در فهرست قاعدهٔ اولوآخر خودش را میگیرد، بهجای اینکه کل بلوک یک عنوان بسیار بلند تلقی شود. همچنین یعنی خط خالی خالی میماند و جای خود را در جدول زیر حفظ میکند.
چرا حالت جمله نمیتواند اسمهای خاصم را برگرداند؟
چون آن اطلاعات از بین رفته است. «we met in paris» چیزی ندارد که بگوید Paris شهر است نه یک واژه، و ابزاری که حدس بزند آنقدر اشتباه میکند که از ابزاری که حدس نمیزند بدتر است. ضمیر I همراه با I'm، I've، I'll و I'd بازگردانده میشود، چون آن یکی بیابهام است.
چرا STRASSE دوباره به Straße تبدیل نشد؟
چون بزرگ کردن ß، SS تولید میکند و هیچ چیز ثبت نمیکند که از کجا آمده. نگاشت پیشفرض یونیکد اینجا یکطرفه است، بنابراین «straße» با حروف بزرگ STRASSE میشود و STRASSE با حروف کوچک «strasse». وقتی این اتفاق میافتد، شمار نویسههای ورودی و خروجی یکی با هم فرق میکند، و همین نشانهٔ رخ دادن یک تغییر برگشتناپذیر است.
چرا کادر به ۲۰۰۰ نویسه محدود است؟
چون کل وضعیت ابزار در پیوند صفحه منتقل میشود و پیوند باید پس از جایگذاری در یک پیام سالم بماند. دو هزار نویسه تقریباً یک روی کاغذ A۴ است. برای یک سند کامل، آن را بخشبخش تبدیل کنید، یا از ابزاری استفاده کنید که بهجای کادر متن، فایل میخواند.