Dịch Markdown sang Document Object Model (DOM)
Để đọc, thao tác và sửa đổi nội dung cũng như định dạng của tài liệu theo chương trình, bạn cần dịch tài liệu đó sang Aspose.Words Document Object Model (DOM).
Ngược lại với tài liệu Word, 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ơ chế dịch tài liệu Markdown sang DOM và ngược lại của riêng mình, để chúng tôi có thể làm việc thành công với các thành phần của chúng như định dạng văn bản, bảng, tiêu đề và các thành phần khác.
Bài viết này giải thích cách dịch các tính năng markdown khác nhau sang Aspose.Words DOM và quay lại định dạng Markdown.
Độ phức tạp của bản dịch 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 mức độ mất mát tối thiểu. Có những phần 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 hề đơn giản.
Công cụ 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 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 phần 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. Những kiểu như vậy có thể được tạo theo chương trình.
Nguyên tắc dịch thuật chung
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 vùng chứa, chúng tôi sử dụng tính 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ó đối tượng lồng nhau, chúng tôi cũng sử dụng kiểu đoạn văn có tên bắt đầu từ một số từ đặc biệt.
Danh sách có dấu đầu dòng và được sắp xếp cũng là các khối chứa trong Markdown. Việc lồng chúng được thể hiện trong DOM giống như đối với tất cả các khối vùng chứa khác sử dụng tính 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 markdown nội tuyến Bold, Italic hoặc Gạch ngang.
tính năng Markdown | 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ự có tên bắt đầu từ từ InlineCode
, theo sau là dấu chấm (.)
tùy chọn và một số dấu kiểm ngược (`)
cho tính năng InlineCode
. Nếu thiếu một số dấu tích ngược thì mặc định một dấu tích ngược sẽ được sử dụng.
tính năng Markdown | Aspose.Words |
---|---|
InlineCode{1} |
Font.StyleName = “InlineCode[.][N]” |
Autolink<scheme://domain.com> <email@domain.com> |
Lớp FieldHyperlink |
Link{1} {2} {3} {4}) |
Lớp FieldHyperlink |
Image{1} {2} {3} {4}) |
Lớp Shape |
Khối chứa
Tài liệu là một chuỗi các khối chứa chẳng hạn như tiêu đề, đoạn văn, danh sách, dấu ngoặc kép và các khối khác. Các khối container có thể được chia thành 2 lớp: Khối lá và Container phức hợp. Khối lá chỉ có thể chứa nội dung nội tuyến. Ngược lại, các thùng chứa phức tạp có thể chứa các khối chứa khác, bao gồm cả các khối Lá.
khối lá
Bảng bên dưới hiển thị các ví dụ về cách sử dụng khối Lá Markdown trong Aspose.Words:
tính năng Markdown | Aspose.Words |
---|---|
HorizontalRule----- |
Đây là một đoạn văn đơn giản có hình dạng Quy tắc ngang tương ứng:DocumentBuilder.InsertHorizontalRule() |
ATX Heading# H1, ## H2, ### H3… |
ParagraphFormat.StyleName = “Heading N” , trong đó (1<= N <= 9).Điều này được dịch sang kiểu có sẵn và phải chính xác theo mẫu đã 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 văn thông thường có kiểu dáng tương ứng |
Setext Heading=== (nếu là Heading cấp 1),--- (nếu Tiêu đề cấp 2) |
ParagraphFormat.StyleName = “SetextHeading[some suffix]” , dựa trên phong cách “Heading N” .Nếu (N >= 2) thì “Heading 2” sẽ được sử dụng, nếu không thì “Heading 1” .Cho phép bất kỳ hậu tố nào, nhưng trình nhập Aspose.Words sử dụng các số “1” và “2” tương ứng |
|
|
Indented Code | ParagraphFormat.StyleName = “IndentedCode[some suffix]” |
Fenced Code
|
ParagraphFormat.StyleName = “FencedCode[.][info string]” [.] và [info string] là tùy chọn |
Container phức tạp
Bảng bên dưới hiển thị các ví dụ về cách sử dụng Bộ chứa phức hợp Markdown trong Aspose.Words:
tính năng Markdown | Aspose.Words |
---|---|
Quote> quote, >> nested quote |
ParagraphFormat.StyleName = “Quote[some suffix]” Hậu tố trong tên kiểu là tùy chọn, nhưng trình nhập Aspose.Words sử dụng các số thứ tự 1, 2, 3, …. trong trường hợp dấu ngoặc kép lồng nhau. Việc lồng nhau được xác định thông qua các kiểu kế thừa |
|
|
BulletedList- Item 1 - Item 2 - Item 2a - Item 2b |
Danh sách có dấu đầu dòng đượ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 có dấu đầu dòng. Chúng chỉ khác nhau ở định dạng đánh số ở cấp độ đầu tiên. Đó là: ‘-’ , ‘+’ hoặc ‘*’ tương ứng |
OrderedList1. Item 1 2. Item 2 1) Item 2a 2) Item 2b |
Danh sách có thứ tự được thể hiện bằng cách đánh số đoạn văn:ListFormat.ApplyNumberDefault() Có thể có 2 dấu định dạng số: ‘.’ Và ‘)’. Điểm đánh dấu mặc định là ‘.’ |
|
Những cái bàn
Aspose.Words cũng cho phép dịch bảng sang DOM, như hình dưới đây:
tính năng Markdown | Aspose.Words |
---|---|
Table một | b -|- c|d |
Các lớp Table, Row và Cell |
|