اخیراً کارمندان دیجیکالا تصمیم گرفتهاند که پستهای وبلاگشان را با فرمت مارکداون بنویسند. مارکداون یک زبان نشانهگذاری برای قالببندی متن با امکان تبدیل به فرمتهای مختلف از جمله HTML است. با استفاده از مارکداون بهراحتی میتوان تیتر، متنهای bold ، italic ، نقلقول و... ایجاد کرد. از مارکداون در وبسایتهایی نظیر GitHub نیز استفاده میشود. برای کسب اطلاعات بیشتر دربارهی مارکداون به اینجا مراجعه کنید.
از شما میخواهیم کلاسی برای تبدیل مارکداون به HTML با بهرهگیری از عبارات باقاعده (Regex) پیادهسازی کنید.
پروژهی اولیه را میتوانید از اینجا دانلود کنید.
RuleInterface
🔗برای مدیریت روشهای تبدیل مارکداون به HTML ، اینترفیسی با نام RuleInterface
ایجاد کردهایم؛ زیرا ممکن است در آینده با روشی غیر از عبارات باقاعده فرایند تبدیل را انجام دهیم. این اینترفیس شامل یک متد با نام parse
است که باید رشتهای شامل محتوای مارکداون را دریافت کرده و خروجی موردنظر را برگرداند.
RegexRuleInterface
🔗این اینترفیس از اینترفیس RuleInterface
پیروی کرده و وظیفهی آن، مدیریت قواعد مختلف برای تبدیل مارکداون به HTML است. متدی با نام rule
در این اینترفیس وجود دارد که باید رشتهای شامل یک عبارت باقاعده برای تشخیص یکی از عناصر مارکداون را برگرداند.
RegexRule
🔗این کلاس، اینترفیس RegexRuleInterface
را پیادهسازی میکند. متدی انتزاعی با نام replacement
در این کلاس موجود است که باید رشتهای شامل عبارتی که قرار است جایگزین نتایج اجرای عبارت باقاعده روی محتوای مارکداون شود را برگرداند.
MarkdownParser
🔗این کلاس با استفاده از نمونههایی از کلاسهای مختلف که از کلاس RegexRule
ارثبری میکنند، محتوای مارکداون را به HTML تبدیل میکند. متدی با نام render
در این کلاس وجود دارد که یک رشتهی مارکداون دریافت کرده و خروجی HTML آن را برمیگرداند.
در حال حاضر از هفت عنصر مختلف در مارکداون استفاده میکنیم که باید قوانین استخراج و جایگزینی آنها را پیادهسازی کنید. همهی این قوانین باید تحت قالب کلاسهایی مجزا که از کلاس RegexRule
ارثبری میکنند باشند. هر کدام از این کلاسها، دو متد rule
و replacement
را خواهند داشت و هر کلاس باید در فایلی همنام با نام کلاس پیادهسازی شود.
Header
): این کلاس باید تیترهای موجود در متن را پردازش کند. تیترها در مارکداون از یک الی شش کاراکتر #
بههمراه فضای خالی در ادامهی آنها (بهصورت اختیاری) و نام تیتر تشکیل شدهاند:تیترها را توسط کلاس Header
به تگ h3
تبدیل کنید:
Bold
): این کلاس باید متنهای bold را پردازش کند. متنهای bold در مارکداون بین دو **
یا دو __
قرار میگیرند:متنهای bold را توسط کلاس Bold
به تگ b
تبدیل کنید:
Italic
): این کلاس باید متنهای italic را پردازش کند. متنهای italic در مارکداون بین دو *
یا دو _
قرار میگیرند:متنهای italic را توسط کلاس Italic
به تگ i
تبدیل کنید:
Link
): این کلاس باید لینکها را پردازش کند. لینکها در مارکداون بهصورت زیر هستند:لینکها را توسط کلاس Link
به تگ a
تبدیل کنید:
Image
): این کلاس باید تصاویر را پردازش کند. تصاویر در مارکداون بهصورت زیر هستند:تصاویر را توسط کلاس Image
به تگ img
تبدیل کنید:
Code
): این کلاس باید کدها را پردازش کند. کدها در مارکداون بین دو ` قرار میگیرند:کدها را توسط کلاس Code
به تگ code
تبدیل کنید:
HorizontalRule
): این کلاس باید خطوط افقی را پردازش کنند. خطوط افقی در مارکداون از ۳ یا تعداد بیشتری -
پشت سر هم تشکیل میشوند:خطوط افقی را توسط کلاس HorizontalRule
به تگ hr
تبدیل کنید:
نکته: لزوماً نباید همهی کلاسهای بالا را پیادهسازی کنید. به ازای هر کلاس، امتیاز آن را بهصورت جدا دریافت خواهید کرد.
پس از پیادهسازی کلاسهای بالا، فایلهای زیر را بهصورت Zip ارسال کنید: