kiavash
kiavash
خواندن ۱۲ دقیقه·۷ سال پیش

مارک مور داون (مارک‌مود) / MarkMoreDown~>markmod


مارک‌مود یک تحلیلگر متن بر اساس قواعد نگارشی مارک‌داون است که تمام قابلیت‌های مارک‌داون به همراه چند تحلیل اضافه را انجام می‌دهد. برای دیدن کامل مثال‌های این پست می‌توانیدبه این آدرس مراجعه کنید.

https://kiavash.one/2018/04/14/markmoredown/

برای کامل کردن میرا نیاز به یک تحلیل‌کننده‌ی متن به روز‌تر از تحلیل‌گر استاندارد مارک‌داون داشتم که علائم بیشتر و نگارش کامل‌تری داشته باشه، ازونجایی که میرا با پرل نوشته شده و چیزی که مورد نیازم بود با پرل نوشته نشده بود هنوز، ناچارا خودم دست به کار شدم.

اول تصمیم داشتم مارک‌داون با طعم گیت‌هاب رو بازنویسی کنم، اما با مرور زمان نیازهای بیشتری رو دیدم، مخصوصا برای متن‌هایی که نیاز هست راست به چپ بنویسیم و هر از گاهی ممکنه بخوایم چیزی رو چپ به راست بنویسیم که باعث شد به این فکر بیفتم که مارک‌داون با طعم میرا رو بنویسم که بعد از مدتی هم اسمش رو به markmoredown یا ساده تر markmod، مارک‌مود تغییر دادم.

برای دیدن یک مثال از متن‌های نوشته شده با مارک‌مود میتوانید متن همین پست را در این لینک ببینید.

معرفی

مارک‌مورداون یک کتابخانه‌ی آزاد با لایسنس MIT است برای تبدیل متن‌های شبه مارک‌داون به html که از مارک‌داون استاندارد به همراه تعدادی اصلاحات و امکانات اضافه که اکثرا از پارسرهای دیگر مارک‌داون مانند PHP Markdown Extra, MultiMarkdown, kramdown و... الهام گرفته شده‌اند پشتیبانی می‌کند.

نصب

اگر خارج از محیط میرا بخواهید از مارک‌مود استفاده کنید نیاز به پرل دارید. سیستم‌عامل‌های شبه یونیکس مثل توزیع‌های گنو/لینوکسی یا مک، پرل را به شکل پیش‌فرض دارند، برای ویندوز هم می‌توانید پرل توت‌فرنگی را نصب کنید. بعد از مطمین شدن از نصب پرل با این دستور مارک‌مود را نصب کنید:

cpan -i Text::Markmoredown

اگر بخواهید خارج از محیط برنامه نویسی از مارک‌مود استفاده کنید در خط فرمان این دستور را برای فایلی که نیاز به ترجمه دارد استفاده کنید:

markmod filename.md

به این ترتیب خروجی ترجمه شده روی خط فرمان نمایش داده میشود. یا میتوانید آن را در یک فایل ذخیره کنید

markmod filename > name.html

همچنین کدهای منبع هم در مخزن گیت‌هاب پروژه در دسترس هستند و میتونید از روی سورس نصبش کنید یا در گسترشش مشارکت کنید.

دستور زبان

سربرگ‌ها

سربرگ‌ها از h1 تا h6 fh با کمک # ها ساخته می‌شوند.

# h1 Heading ## h2 Heading ### h3 Heading #### h4 Heading ##### h5 Heading ###### h6 Heading ​ <h1>h1 Heading</h1> <h2>h2 Heading</h2> <h3>h3 Heading</h3> <h4>h4 Heading</h4> <h5>h5 Heading</h5> <h6>h6 Heading</h6>

برای سربرگ‌های ۱ و ۲ دستور زبان متفاوتی هم وجود دارد:

Alt-H1 ====== ​ Alt-H2 ------ ​ <h1>Alt-H1</h1> <h2>Alt-H2</h2>

برچسب‌های دلخواه در سربرگ

## h2 #:head-label #### h4 ######## :my-label ​ <h2 id="head-label">h2</h2> <h4 id="my-label">h4</h4> ​ Alt-h1 ====== :my-label ​ <h1 id="my-label">Alt-H1</h1>

جداکننده‌های افقی

جداکننده‌های افقی با استفاده از تکرار بیشتر از ۳تای - یا ـ یا * شناخته می‌شوند که میتوانند بینشان از یک فاصله‌ی دلخواه هم استفاده کرد

*** --- ___ * * * * * * * * * -------- ______________ ​ <hr>

پاراگراف‌ها و خطوط جدید

پاراگراف‌ها <p> با استفاده از یک خط خالی بین دو بلوک متن مشخص می‌شوند و خطوط جدید<hr> با دو فاصله(space) در آخر خط شناخته می‌شوند.

استایل دادن به پاراگراف

برای استایل دادن به یک پاراگراف در آخر هر پاراگراف در یک خط جدید بین یک آکولاد و یک مساوی بلافاصله بعد از آن و آکولاد بسته میتوان کلاس‌ها، id و هر چیز موردد نیا دیگری را نوشت. هر کلاس با یک . و هر id با یک # در ابتدا مشخص میشوند و با یک فاصله از هم جدا میشوند. به جز جدا کردن این مشخصه ها از هم در هیچ جای دیگری از فاصله نباید استفاده شود.

{= .class #id style="..." dir="..." align="..." style="background:#DDD;font-size:12px;" more... }

^

Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates complectitur ad cum. Cu eum inermis inimicus efficiendi.⋅⋅ Labore officiis his ex, soluta officiis concludaturque ei qui, vide sensibus vim ad. {= .class #entry .more align="center" #body width="200px" }

تایپوگرافی

متن پررنگ یا قوی

متن های پررنگ با تکرار دو ستاره قبل و بعد از کلمات مشخص میشوند

این قسمت از متن **پر رنگ** یا **قوی** است.

این قسمت از متن پر رنگ یا قوی است.

متن کج یا مورد تاکید

برای کج نوشتن یا موردتاکید قرار دادن یک کلمه از یک زیرخط _ قبل و بعد از کلمات استفاده می‌کنیم.

این کلمه _مورد تاکید_ است ​ این کلمه <em>مورد تاکید</em> است

این کلمه مورد تاکید است

مارک کردن

کلمات با دو مساوی = قبل و بعدشان مارک می‌شوند

می•توان قسمتی از متن را ==مارک== کرد ​ می•توان قسمتی از متن را <mark>مارک</mark> کرد

متن اضافه شده

با استفاده از دو بعلاوه + متن اضافه شده مشخص میشود

این یک متن است که این ++کلمه++ به آن اضافه شده است. ​ این یک متن است که این <ins>کلمه</ins> به آن اضافه شده است.

متن کوچک

با استفاده از دو منفی - قبل و بعد از هر کلمه آن را کوچک می‌کنیم

این کلمه --کوچک•تر-- است ​ این کلمه <small>کوچکتر</small> است

متن حذف شده

با استفاده از دو آکولاد ~ قبل و بعد از کلمات آن‌ها را حذف شده معرفی می‌کنیم

قسمتی از متن ~~ابتشاه~~ نوشته شده ​ قسمتی از متن <del>ابتشاه</del> نوشته شده

متن حذف/اضافه شده

این قسمت از متن ~~ابتشاه~>اشتباه~~ نوشته شده بود ​ این قسمت از متن <del>ابتشاه</del> <ins>اشتباه</ins> نوشته شده بود

قبل و بعد از ~> یک فاصله اختیاری است.

متن بالانویس

x ^y + z^ ​ x <sup>y + z</sup>

متن زیرنویس

متن ~زیرنویس~

C~6~H~12~O~6~ ​ C<sub>6</sub>H<sub>12</sub>O<sub>6</sub>

C<sub>6</sub>H<sub>12</sub>O<sub>6</sub>

لیست‌ها

لیست‌های ساده

لیست های ساده با خط تیره (-) علامت جمع (+) یا ستاره (*) در ابتدای خط مشخص میشوند. با هر بار تو رفتگی با چهار اسپیس میتوان یک زیر لیست در لیست قبلی مشخص کرد. ترتیب استفاده از علایم هیچ اهمیتی ندارد.

+ لورم ایپسوم + متن ساختگی + با تولید سادگی نامفهوم + از صنعت چاپ + و با استفاده از + طراحان گرافیک است. - چاپگرها - متون - روزنامه - مجله * در ستون * و سطرآنچنان که * لازم است - برای شرایط فعلی - تکنولوژی مورد نیاز + کاربردهای متنوع + با هدف بهبود + ابزارهای کاربردی می باشد. ​ <ul> <li>لورم ایپسوم</li> ... <li>طراحان گرافیک است.</li> <ul> <li>چاپگرها</li> ... <li>مجله</li> <ul> <li>در ستون</li> ... <li>لازم است </ul> ... <li>تکنولوژی مورد نیاز </ul> ... <li>ابزارهای کاربردی می باشد.</li>

لیست‌های شماره‌دار

این لیست‌ها با یک عدد در ابتدا به همراه یک نقطه بلافاصله بعد از آن شناخته می‌شوند.

1. لورم ایپسوم 2. متن ساختگی 3. با تولید سادگی نامفهوم 1. از صنعت چاپ 2. و با استفاده از 4. طراحان گرافیک است. 5. چاپگرها - متون - روزنامه - مجله 1. در ستون 2. و سطرآنچنان که 3. لازم است 6. برای شرایط فعلی 7. تکنولوژی مورد نیاز 8. کاربردهای متنوع + با هدف بهبود + ابزارهای کاربردی می باشد.

لیست‌های تعریفی

سیب : درخت سیب (نام علمی: M. pumila) درختی برگریز از خانواده گلسرخیان است که به خاطر میوه شیرین و گوشتی•اش شناخته شده•است. : در برخی از منابع مذهبی به عنوان گیاه ممنوعه•ای که باعث اخراج آدم از بهشت شد معرفی شده•است. ​ پرتقال : میوه•ای از خانواده مرکبات می•باشد. درخت آن همیشه سبز و پر برگ است و ارتفاع آن تا ۱۰ متر هم می•رسد.

برابر است با:

<dl> <dt>سیب</dt> <dd>درخت سیب (نام علمی: M. pumila) درختی برگریز از خانواده گلسرخیان است که به خاطر میوه شیرین و گوشتی•اش شناخته شده•است.</dd> <dd>در برخی از منابع مذهبی به عنوان گیاه ممنوعه•ای که باعث اخراج آدم از بهشت شد معرفی شده•است.</dd> ​ <dt>پرتقال</dt> <dd>میوه•ای از خانواده مرکبات می•باشد. درخت آن همیشه سبز و پر برگ است و ارتفاع آن تا ۱۰ متر هم می•رسد.</dd> </dl>

جداساز‌ لیست‌ها

اگر می‌خواهید یک لیست بلافاصله بعد از لیست قبلی داشته باشید برای جدا کردن این لیست‌ها از یک خط که تنها یک ^ دارد بین دو لیست استفاده کنید.

* List one ​ ^ ​ * List two

نقل قول‌ها

خطوطی که با یک > در ابتدا شروع میشوند یک نقل قول هستند. نقل قول‌ها میتوانند تو در تو باشند و از یک نقل قول درون یک نقل قول دیگر استفاده کرد. همچنین سایر علایم مارک‌داون شامل لیست‌ها، سربرگ‌ها و کدها هم در بین نقل قول‌ها معتبر هستند.

> این یک نقل قول در ۲پاراگراف است. نقل قول•ها برای نمایش > متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و > خارج از متن اصلی است > > ادامه نقل قول در پاراگراف دوم ​ <blockquote> <p> این یک نقل قول در ۲پاراگراف است. نقل قول•ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است </p> <p> ادامه نقل قول در پاراگراف دوم </p> </blockquote>

مارک‌داون به شدت ساده‌گیر است و میتوان پاراگراف را مانند مثال بالا در چندین خط جدا از هم یا به شکل مثال پایین به صورت متوالی نوشت

> این یک نقل قول در ۲پاراگراف است. نقل قول•ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است ​ > ادامه نقل قول در پاراگراف دوم

همچنین در هر نقل قول میتوان از سایر اجزای مارک‌داون شامل نقل قول، سربرگ‌ها لیست ها و بلوک‌های کد استفاده کرد

> این یک نقل قول است > > > این یک نقل قول درون یک نقل قول دیگر است > > ## سربرگ سطح دو > >1. آیتم یک >2. آیتم دوم > > return shell_exec("echo $input | $markdown_script"); [بلوک کد]

جداساز نقل قول‌ها

اگر می‌خواهید یک نقل قول بلافاصله بعد از یک نقل قول دیگر داشته باشید برای جدا کردنشان از یک خط که تنها یک ^ دارد بین دو بلوک استفاده کنید.

> block1 ​ ^ ​ > block2

لینک‌ها

مارک‌داون از ۲ نوع لینک پشتیبانی میکند، لینک‌های درون خطی و لینک‌های ارجاعی.

لینک‌های درون‌خطی

لینک‌های درون‌خطی را به این شکل میتوان ایجاد کرد

This is [an example](http://example.com/ "Title") inline link. ​ [This link](http://example.net/) has no title attribute. ​ --- ​ <p>This is <a href="http://example.com/" title="Title"> an example</a> inline link.</p> ​ <p><a href="http://example.net/">This link</a> has no title attribute.</p>

لینک‌های ارجاعی

و لینک های ارجاعی نیز ساختاری به این صورت دارند

This is [an example][id] reference-style link. یا This is [an example] [id] reference-style link. ادامه متن و متن و متن و متن. ​ [id]: http://example.com/ "Optional Title Here" ​ --- ​ <p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p> ​ <p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p> ​ <p>ادامه متن و متن و متن و متن.</p>

همچنین لینک‌های ارجاعی رو به این صورت هم میتوان نوشت

my name is [kiavash][] ​ سایر پاراگراف•ها و.... ​ [kiavash]: https://kiavash.one/

تعیین خواص لینک‌ها

در مارک‌مود برای لینک‌ها میتوان خاصیت‌های شخصی هم تعریف کرد. برای اینکار باید بلافاصله بعد از پرانتز یا براکت پایانی یک آکولاد باز و بسته کرد و نشخصات را در آن تعریف کرد.

This is [an example][id]{.class1 .class2 #id1 style="..." #id3 other-attributes} یا [This link](http://kiavash.one/){.class1 .class2 #id1 style="..." #id3 name="link-name" other-attributes=""} <a class="class1 class2" id="id1 id3" style="..." name="link-name" other-attributes="">This link</a>

از کاراکتر فاصله در مشخصات استفاده نکنید

اشتباه style="border: 1px; width: 150px" صحیح style="border:1px;width:150px"

تصاویر

برای اضافه کردن تصاویر از همان کاراکترهای مورد استفاده برای افزودن لینک‌ها استفاده میکنیم، تنها یک علامت تعجب اضافه در ابتدای آن باید قید شود.

تصاویر درخط

![Alt text](/path/to/img.jpg) ![Alt text](/path/to/img.jpg "Optional title")

تصاویر ارجاعی

![Alt text][id] سایر پاراگراف‌ها و.... [id]: url/to/image "Optional title attribute"

تعیین خواص تصاویر

در مارک‌مود برای تصاویر میتوان خاصیت‌های شخصی هم تعریف کرد. برای اینکار باید بلافاصله بعد از پرانتز یا براکت پایانی یک آکولاد باز و بسته کرد و نشخصات را در آن تعریف کرد.

![Alt text](/path/to/img.jpg){.class1 .class2 #id1 style="..." #id3 width="100px" height="100px"} ![Alt text][id]{.class1 .class2 #id1 style="border:2px;max-width:100%" #id3 other-attributes}

از کاراکتر فاصله در مشخصات استفاده نکنید

اشتباه style="border: 1px; width: 150px" صحیح style="border:1px;width:150px"

کد (code) #:کد

کدهای درخط

تنها کافی است قبل و بعد از هر کد درون خطی یک (`) گذاشته شود

برای پرینت کردن در خروجی از `printf()` استفاده کنید

برای پرینت کردن در خروجی از printf() استفاده کنید

بلوک‌های کد

برای نوشتن یک بلوک کد تنها کافی است به اندازه‌ی یک tab یا ۴کاراکتر فاصله(space) در ابتدای هر خط خالی جلو برویم.

This is a normal paragraph: This is a code block.

برابر است با

<p>This is a normal paragraph:</p> <pre><code>This is a code block. </code></pre>

همچنین فرورفتگی‌ها در کدهای بلوکی حفظ می‌شوند.

Here is an example of AppleScript: tell application "Foo" beep end tell

برابر است با:

<p>Here is an example of AppleScript:</p> <pre><code>tell application "Foo" beep end tell </code></pre>
جداساز بلوک‌های کد

اگر می‌خواهید یک بلوک کد بلافاصله بعد از یک بلوک دیگر داشته باشید برای جدا کردنشان از یک خط که تنها یک ^ دارد بین دو بلوک استفاده کنید.

code block1 code block1 ^ code block2 code block2

بلوک‌های کد محصور

از یک حصار ``` برای مشخص کردن این بلوک‌ها استفاده میشود و نیازی به اعمال فرورفتگی‌ها ندارند.

``` codes... ```

میتوان کلاس زبان یا خواص دیگر class را برای این حصارها مشخص کرد. اگر بعد از کلاس نام زبان برنامه نویسی مورد نظرتان را بنویسید کلاس زبان در نظر گرفته خواهد شد.

``` perl code... code... code... ``` <pre><code class="language-perl"> code... code... code... </code></pre>

و اگر با : بعد از حصار نام کلاس را بنویسید، کلاس شخصی در نظر گرفته خواهد شد.

``` :class-name some codes... ``` <pre><code class="class-name"> some codes... </code></pre>

جداول

جدول ها به سادگی نمایششان با خطوط ساخته میشوند.

| | Grouping || | First Header | Second Header | Third Header | | ------------ | :-----------: | -----------: | | Content | *Long Cell* || | Content | **Cell** | Cell | | New section | More | Data |

فرمول‌های ریاضی

فرمول‌های ریاضی را به صورت در خط و بلوکی میتوان نمایش داد. در حال حاضر مارک مود تنها از MathML2 پشتیبانی میکند. --(ممکن است فرمول‌ها را به صورت کامل و صحیح نبینید، بعضی از مرورگها مثل اپرا یا کروم، پشتیبانی کامل از MathML ندارند، اما اگر از فایرفاکس استفاده می‌کنید فرمول‌ها را کامل و صحیح خواهید دید.)--

نمایش بلوکی فرمول‌های ریاضی

$$ {e}^{i\pi }+1=0 $$

یا

\\[ {(2x,+,17y,=,23),(x,-,y,=,5):} \\]

نمایش درخط فرمول‌های ریاضی

$Math formula$ یا \\( formula \\)

پانویس

برای مثال میتوان گفت که این کتابخانه با استفاده از پرل[^perl] نوشته شده است.

[^perl]: پرل یک زبان برنامه نویسی است

کتاب نگاری

این مطالب برگرفته از این کتاب بود [پاراگراف پنجم، خط دوم][#منبع]

[#منبع]: یک کتاب تخیلی، فصل سوم، پاراگراف پنجم، خط دوم، نوشته شده توسط کیاوش، انتشارات نامعلوم

مارک‌مودmarkmodدستور زبان نگارش متنmarkdownبرنامه نویسی
بدون شک من کیاوش هستم. https://kiavash.one
شاید از این پست‌ها خوشتان بیاید