Dịch Markdown Sang Mô Hình Đối tượng Tài liệu (DOM)

Để lập trình đọc, thao tác và sửa đổi nội dung và định dạng của tài liệu, bạn cần dịch nó Sang Mô hình Đối tượng Tài liệu Aspose.Words (DOM).

Trái ngược với Tài liệu Word, Markdown không phù hợp với DOM được mô tả trong Aspose.Words Mô Hình Đối Tượng Tài Liệu (DOM) bài viết. Tuy nhiên, Aspose.Words cung cấp cơ chế riêng để dịch Markdown tài liệu sang DOM và quay lại, để chúng tôi có thể làm việc thành công với các yếu tố của chúng như định dạng văn bản, bảng, tiêu đề và các yếu tố khác.

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

Sự phức Tạp Của Dịch Thuật Markdown – DOM – Markdown

Khó khăn chính của cơ chế này không chỉ là dịch Markdown sang DOM, mà còn thực hiện chuyển đổi ngược lại – để lưu tài liệu trở lại định dạng Markdown với tổn thất tối thiểu. Có những yếu tố, chẳng hạn như dấu ngoặc kép đa cấp, mà việc chuyển đổi ngược lại không phải là tầm thường.

Công cụ dịch thuật 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 tài liệu Markdown hiện có mà còn tạo tài liệu của riêng họ ở định dạng Markdown với cấu trúc ban đầu từ đầu. Để tạo các yếu tố khác nhau, bạn cần sử dụng các kiểu có tên cụ thể theo các quy tắc nhất định được mô tả ở phần sau của bài viết này. Các kiểu như vậy có thể được tạo theo chương trình.

Nguyên Tắc Dịch Thuật Phổ Biến

Chúng tôi sử dụng định dạng Font cho các khối nội tuyến. Khi không có sự tương ứng trực tiếp cho tính năng Markdown trong Aspose.Words DOM, chúng tôi sử dụng kiểu ký tự có 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 kế thừa kiểu để biểu thị các tính năng Markdown lồng nhau. 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ừ một số từ đặc biệt.

Danh sách có dấu đầu dòng và thứ tự cũng là các khối chứa trong Markdown. Việc làm tổ của chúng được biểu diễn theo DOM giống như đối với tất cả các khối container khác bằng cách sử dụng kế thừa kiểu. Tuy nhiên, ngoài ra, các danh sách trong DOM có định dạng số tương ứng theo kiểu danh sách hoặc định dạng đoạn văn.

Khối Nội Tuyến

Chúng tôi sử dụng định dạng Font khi dịch các tính năng Bold, Italic hoặc Strikethrough nội tuyến markdown.

Markdown tính năng Aspose.Words
Bold
**bold text**
get_Font()->set_Bold(true)
Italic
*italic text*
get_Font()->set_Italic(true)
Strikethrough
~Strikethrough text~
get_Font()->set_StrikeThrough(true)

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

Markdown tính năng Aspose.Words
InlineCode
**inline code**
get_Font()->set_StyleName(u"InlineCode[.][N]")
Autolink
<scheme://domain.com>
<email@domain.com>
Lớp FieldHyperlink.
Link
[link text](url)
[link text](<url>"title")
[link text](url 'title')
[link text](url (title))
Lớp FieldHyperlink.
Image
![](url)
![alt text](<url>"title")
![alt text](url ‘title’)
![alt text](url (title))
Lớp Shape.

Khối Container

Tài liệu 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à các khối khác. Các khối Container có thể được chia thành các lớp 2: Khối Lá và Các Thùng Chứa Phức tạp. Khối lá chỉ có thể chứa nội dung nội tuyến. Đến lượt mình, các thùng chứa phức tạp có thể chứa các khối container khác, bao gồm cả các khối Lá.

Khối Lá

Bảng dưới đây cho thấy các ví dụ về việc sử dụng Markdown Khối Lá trong Aspose.Words:

Markdown tính năng Aspose.Words
HorizontalRule
-----
Đây là một đoạn đơn giản với hình dạng HorizontalRule tương ứng:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), ở đâu (1<= C <= 9).
Điều này được dịch sang một kiểu tích hợp và phải chính xác theo mẫu được chỉ định (không cho phép hậu tố hoặc tiền tố).
Nếu không, nó sẽ chỉ là một đoạn thông thường với một phong cách tương ứng.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), dựa trên kiểu "Heading N".
Nếu (N > = 2), thì "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à nhập khẩu sử dụng các số “1” và “2” tương ứng.
Indented Code get_ParagraphFormat->set_StyleName(u"IndentedCode[some suffix]")
Fenced Code
``` c#
if ()
then
else
```
get_ParagraphFormat()->set_StyleName(u"FencedCode[.][info string]")
[.][info string] là tùy chọn.

Container Phức Tạp

Bảng dưới đây cho thấy các ví dụ về việc sử dụng Markdown Container Phức tạp trong Aspose.Words:

Markdown tính năng Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
Hậu tố trong tên kiểu là tùy chọn, nhưng Aspose.Words nhà nhập khẩu sử dụng các số có thứ tự1, 2, 3, …. trong trường hợp dấu ngoặc kép lồng nhau.
Việc làm tổ được xác định thông qua các kiểu được kế thừa.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Danh sách dấu đầu dòng được biểu diễn bằng cách sử dụng đánh số đoạn văn:
get_ListFormat()->ApplyBulletDefault()
Có thể có 3 loại danh sách dấu đầu dòng. Chúng chỉ khác nhau ở định dạng đánh số ở cấp độ đầu tiên. Đây là: ‘-’, ‘+’ hoặc ‘*’ tương ứng.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Danh sách có thứ tự được biểu diễn bằng cách sử dụng đánh số đoạn văn:
get_ListFormat()->ApplyNumberDefault()
Có thể có các điểm đánh dấu định dạng số 2: ‘.’ và ‘)’. Điểm đánh dấu mặc định là ‘.’.

Bảng

Aspose.Words cũng cho phép dịch bảng thành DOM, như hình dưới đây:

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

Xem Thêm