Bir Markdown Document Object Model'a çevirin (DOM)

Belgenin içeriğini ve biçimlendirmesini programlı olarak okumak, değiştirmek ve değiştirmek için, bunu Aspose.Words Document Object Model ( DOM ) ‘e çevirmek gerekir.

Word belgeleriyle çelişkili olarak, Markdown makale Aspose.Words Document Object Model (DOM) içinde açıklanan DOM’ü takip etmez. Bununla birlikte, Aspose.Words kendi mekanizmasını çevirerek Markdown belgeleri için DOM ve geri çevirme, bu nedenle metin biçimlendirme, tablolar, başlıklar vb. gibi öğeleri ile başarıyla çalışabiliriz.

Bu makale, çeşitli markdown özelliklerinin nasıl Aspose.Words DOM ve geri Markdown formatına çevrildiğini gösterir.

Çevirinin karmaşıklığı Markdown – DOM – Markdown

Bu mekanizmanın ana zorluğu yalnızca Markdown’i DOM’e çevirmek değil, aynı zamanda ters dönüşümü gerçekleştirmektir – belgenin en az kaybıyla Markdown formatına geri dönüştürülmesini sağlamaktır. Ters dönüşüm için üçgen alıntılar gibi bazı elemanlar söz konusudur ve bu elemanların ters dönüşümü kolay değildir.

Çeviri motorumuz kullanıcıların var olan bir Markdown belgesinde karmaşık öğelerle çalışmasına olanak verir, ancak aynı zamanda orijinal yapısından başlayarak kendi Markdown biçimindeki belgelerini sıfırdan oluşturmasına da izin verir. Çeşitli öğeler oluşturmak için belirli kurallar daha sonra bu makalede açıklanan belirli adlara sahip stilleri kullanmanız gerekir. Bu stiller programatik olarak oluşturulabilir.

Ortak Çeviri İlkeleri

Çizgili bloklar için Font biçimlendirme kullanıyoruz. Bir özelliğin doğrudan karşılığı olmadığında bir Markdown özelliği var Aspose.Words DOM, bir karakter stilini kullanırız, adı bazı özel kelimelerden başlar.

Kapsayıcı bloklar için, iç içe geçmiş Markdown özellikleri göstermek için stil devralma kullanırız. Bu durumda, iç içe geçmiş özelliklerin bile olmaması durumunda bile, özel kelimelerle başlayan bir ad ile paragraf stilleri de kullanırız.

Girintili ve sıralı liste Markdown içinde de kaplama bloklarıdır. Onların iç içe geçmesi stil kalıtımı kullanarak diğer tüm kaplama blokları gibi DOM’de aynı şekilde temsil edilir. Bununla birlikte, ek olarak, DOM’deki listeler liste tarzında ya da paragraf biçimlendirmesi ile uyumlu sayısal bir biçimlendirme kullanır.

İnline Bloklar

Bu, çevirirken Font biçimlendirme kullanırız, Bold ve Italic veya ~Döndürme~ iç içe geçmiş markdown özellikleri.

Markdown özelliğini Aspose.Words
Bold
{1}
Font.Bold = true
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Make the text Bold.
builder.getFont().setBold(true);
builder.writeln("This text will be Bold");
Italic
*italic text*
Font.Italic = true
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Make the text Italic.
builder.getFont().setItalic(true);
builder.writeln("This text will be Italic");
Strikethrough
~Strikethrough text~
Font.StrikeThrough = true
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Make the text Strikethrough.
builder.getFont().setStrikeThrough(true);
builder.writeln("This text will be Strikethrough");

Bir karakter stilimiz var, adı InlineCode kelimesiyle başlar, ardından isteğe bağlı bir nokta (.) ve birkaç ters tırnak (`) ile birlikte kullanılır InlineCode özelliği. Ters tırnak sayısı eksikse varsayılan olarak tek bir ters tırnak kullanılır.

Markdown özelliği Aspose.Words
InlineCode
{1}
Font.StyleName = “InlineCode[.][N]”
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Number of backticks is missed, one backtick will be used by default.
Style inlineCode1BackTicks = builder.getDocument().getStyles().add(StyleType.CHARACTER, "InlineCode");
builder.getFont().setStyle(inlineCode1BackTicks);
builder.writeln("Text with InlineCode style with 1 backtick");
// There will be 3 backticks.
Style inlineCode3BackTicks = builder.getDocument().getStyles().add(StyleType.CHARACTER, "InlineCode.3");
builder.getFont().setStyle(inlineCode3BackTicks);
builder.writeln("Text with InlineCode style with 3 backtick");
Autolink
<scheme://domain.com>
<email@domain.com>
The FieldHyperlink sınıfı.
Link
{1}
{2}
{3}
{4})
FieldHyperlink sınıfı.
Image
{1}
{2}
{3}
{4})
Shape sınıfı.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Insert image.
Shape shape = new Shape(builder.getDocument(), ShapeType.IMAGE);
shape.setWrapType(WrapType.INLINE);
shape.getImageData().setSourceFullName("/attachment/1456/pic001.png");
shape.getImageData().setTitle("title");
builder.insertNode(shape);

Konteyner Blokları

Bir belge başlıklar, paragraflar, listeler, alıntılar ve diğerleri gibi kapsayıcı blokların bir dizisidir. Kapsayıcı bloklar 2 sınıfa ayrılabilir: Yaprak blokları ve Karmaşık Kapsayıcılar. Yaprak bloklar sadece iç içe geçmiş içeriği içerebilir. Karmaşık kapsayıcılar ise diğer kapsayıcı blokları, yaprak blokları dahil olmak üzere içerebilir.

Yaprak Blokları

Aşağıdaki tablo Aspose.Words ‘da kullanılan Markdown Leaf bloklarının örneklerini göstermektedir:

Markdown özelliği Aspose.Words
HorizontalRule
-----
Bu, karşılık gelen bir HorizontalRule şekline sahip basit bir paragraftır:
DocumentBuilder.InsertHorizontalRule()’’
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Insert horizontal rule.
builder.insertHorizontalRule();
ATX Heading< br / > # H1, ## H2, ### H3… ParagraphFormat.StyleName = "Heading N", burada (1<= N <= 9).
Bu yerleşik bir stil ile çevrilir ve kesinlikle belirtilen kalıba uymalıdır (son ekleri veya öneki izin verilmez).
aksi takdirde, sadece normal bir paragrafla eşleşen bir stile sahip olacaktır.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// By default Heading styles in Word may have Bold and Italic formatting.
//If we do not want to be emphasized, set these properties explicitly to false.
builder.getFont().setBold(false);
builder.getFont().setItalic(false);
builder.getParagraphFormat().setStyleName("Heading 1");
builder.writeln("This is an H1 tag");
Setext Heading
=== (eğer Başlık Düzeyi 1),
--- (eğer Başlık Düzeyi 2)
ParagraphFormat.StyleName = “SetextHeading[some suffix]”, ‘Heading N'‘e dayalı stil.
Eğer (N >= 2), o zaman ‘Heading 2’ kullanılacak, aksi takdirde ‘Heading 1’.
Herhangi bir sonek izin verilir fakat Aspose.Words içeri aktarıcı sırasıyla “1” ve “2” sayılarını kullanır.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
builder.getParagraphFormat().setStyleName("Heading 1");
builder.writeln("This is an H1 tag");
// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder.getFont().setBold(false);
builder.getFont().setItalic(false);
Style setexHeading1 = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "SetexHeading1");
builder.getParagraphFormat().setStyle(setexHeading1);
builder.getDocument().getStyles().get("SetexHeading1").setBaseStyleName("Heading 1");
builder.writeln("Setex Heading level 1");
builder.getParagraphFormat().setStyle(builder.getDocument().getStyles().get("Heading 3"));
builder.writeln("This is an H3 tag");
// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder.getFont().setBold(false);
builder.getFont().setItalic(false);
Style setexHeading2 = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "SetexHeading2");
builder.getParagraphFormat().setStyle(setexHeading2);
builder.getDocument().getStyles().get("SetexHeading2").setBaseStyleName("Heading 3");
// Setex heading level will be reset to 2 if the base paragraph has a Heading level greater than 2.
builder.writeln("Setex Heading level 2");
Indented Code
<br/>if ()<br/>then<br/>else<br/>```
ParagraphFormat.StyleName = “IndentedCode[some suffix]”
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
Style fencedCode = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "FencedCode");
builder.getParagraphFormat().setStyle(fencedCode);
builder.writeln("This is an fenced code");
Style fencedCodeWithInfo = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "FencedCode.C#");
builder.getParagraphFormat().setStyle(fencedCodeWithInfo);
builder.writeln("This is a fenced code with info string");

Karma Kapsayıcılar

Aşağıdaki tabloda, Markdown Karma Kapsayıcıların Aspose.Words’da kullanımının örnekleri gösterilmektedir:

Markdown özelliği Aspose.Words
0Quote
1> quote,
2>> nested quote
ParagraphFormat.StyleName = “Quote[some suffix]”
Stilin adı için sonek isteğe bağlıdır, ancak Aspose.Words iç içe geçmiş alıntılar durumunda düzgün numaralar 1, 2, 3, …. kullanır.
İç içe geçme, miras alınan stiller aracılığıyla tanımlanır.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// By default a document stores blockquote style for the first level.
builder.getParagraphFormat().setStyleName("Quote");
builder.writeln("Blockquote");
// Create styles for nested levels through style inheritance.
Style quoteLevel2 = builder.getDocument().getStyles().add(StyleType.PARAGRAPH, "Quote1");
builder.getParagraphFormat().setStyle(quoteLevel2);
builder.getDocument().getStyles().get("Quote1").setBaseStyleName("Quote");
builder.writeln("1. Nested blockquote");
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Puanlı listeler paragraf numaralandırma kullanılarak temsil edilir:
ListFormat.ApplyBulletDefault()
There can be 3 types of bulleted lists. They are only diff in a numbering format of the very first level. These are: ‘-’, ‘+’ or ‘*’ respectively.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
builder.getListFormat().applyBulletDefault();
builder.getListFormat().getList().getListLevels().get(0).setNumberFormat("-");
builder.writeln("Item 1");
builder.writeln("Item 2");
builder.getListFormat().listIndent();
builder.writeln("Item 2a");
builder.writeln("Item 2b");
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Numaralı sıralı listeler paragraf numaralandırması ile gösterilir:
ListFormat.ApplyNumberDefault()
İki numara biçimi işareti kullanılabilir: ‘.’ ve ‘)’. Varsayılan işaret ‘.’dir.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.getListFormat().applyBulletDefault();
builder.getListFormat().getList().getListLevels().get(0).setNumberFormat(MessageFormat.format("{0}.", (char)0));
builder.getListFormat().getList().getListLevels().get(1).setNumberFormat(MessageFormat.format("{0}.", (char)1));
builder.writeln("Item 1");
builder.writeln("Item 2");
builder.getListFormat().listIndent();
builder.writeln("Item 2a");
builder.writeln("Item 2b");

Masalar

Aspose.Words ayrıca aşağıda gösterildiği gibi tabloları DOM’e çevirmenizi sağlar:

Markdown özellik Aspose.Words
Table
a|b
-|-
c|d
Table, Row ve Cell sınıfları.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Use a document builder to add content to the document.
DocumentBuilder builder = new DocumentBuilder();
// Add the first row.
builder.insertCell();
builder.writeln("a");
builder.insertCell();
builder.writeln("b");
// Add the second row.
builder.insertCell();
builder.writeln("c");
builder.insertCell();
builder.writeln("d");

Ayrıca bakınız