Tất cả bài viết

Markdown: vì sao cú pháp văn bản đơn giản đánh bại trình soạn thảo phức tạp

Cùng một chữ "Tiếng" có thể được lưu thành hai chuỗi Unicode khác nhau về mặt byte — một chuỗi dùng ký tự dựng sẵn, một chuỗi ghép ký tự gốc với dấu thanh riêng — dù hiển thị giống hệt nhau; và tiêu đề Markdown dựa trên chuỗi đó có thể tạo ra hai đường dẫn neo (anchor) khác nhau.

Cú pháp cơ bản

  • # Tiêu đề — các tiêu đề ở nhiều cấp độ khác nhau dựa trên số lượng ký tự #.
  • **đậm***nghiêng* — nhấn mạnh văn bản.
  • [văn bản](url) — một liên kết.
  • - mục hoặc 1. mục — danh sách có dấu đầu dòng và đánh số.
  • ``` — khối mã với tô sáng cú pháp theo tên ngôn ngữ.

Vì sao hai tiêu đề giống hệt nhau lại tạo ra hai liên kết khác nhau

Unicode cho phép biểu diễn một ký tự có dấu tiếng Việt theo hai cách: dạng dựng sẵn NFC (một điểm mã cho cả chữ và dấu, ví dụ ế) hoặc dạng tổ hợp NFD (chữ cái gốc cộng với dấu thanh là một điểm mã riêng). macOS thường lưu văn bản ở dạng NFD, còn Windows và hầu hết công cụ web dùng NFC. Hai tiêu đề Markdown trông giống hệt nhau trên màn hình có thể sinh ra hai slug (đường dẫn neo) khác nhau về byte nếu được gõ trên hai hệ điều hành khác nhau — khiến một liên kết nội bộ tới tiêu đề đột nhiên không còn khớp.

Markdown gốc chưa từng định nghĩa bảng

Markdown mà John Gruber công bố năm 2004 là một bản mô tả bằng văn xuôi, không phải một văn phạm hình thức, và không hề định nghĩa bảng, văn bản gạch ngang hay khối mã có ngôn ngữ tô sáng. Suốt một thập kỷ, mỗi cách triển khai tự diễn giải những phần mơ hồ của văn bản gốc theo cách riêng, cho đến khi CommonMark ra đời năm 2014 để cố định một văn phạm chính xác — và GitHub Flavored Markdown (GFM) bổ sung thêm bảng và danh sách công việc mà ngày nay ai cũng coi là hiển nhiên trong mọi README.

Chuyển đổi sang HTML và ngược lại

Chuyển đổi Markdown → HTML là trực tiếp: một trình phân tích cú pháp nhận diện các cấu trúc cú pháp và tạo ra các thẻ tương ứng. Chuyển đổi ngược HTML → Markdown khó hơn, vì HTML hỗ trợ nhiều tùy chọn định dạng hơn nhiều so với Markdown cơ bản, nên một phần đánh dấu (bảng phức tạp, kiểu lồng nhau) có thể bị đơn giản hóa hoặc mất đi.

Vì sao cần đến điều này

  • Nhanh chóng xem trước một tệp Markdown sẽ được render như thế nào mà không cần xuất bản nó.
  • Chuyển đổi nội dung của một trang hoặc tài liệu sang Markdown để lưu trữ trong hệ thống kiểm soát phiên bản.
  • Chuẩn bị nội dung HTML để chèn vào một ứng dụng chỉ chấp nhận Markdown.
Dùng thử công cụ