مسئولین پارک علموفناوری پردیس تصمیم دارند تا در سری رویداد بعدی المپیکفناوری، یک مسیر راه جدید برای زبانهای برنامهنویسی بومی به ویژه زبان برنامه نویسی آقای هاشمی برگزار کنند. نیما که مسئول طراحی محتوای این مسیر راه جدید و ویژه و تولید داخلی است، به دلیل کمتر شناخته شده بودن زبان برنامه نویسی آقای هاشمی، دسترسی به یک سینتکس هایلایتر (Syntax Highlighter) مناسب برای ژینگول و خوشگل کردن کدهای رویداد را ندارد و از شما برای پیاده سازی این کد هایلایتر کمک میخواهد!
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلها
src
├── CommonMark
│ ├── CommonMarkConverter.php
│ └── Parser.php
├── Languages
│ ├── Hashemi
│ │ ├── HashemiLanguage.php
│ │ ├── Injections
│ │ │ └── JsonInjection.php
│ │ └── Patterns
│ │ ├── HmBuiltinPattern.php
│ │ ├── HmDoubleQuoteValuePattern.php
│ │ ├── HmFunctionCallPattern.php
│ │ ├── HmKeywordPattern.php
│ │ ├── HmMultilineCommentPattern.php
│ │ ├── HmNumberPattern.php
│ │ ├── HmOperatorPattern.php
│ │ ├── HmSinglelineCommentPattern.php
│ │ └── HmTripleDoubleQuoteStringPattern.php
├── Themes
│ ├── DefaultTheme.php
│ └── ThemeManager.php
└── Tokens
├── GroupTokens.php
├── TokenAnalyzer.php
└── TokenValidator.php
راهاندازی پروژه
برای اجرای پروژه، باید php
و composer
را از قبل نصب کرده باشید.
- پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
- دستور
composer install
را در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید. - دستور
php -S localhost:8000 -t tests/
را در پوشهی اصلی پروژه اجرا کنید. پروژه از طریق آدرس http://localhost:8000 در دسترس خواهد بود.
تست پروژه
برای تست پروژه لازم است تا به مسیر /tests
در مرورگر خود بروید. این صفحه یک فایل کد هاشمی را که از قبل در پروژه برای تست شما قرار داده شده هایلایت کرده و به شما نمایش میدهد.
- شما میتوانید با مقایسه کد هایلایت شده در صفحهی لود شده با کدهای هایلایت شده در تصاویر استفاده شده در سوال از درستی کارکرد کد خود اطمینان حاصل کنید.
- تست کد با استفاده از مقایسه خروجی کد هایلایت شده توسط پروژه آپلود شده توسط شما و کد هایلایت شده توسط داوری خودکار سوال مورد ارزیابی قرار خواهد گرفت.
پروژه اصلی tempestphp/highlight
در این سوال از نسخه 2.10.2
پروژه آماده کد هایلایتر tempestphp/highlight استفاده کرده و با توسعهی آن، زبان برنامه نویسی آقای هاشمی را نیز به آن اضافه خواهیم کرد. شما در این سوال قرار است تا با توجه به توضیحات ساختارهای گفته شده، با استفاده از عبارات باقاعده (Regular expressions) نواحی و اجزای مختلف یک کد را تشخیص داده و به هستهی اصلی این کد هایلایتر بگویید تا با توکن تایپ (TokenType) مناسب آن را برای شما هایلایت کند.
برسی بیشتر ساختار کد هایلایتر tempestphp/highlight
(مهم، حتما مطالعه شود!)
tempestphp/highlight
(مهم، حتما مطالعه شود!)برسی بیشتر ساختار نسخه 2.10.2
کد هایلایتر tempestphp/highlight
ساختار این کد هایلایتر به این شکل است که سه مفهوم اصلی به صورت languages، injections و patterns را از پیش پیادهسازی کرده است. در این بخش به برسی این بخشها میپردازیم و سپس به سراغ مواردی میرویم که از شما انتظار داریم تا در این سوال پیادهسازی کنید:
- ساختار الگوها (Patterns):
یک الگو (Pattern) نمایانگر قسمتی از کد است که باید هایلایت (Highlight) شود. یک الگو میتواند هدفش یک کلمه کلیدی مانند
return
یاclass
باشد یا میتواند هر قسمتی از کد باشد، مانند یک کامنت:/* this is a comment */
یا حتی فراخوانی یک تابع. هر الگو با یک کلاس ساده نمایش داده میشود که یک عبارت باقاعده (Regular expression) و یکTokenType
دارد. عبارت Regex برای تطبیق محتوای مرتبط با این الگوی خاص استفاده میشود، در حالی کهTokenType
یک مقدار از نوع enum است که تعیین میکند چگونه آن الگوی خاص هایلایت شود. برای برسی مثالهای بیشتر از این لینک اقدام کنید.
توجه داشته باشید که در این سوال شما صرفا قرار است تا از TokenType
های پیشفرض استفاده کنید و نیازی به پیادهسازی جدیدی برای این مورد نیست. در هر بخش TokenType
مربوطه به شما داده میشود تا آن را در ساختار کد قرار دهید.
-
ساختار تزریقها (Injections): ساختار بعدی مربوط به بخش تزریقها (Injections) میباشد. از تزریقها برای هایلایت کردن زبانهای مختلف در یک بلوک کد استفاده میشوند. برای مثال: HTML میتواند شامل CSS باشد که باید به شیوه درست در کنار HTML هایلایت شود. برای برسی مثالهای بیشتر از این لینک اقدام کنید. توجه داشته باشید که در این سوال شما صرفا قرار است تا در قالب
jfarzand
در کدهای زبان هاشمی خود از ساختار Json استفاده کنید. -
ساختار زبانها (Languages): آخرین ساختار در این کد هایلایتر، ساختار زبانها (Languages) میباشد که همان نماینده زبانهای برنامهنویسی است به صورت کلاسهایی همراه با پیادهسازی الگوها (Patterns) و تزریقها (Injections) میباشد. برای برسی مثالهای بیشتر از این لینک اقدام کنید. زبانی که شما در این سوال به سراغ آن خواهید رفت زبان برنامهنویسی آقای هاشمی (
HashemiLanguage
) خواهد بود.
برسی بیشتر یک مثال مهم در پیاده سازی الگوها (Patterns) (مهم، حتما مطالعه شود!)
در این بخش به برسی یک مثال مهم از شیوه تشخیص و هایلایت کردن الگوها (Patterns) مشخص شده در هر کدام از بخشهای یک زبان میپردازیم. به مثال زیر از پیادهسازی هایلایت کردن namespace
ها در php
دقت کنید:
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenType;
final readonly class NamespacePattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return 'namespace (?<match>[\w\\\\]+)';
}
public function getTokenType(): TokenType
{
return TokenType::TYPE;
}
}
- در مثال بالا یک الگوی جدید با نام
NamespacePattern
ایجاد شده است که مسئول هایلایت کردن namespace ها میباشد. همانطور که مشاهده میکنید در تابعgetPattern
یک عبارت باقاعدهreturn
شده است که نمایانگر انتخابگر آن ساختار خاص (در اینجاnamespace
ها) در کد میباشد. همچنین در تابعgetTokenType
یک Enum از نوعTokenType
برگردانده میشود. در هر بخش مقدارTokenType
ای که باید در این ساختارreturn
کنید به شما معرفی میشود. - این Regex ها باید شامل یک گروه با نام match باشند که به این صورت نوشته میشود:
(?<match>…)
. این گروه نمایانگر بخشی از کد است که در واقع هایلایت خواهد شد.
توجه داشته باشید که هر الگو باید یک گروه تطبیق (Capture Group) نامگذاریشده در Regex داشته باشد که نام آن "match" باشد. هسته هایلایتر محتوایی که درون این گروه تطبیق پیدا کرده است را هایلایت خواهد کرد.
برای مثال، این regex namespace (?<match>[\w\\\\]+)
میگوید که هر خطی که با کلمه namespace
شروع شود باید در نظر گرفته شود، اما تنها بخشی که درون گروه نامگذاریشده (?<match>…)
قرار دارد هایلایت میشود اما خود واژه namespace
چون در گروه match
در نظر گرفته نشده است هایلایت نخواهد شد.
افزودن زبان برنامه نویسی جدید به tempestphp/highlight
شما باید پوشه Hashemi
که کدهای مربوط به هایلایتر زبان هاشمی در آن قرار دارد را مطابق با مستندات این زبان و توضیحات گفته شده در بخش زیر کامل و در پایان این بخش آن را آپلود کنید. توجه کنید که هایلایتر شما حتما باید در ساختار زیر عمل کند تا نمره کامل را دریافت کند. همچنین شما تنها مجاز به ویرایش فایلهای موجود هستید و نمیتوانید فایلهای جدیدی را به این بخش اضافه کنید.
ساختار کامنتهای تکخطی در زبان هاشمی و پیادهسازی کلاس HmSinglelineCommentPattern
HmSinglelineCommentPattern
ساختار کامنتهای تکخطی در زبان برنامهنویسی آقای هاشمی مطابق با مستندات این زبان، مانند بسیاری از زبان های دیگر به صورت زیر میباشد:
// yek comment
شما باید کلاس HmSinglelineCommentPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کامنتهای تک خطی را با استفاده از TokenType
مربوط به کامنت یعنی COMMENT
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmSinglelineCommentPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کامنتهای تکخطی را به درستی هایلایت کند.
ساختار کامنتهای چندخطی در زبان هاشمی و پیادهسازی کلاس HmMultilineCommentPattern
HmMultilineCommentPattern
ساختار کامنتهای چندخطی در زبان برنامهنویسی آقای هاشمی مطابق با مستندات این زبان، مانند بسیاری از زبان های دیگر به صورت زیر میباشد:
/*
in teke az code pardazesh nakhahad shod
*/
/**
* baraye neveshtan e mostanadat
*/
شما باید کلاس HmMultilineCommentPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کامنتهای چندخطی را با استفاده از TokenType
مربوط به کامنت یعنی COMMENT
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmMultilineCommentPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کامنتهای چندخطی را به درستی هایلایت کند.
ساختار کلمات کلیدی در زبان هاشمی و پیادهسازی کلاس HmKeywordPattern
HmKeywordPattern
کلمات کلیدی در هر زبان برنامهنویسی، کلماتی هستند که توسط این زبانها برای اعمال مختلف رزرو شدهاند. در زبان برنامهنویسی هاشمی، کلمات ta
، bede
، bebin
، age
، bood
، na?
، zirsakht
جزو کلمات کلیدی به حساب میآیند.
شما باید کلاس HmKeywordPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کلماتکلیدی را با استفاده از TokenType
مربوط به آن یعنی KEYWORD
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmKeywordPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کلماتکلیدی را به درستی هایلایت کند.
ساختار توابع پیشساخته در زبان هاشمی و پیادهسازی کلاس HmBuiltinPattern
HmBuiltinPattern
توابع پیشساخته در زبان برنامهنویسی آقای هاشمی مانند سایر زبانهای برنامهنویسی، مسئولیت انجام برخی موارد حیاتی از جمله چاپ یا پردازش برخی رشتههای متنی را دارند. در زبان هاشمی توابع پیشساخته به صورت کلمات azinja
، bechap
و jfarzand
میباشند.
شما باید کلاس HmBuiltinPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند توابع پیشساخته را با استفاده از TokenType
مربوط به آن یعنی TYPE
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmBuiltinPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به توابع پیشساخته را به درستی هایلایت کند.
ساختار فراخوانی و تعریف توابع در زبان هاشمی و پیادهسازی کلاس HmFunctionCallPattern
HmFunctionCallPattern
فراخوانیها و تعریف توابع در زبانبرنامه نویسی هاشمی به شکل زیر میباشد:
bebin jam(alef, be) {
javab = alef + be;
bede javab;
}
bebin azinja() {
ye_adad = 100;
ye_adad_dige = 200;
natije = jam(ye_adad, ye_adad_dige);
bechap(natije);
}
- منظور از هایلایت کردن تعاریف توابع در مثال بالا، هایلایت کردن عبارت
jam
در خط اول (هنگام تعریف تابع) و در خط هشتم (در فراخوانی تابع) میباشد.
شما باید کلاس HmFunctionCallPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تعریف و فراخوانی توابع را با استفاده از TokenType
مربوط به آن یعنی PROPERTY
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmFunctionCallPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به فراخوانی و تعریف توابع را به درستی هایلایت کند.
ساختار استفاده از اعداد در زبان هاشمی و پیادهسازی کلاس HmNumberPattern
HmNumberPattern
ساختار دیگری که شما باید در این هایلایتر پیادهسازی کنید مربوط به بخش استفاده از اعداد در این زبان میباشد. اعداد میتوانند در بخشهای مختلف کد از جمله در شرطها، در مقداردهی متغیرها و در فراخوانی توابع استفاده شوند. در زبان هاشمی تنها از اعداد صحیح، اعداد اعشاری و نمایش اعداد به صورت نمادگذاری علمی پشتیبانی میشود.
bebin factorial(n) {
age (n < 1) bood {
bede 1;
}
bede factorial(n-1) * n;
}
bebin tarkib(k, n) {
soorat = factorial(n);
makhraj = factorial(k) * factorial(n-k);
javab = soorat / makhraj;
bede javab;
}
bebin azinja() {
f = tarkib(5, 2);
bechap(f);
}
- مثالی از استفاده از اعداد در فراخوانی توابع، شرط ها و ... در زبان برنامه نویسی هاشمی
شما باید کلاس HmNumberPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تعریف و فراخوانی توابع را با استفاده از TokenType
مربوط به آن یعنی NUMBER
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmNumberPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از اعداد را به درستی هایلایت کند.
ساختار عملگرها در زبان هاشمی و پیادهسازی کلاس HmOperatorPattern
HmOperatorPattern
عملگرها در زبان آقای هاشمی در سه دستهبندی به شکل عملگرهای عددی -+%/*
، عملگرهای منطقی به صورتهای ==
، <=
، >=
، !=
، <
، >
و عملگر انتساب =
باشد. توجه کنید که عملگرهای دو کاراکتری، مثلا ==
باید به صورت یکجا به عنوان یک عملگر در نظر گرفته شود و نه به صورت دو عملگر =
و =
.
age (1==1) bood {
bechap("doroste");
} na? {
bechap("dorost nist, ye fekri barash bokon");
}
adadeMan = 0;
majmoo = 0;
ta (adadeMan<11) bood {
majmoo = majmoo + adadeMan;
adadeMan = adadeMan + 1;
}
- مثالی از انواع استفادهها از عملگرها در بخشهای مختلف زبان هاشمی
شما باید کلاس HmOperatorPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند عملگرهای مختلف را با استفاده از TokenType
مربوط به آن یعنی OPERATOR
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmOperatorPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از عملگرها را به درستی هایلایت کند.
ساختار رشتهها در زبان هاشمی و پیادهسازی کلاسHmDoubleQuoteValuePattern
HmDoubleQuoteValuePattern
رشتهها در زبان برنامهنویسی آقای هاشمی به صورت DoubleQuote ( " "
) مورد استفاده قرار میگیرند. شما باید هایلایتر این مورد را به صورتی پیادهسازی کنید که محتوای درون این دو علامت نقلقول به صورت درستی هایلایت شوند.
nam = "Mr ";
famil = "Hashemi";
tedadeBache = 3;
moteahel = 1==1;
mabda = "Kazeroon";
maghsad = "Neishaboor";
bebin azinja() {
bechap("Dorood Jahan");
}
- مثالی از رشتهها در زبان هاشمی
شما باید کلاس HmDoubleQuoteValuePattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند رشتههای مختلف را با استفاده از TokenType
مربوط به آن یعنی VALUE
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmDoubleQuoteValuePattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از رشتهها را به درستی هایلایت کند.
ساختار رشتههای چندخطی در زبان هاشمی و پیادهسازی کلاسHmTripleDoubleQuoteStringPattern
HmTripleDoubleQuoteStringPattern
رشتههای چندخطی در زبان برنامهنویسی آقای هاشمی به صورت TripleDoubleQuote ( """ """
) مورد استفاده قرار میگیرند. شما باید هایلایتر این مورد را به صورتی پیادهسازی کنید که محتوای درون این سهتاییهای علامت نقلقول به صورت درستی هایلایت شوند.
bebin azinja() {
matn_toolani = """شعر از مولانا
خنک آن قمار بازی که بباخت آنچه بودش
بنماند هیچش الا هوس قمار دیگر
""";
bechap(matn_toolani);
}
- مثالی از رشتهها در زبان هاشمی
شما باید کلاس HmTripleDoubleQuoteStringPattern
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند رشتههای بلند مختلف را با استفاده از TokenType
مربوط به آن یعنی VALUE
رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmTripleDoubleQuoteStringPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از رشتههای بلند را به درستی هایلایت کند.
ساختار تزریق Json در زبان هاشمی و پیادهسازی کلاس JsonInjection
JsonInjection
همانطور که پیشتر در بخش برسی بیشتر کد هایلایتر به تزریقها اشاره کردیم، در زبان برنامهنویسی آقای هاشمی میتوان از Json
در بین کدهای هاشمی به شکل زیر و با استفاده از jfarzand
پیادهسازی کرد:
bebin azinja() {
object = jfarzand("""{"name":"Mr.Hashemi"}""");
bechap(object.name);
bechap(object.x);
}
- مثالی از تزریق Json در زبان هاشمی
شما باید کلاس JsonInjection
را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تزریقهای مختلف Json
را در زبان هاشمی را هایلایت کند. در ساختار تزریقها نیازی به TokenType
نیست و شما باید در ساختار زیر صرفا از هایلایتر از پیش ساخته شدهی Json
درون همین پکیج استفاده کنید.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Injections;
use Tempest\Highlight\Highlighter;
use Tempest\Highlight\Injection;
use Tempest\Highlight\IsInjection;
final readonly class JsonInjection implements Injection
{
use IsInjection;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function parseContent(string $content, Highlighter $highlighter): string
{
return $highlighter->parse($content, 'json');
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از تزریق Json
را به درستی هایلایت کند.
آنچه باید آپلود کنید
- توجه: مطالعه بخش "برسی بیشتر یک مثال مهم در پیاده سازی الگوها (Patterns)" از اهمیت بالایی از جهت نحوه پیادهسازی الگوهای مختلف دارد، لذا در خواندن آن کوشا باشید.
- توجه: داوری این سوال در تستهای مختلف کدهایی شامل ساختارهای مختلف را به صورت ترکیبی به هایلایتر شما میدهد. دریافت نمره بیشتر از سوال با نسبتی از سوال که ساختار آنها را کاملا پیادهسازی کردهاید رابطه مستقیم دارد.
- توجه: تنها فایلهایی از پروژه هایلایتر شما در سیستم داوری مورد پذیرش قرار خواهد گرفت که در بخش "ساختار فایلها" به صورت رنگی مشخص شده است. سایر تغییرات در سایر فایلها بیتاثیر خواهند بود.
- توجه: پس از اعمال تغییرات، کل پروژه به غیر از پوشهی
vendor
را ZIP کرده و آپلود کنید. - توجه: نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال