Dịch Markdown sang Document Object Model (DOM)

Để đọc, thao tác và sửa đổi nội dung và định dạng của một tài liệu theo lập trình, bạn cần dịch nó thành “Aspose.Words Document Object Model (DOM)”.

Trái ngược với Word document, Markdown không tuân theo DOM được mô tả trong bài viết Aspose.Words Document Object Model (DOM). Tuy nhiên, Aspose.Words cung cấp các phương pháp riêng của nó để dịch thuật các tài liệu Markdown sang DOM và ngược lại, vì vậy chúng ta có thể làm việc thành công với các yếu tố như định dạng văn bản, bảng, tiêu đề và những thứ khác.

Bài viết này giải thích cách các tính năng khác nhau markdown có thể được dịch sang định dạng Aspose.Words DOM và trở lại với Markdown định dạng.

Độ phức tạp của dịch thuật Markdown – DOM – Markdown

Khó khăn chính của cơ chế này là không chỉ dịch Markdown sang DOM mà còn phải thực hiện biến đổi ngược – lưu lại tài liệu về định dạng Markdown với mức mất mát tối thiểu. Có các phần tử, như dấu trích dẫn đa tầng, cho mà sự biến đổi ngược lại là không dễ dàng.

Bộ chuyển dịch của chúng tôi cho phép người dùng không chỉ làm việc với các phần tử phức tạp trong một tài liệu Markdown hiện có, nhưng cũng tạo ra một tài liệu mới của riêng họ ở định dạng Markdown với cấu trúc ban đầu từ con số. Để tạo các yếu tố khác nhau, bạn cần phải sử dụng các kiểu với tên cụ thể theo một số quy tắc được mô tả sau trong bài viết này. Những kiểu kiểu này có thể được tạo lập một cách lập trình.

Nguyên tắc dịch chung

Chúng tôi sử dụng Font định dạng cho các khối inline. Khi không có tương ứng trực tiếp cho một tính năng Markdown trong Aspose.Words DOM, chúng tôi sử dụng kiểu ký tự với tên bắt đầu từ một số từ đặc biệt.

Đối với các khối container chúng tôi sử dụng sự thừa kế kiểu để biểu thị các tính năng lồng nhau Markdown. Trong trường hợp này, ngay cả khi không có các tính năng lồng nhau, chúng tôi cũng sử dụng các kiểu đoạn văn với tên bắt đầu từ những từ đặc biệt.

Danh sách không dấu và danh sách có dấu là khối lưu trữ trong Markdown cũng vậy. Việc lồng ghép của chúng được thể hiện trong DOM theo cách tương tự như tất cả các khối container khác sử dụng di sản kiểu dáng. Tuy nhiên, thêm vào đó, các danh sách trong DOM có định dạng số tương ứng trong kiểu danh sách hoặc đoạn văn bản.

Inline Blocks

Chúng tôi sử dụng Font định dạng khi dịch Bold, Italic hoặcĐánh dấu thông quacác tính năng markdown trong dòng.

Markdown tính năng Aspose.Words
Bold
{1}
Font.Bold = true
Italic
*italic text*
Font.Italic = true
Strikethrough
~Strikethrough text~
Font.StrikeThrough = true

Chúng tôi sử dụng kiểu ký tự với tên bắt đầu từ từ InlineCode, tiếp theo là một dấu chấm tùy chọn (.) và một số dấu nháy ngược (`) cho tính năng InlineCode. Nếu số lượng dấu ngoặc ngược bị bỏ qua thì một dấu ngoặc ngược sẽ được sử dụng mặc định.

Markdown tính năng Aspose.Words
InlineCode
{1}
Font.StyleName = “InlineCode[.][N]”
Autolink
<scheme://domain.com>
<email@domain.com>
Lớp FieldHyperlink này.
Link
{1}
{2}
{3}
{4})
Lớp FieldHyperlink.
Image
{1}
{2}
{3}
{4})
Lớp Shape.

Bloco do Container

Một văn bản là một chuỗi các khối chứa như tiêu đề, đoạn văn, danh sách, trích dẫn và những thứ khác. Các khối container có thể chia thành 2 lớp: Khối lá và Container phức tạp. Khối lá chỉ có thể chứa nội dung trong dòng. Các thùng chứa phức tạp, theo lượt lại có thể chứa các khối thùng chứa khác, bao gồm cả các khối lá.

Leaf Blocks

Bảng bên dưới cho thấy ví dụ sử dụng các Markdown khối lá trong Aspose.Words:

Markdown tính năng Aspose.Words
HorizontalRule
-----
Đây là một đoạn văn đơn giản với hình HorizontalRule tương ứng:
DocumentBuilder.InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
ParagraphFormat.StyleName = “Heading N”, nơi (1 <= n <= 9). < br /> Đây là một kiểu được xây dựng sẵn và nên chính xác giống như mẫu đã chỉ định (không có hậu tố hoặc tiền tố nào được phép). < br /> Vậy thì, nó sẽ chỉ là một đoạn văn thường với kiểu tương ứng.
Setext Heading
=== (nếu Heading cấp 1),
--- (nếu Heading cấp 2)
ParagraphFormat.StyleName = “SetextHeading[some suffix]”, dựa theo “Heading N” kiểu.
Nếu (N >= 2), sau đó “Heading 2” sẽ được sử dụng, nếu không “Heading 1”.
Bất kỳ hậu tố nào cũng được phép, nhưng Aspose.Words nhập khẩu sử dụng số “1” và “2” tương ứng.
Indented Code
<br/>if ()<br/>then<br/>else<br/>```
”:13
ParagraphFormat.StyleName = “IndentedCode[some suffix]”

Container phức tạp

Bảng dưới đây cho thấy các ví dụ về sử dụng Markdown Complex Containers trong Aspose.Words:

Markdown tính năng Aspose.Words
Quote
> quote,
>> nested quote
ParagraphFormat.StyleName = “Quote[some suffix]”
hậu tố trong tên phong cách là tùy chọn, nhưng Aspose.Words nhập khẩu sử dụng các số được sắp xếp 1, 2, 3,… trong trường hợp trích dẫn lồng nhau.
Lồng được xác định thông qua phong cách được thừa hưởng.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Danh sách không dấu được thể hiện bằng cách đánh số đoạn văn:
ListFormat.ApplyBulletDefault()
Có thể có 3 loại danh sách không dấu. Chúng chỉ khác nhau ở định dạng số của cấp đầu tiên. Những cái đó là: ‘-’, ‘+’ hay ‘*’ tương ứng.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Danh sách thứ tự được thể hiện bằng cách đánh số đoạn văn bản:
ListFormat.ApplyNumberDefault()
Có 2 dấu phân cách định dạng số: ‘. ' và ‘)’. Mーカー mặc định là ‘.’.

Bảng

Aspose.Words cũng cho phép dịch các bảng sang DOM, như thấy ở dưới đây:

Markdown tính năng Aspose.Words
Table
a | b
- | -
g | d
Table, RowCell lớp.”

Xem thêm