ترجمة Markdown إلى Document Object Model (DOM)
لقراءة محتوى المستند وتنسيقه ومعالجته وتعديله برمجيًا، تحتاج إلى ترجمته إلى Aspose.Words Document Object Model (DOM).
وعلى النقيض من مستندات Word، لا يتوافق Markdown مع DOM الموضح في مقالة Aspose.Words Document Object Model (DOM). ومع ذلك، يوفر Aspose.Words آليته الخاصة لترجمة مستندات Markdown إلى DOM والعودة، حتى نتمكن من العمل بنجاح مع عناصرها مثل تنسيق النص والجداول والعناوين وغيرها.
تشرح هذه المقالة كيف يمكن ترجمة ميزات markdown المتنوعة إلى Aspose.Words DOM وإعادتها إلى تنسيق Markdown.
تعقيد الترجمة Markdown – DOM – Markdown
لا تكمن الصعوبة الرئيسية لهذه الآلية في ترجمة Markdown إلى DOM فحسب، بل أيضًا في إجراء التحويل العكسي - لحفظ المستند مرة أخرى بتنسيق Markdown بأقل قدر من الخسارة. هناك عناصر، مثل علامات الاقتباس متعددة المستويات، والتي لا يكون التحويل العكسي لها أمرًا تافهًا.
يتيح محرك الترجمة الخاص بنا للمستخدمين ليس فقط العمل مع العناصر المعقدة في مستند Markdown موجود، ولكن أيضًا إنشاء المستند الخاص بهم بتنسيق Markdown بالبنية الأصلية من البداية. لإنشاء عناصر متنوعة، تحتاج إلى استخدام أنماط بأسماء محددة وفقًا لقواعد معينة سيتم توضيحها لاحقًا في هذه المقالة. يمكن إنشاء مثل هذه الأنماط برمجياً.
مبادئ الترجمة المشتركة
نحن نستخدم تنسيق Font للكتل المضمنة. عندما لا يكون هناك توافق مباشر لميزة Markdown في Aspose.Words DOM، نستخدم نمط أحرف مع اسم يبدأ من بعض الكلمات الخاصة.
بالنسبة لكتل الحاويات، نستخدم وراثة النمط للإشارة إلى ميزات Markdown المتداخلة. في هذه الحالة، حتى في حالة عدم وجود ميزات متداخلة، نستخدم أيضًا أنماط الفقرة مع اسم يبدأ من بعض الكلمات الخاصة.
القوائم ذات التعداد النقطي والمرتبة هي كتل حاويات في Markdown أيضًا. يتم تمثيل تداخلها في DOM بنفس الطريقة كما هو الحال مع جميع كتل الحاويات الأخرى التي تستخدم وراثة النمط. ومع ذلك، بالإضافة إلى ذلك، تحتوي القوائم في DOM على تنسيق أرقام مطابق سواء في نمط القائمة أو تنسيق الفقرة.
كتل مضمنة
نحن نستخدم تنسيق Font عند ترجمة ميزات markdown المضمّنة بتنسيق Bold أو Italic أو ~~ يتوسطه خط ~~.
ميزة Markdown | Aspose.Words |
---|---|
Bold{1} |
Font.Bold = true |
Italic*italic text* |
Font.Italic = true |
Strikethrough~Strikethrough text~ |
Font.StrikeThrough = true |
|
نحن نستخدم نمط أحرف باسم يبدأ من كلمة InlineCode
، متبوعًا بنقطة اختيارية (.)
وعدد من علامات التحديد الخلفية (`)
لميزة InlineCode
. إذا تم تفويت عدد من العلامات الخلفية، فسيتم استخدام علامة خلفية واحدة بشكل افتراضي.
ميزة Markdown | Aspose.Words |
---|---|
InlineCode{1} |
Font.StyleName = “InlineCode[.][N]” |
Autolink<scheme://domain.com> <email@domain.com> |
فئة FieldHyperlink |
Link{1} {2} {3} {4}) |
فئة FieldHyperlink |
Image{1} {2} {3} {4}) |
فئة Shape |
كتل الحاويات
المستند عبارة عن سلسلة من كتل الحاوية مثل العناوين والفقرات والقوائم وعلامات الاقتباس وغيرها. يمكن تقسيم كتل الحاويات إلى فئتين: الكتل الورقية والحاويات المعقدة. يمكن أن تحتوي الكتل الورقية على محتوى مضمن فقط. يمكن للحاويات المعقدة بدورها أن تحتوي على كتل حاويات أخرى، بما في ذلك الكتل الورقية.
كتل أوراق
يوضح الجدول أدناه أمثلة لاستخدام كتل Markdown Leaf في Aspose.Words:
ميزة Markdown | Aspose.Words |
---|---|
HorizontalRule----- |
هذه فقرة بسيطة ذات شكل HorizontalRule المطابق:DocumentBuilder.InsertHorizontalRule() |
ATX Heading# H1, ## H2, ### H3… |
ParagraphFormat.StyleName = “Heading N” ، حيث (1<= N <= 9).تتم ترجمة هذا إلى نمط مدمج ويجب أن يكون بالضبط من النمط المحدد (لا يُسمح باللاحقات أو البادئات). وإلا فستكون مجرد فقرة عادية ذات نمط مناسب |
Setext Heading=== (إذا كان مستوى العنوان 1)،--- (إذا كان مستوى العنوان 2) |
ParagraphFormat.StyleName = “SetextHeading[some suffix]” ، استنادًا إلى أسلوب “Heading N” .إذا كان (N >= 2)، فسيتم استخدام “Heading 2” ، وإلا “Heading 1” .يُسمح بأي لاحقة، لكن مستورد Aspose.Words يستخدم الأرقام “1” و"2" على التوالي |
|
|
Indented Code | ParagraphFormat.StyleName = “IndentedCode[some suffix]” |
Fenced Code
|
ParagraphFormat.StyleName = “FencedCode[.][info string]” يعتبر [.] و[info string] اختياريين |
حاويات معقدة
يوضح الجدول أدناه أمثلة لاستخدام حاويات Markdown المعقدة في Aspose.Words:
ميزة Markdown | Aspose.Words |
---|---|
Quote> quote, >> nested quote |
ParagraphFormat.StyleName = “Quote[some suffix]” اللاحقة في اسم النمط اختيارية، لكن المستورد Aspose.Words يستخدم الأرقام المرتبة 1، 2، 3، ….. في حالة الاقتباسات المتداخلة. يتم تعريف التداخل عبر الأنماط الموروثة |
|
|
BulletedList- Item 1 - Item 2 - Item 2a - Item 2b |
يتم تمثيل القوائم ذات التعداد النقطي باستخدام ترقيم الفقرات:ListFormat.ApplyBulletDefault() يمكن أن يكون هناك 3 أنواع من القوائم ذات التعداد النقطي. وهي تختلف فقط في تنسيق الترقيم من المستوى الأول. وهي: ‘-’ أو ‘+’ أو ‘*’ على التوالي |
OrderedList1. Item 1 2. Item 2 1) Item 2a 2) Item 2b |
يتم تمثيل القوائم المرتبة باستخدام ترقيم الفقرات:ListFormat.ApplyNumberDefault() يمكن أن تكون هناك علامتان لتنسيق الأرقام: ‘.’ و ‘)’. العلامة الافتراضية هي “.” |
|
الجداول
يسمح Aspose.Words أيضًا بترجمة الجداول إلى DOM، كما هو موضح أدناه:
ميزة Markdown | Aspose.Words |
---|---|
Table أ | ب -|- c | د |
فئات Table وRow وCell |
|