2014-12-08 13 views

Trả lời

8

Như một nhận xét khác đã đề cập, Python-Markdown có một số extension API và điều đó xảy ra khi sử dụng xml.etree.ElementTree bên dưới nắp. Về mặt lý thuyết, bạn có thể tạo một phần mở rộng để truy cập đối tượng ElementTree bên trong đó và làm những gì bạn muốn với nó. Tuy nhiên, nếu bạn sử dụng HTML thô (bao gồm các thực thể HTML) và/hoặc phần mở rộng mãhilite, bạn sẽ nhận được một tài liệu không đầy đủ vì có một vài trình xử lý hậu kỳ chạy trên chuỗi được tuần tự hóa. Vì vậy, tôi sẽ không thực sự recommenced nó cho mục đích của bạn (tiết lộ đầy đủ: Tôi là nhà phát triển của Python-Markdown).

Danh sách khá dài nếu triển khai Markdown tồn tại here. Trong số các triển khai Python thuần túy trong danh sách đó, Mistune là duy nhất mà tôi biết rằng sử dụng quy trình hai bước (bước một trả về một cây phân tích cú pháp, bước hai nối tiếp cây phân tích cú pháp - bạn chỉ cần bước một). Tôi chưa bao giờ sử dụng cá nhân Mistune và không thể nói với sự ổn định hoặc chính xác của nó, nhưng nó được cho là một bản sao Python của thư viện JavaScript rất tốt Marked.

Nếu bạn tìm kiếm xung quanh, tôi tin rằng một vài triển khai C sử dụng mẫu tương tự. Một số người trong số họ thậm chí có thể đã có một trình bao bọc Python. Nếu không, nó không nên quá khó khăn để tạo ra một wrapper với ctypes.

Nếu vì lý do nào đó bạn muốn sử dụng triển khai không cung cấp cho bạn cây phân tích đầy đủ, thì tôi sẽ đề nghị phân tích cú pháp HTML kết quả bằng cách sử dụng LXML (Trình bao python của C lib) hoặc html5lib (python thuần túy), cả hai đều có thể trả về một đối tượng ElementTree và nhanh hơn nhiều (đặc biệt là LXML) và tha thứ hơn về HTML không hợp lệ (đặc biệt là html5lib, hoạt động giống như các trình duyệt thực trong thế giới thực). Hãy nhớ rằng Markdown có thể chứa HTML thô và hầu hết các trình phân tích cú pháp Markdown chỉ đơn giản là chuyển nó qua, hợp lệ hoặc không. Nếu sau đó bạn cố gắng phân tích nó bằng trình phân tích cú pháp dựa trên XML (như trong xml.etree) hoặc một trình phân tích cú pháp HTML nghiêm ngặt (như html.parser trong lib chuẩn), một thẻ không hợp lệ duy nhất có thể làm hỏng trình phân tích cú pháp HTML.

2

Có mô-đun phân tích cú pháp Markdown, nhưng không giống như mô-đun xử lý XML và HTML, chúng có xu hướng được nhúng trong gói hiển thị Markdown, thay vì được trình bày cho công việc phân tích cú pháp Markdown tùy ý.

Vì vậy, lựa chọn một sẽ được xem xét xử lý Markdown bằng Python, trong đó there are a ton, tìm ra phân tích cú pháp bạn thích nhất, và thông qua đó.

Tùy thuộc vào những gì bạn muốn hoàn thành, tuy nhiên, có thể dễ dàng tìm thấy mô-đun xử lý Markdown đã mở rộng và xây dựng tiện ích xử lý. Python-Markdown, ví dụ: có an complete extension mechanism.

Các vấn đề liên quan