نحوه کارکرد پنداک
پنداک تمام اسناد را به یک درخت نحو انتزاعی یا Abstract Syntax Tree (AST) تبدیل میکند1. از این نقطه، محتوا میتواند فیلتر شود و اسناد در هر فرمت دلخواهی نوشته شوند:
برای درک بهتر نحوه کار AST، سادهترین روش این است که یک نمونه را مشاهده کنیم. فرض کنید سندی به شکل زیر داریم:
اگر این سند بهعنوان مثال در LaTeX نوشته شده باشد (پنداک بر این اصل بنا شده است که زبان فایل ورودی محدودیتی ایجاد نکند)، دستور زیر AST آن را تولید میکند:
pandoc --from=latex --to=native silly.tex
و خروجی به این شکل خواهد بود:
[ Header
1
( "a-silly-joke" , [] , [] )
[ Str "A" , Space , Str "Silly" , Space , Str "Joke" ]
, Para
[ Str "I\8217m"
, Space
, Span ( "" , [] , [] ) [ Strong [ Str "concerned" ] ]
, Space
, Str "for"
, Space
, Str "the"
, Space
, Str "calendar"
, Note
[ Para
[ Str "Its"
, Space
, Str "days"
, Space
, Str "are"
, Space
, Span ( "" , [] , [] ) [ Emph [ Str "numbered" ] ]
, Str "."
]
]
, Str "."
]
]
در خط ۱، Header constructor را داریم که یک عنوان سطح ۱ است (خط ۲) و به آن یک نام اختصاص داده شده (خط ۳) و همچنین متن آن (خط ۴). توجه داشته باشید که متن شامل سازندههای Str است—یک رشته جداگانه برای هر کلمه—و بین آنها سازندههای Space قرار دارند برای مشخص کردن فاصله بین کلمات.
سپس Para constructor برای یک پاراگراف در خط ۵ آمده است. داخل پاراگراف، اولین رشته "I'm" شامل یک علامت کوتاهکننده (آپاستروف) است. پنداک بهطور خودکار نقلقولها و آپاستروفها را با سمبلهای مناسب UTF-8 قرار میدهد. عدد 8217 مقدار دسیمال یا دهدهی کد UTF-8 این نماد است. بقیه کد نیز به همین صورت ادامه مییابد؛ برای درک اولیه و کوتاه از نحوه کارکرد پنداک، همین مقدار کافی است.
چون نمایش میانی سند یا همان AST در پنداک نسبت به بسیاری از فرمتهایی که بین آنها تبدیل انجام میدهد، کمجزئیاتتر و سادهتر است، نباید انتظار تبدیل کامل و دقیق بین همه فرمتها را داشت. پنداک سعی میکند عناصر ساختاری سند را حفظ کند، اما جزئیاتی مانند اندازه حاشیه (Margin) را تضمین نمیکند. همچنین برخی عناصر سند، مانند جدولهای پیچیده، ممکن است با مدل ساده پنداک سازگار نباشند. در حالی که تبدیل از مارکدون به فرمتهای دیگر معمولاً کامل است، تبدیل از فرمتهای پیچیدهتر ممکن است منجر به از دست رفتن برخی جزئیات شود.