Vấn đề
- Khi tạo website được code thủ công bằng HTML và CSS, việc tô sáng cú pháp rất khó
- Muốn làm nổi bật bằng màu sắc để các đoạn mã dễ đọc và dễ hiểu hơn
- Thông thường phải dùng các thư viện tô sáng cú pháp phức tạp như Prism hoặc highlight.js
- Muốn code thủ công mà không dùng script bên ngoài
Nhúng tính năng tô sáng cú pháp trực tiếp vào phông chữ bằng các tính năng OpenType
- Chỉnh sửa phông chữ mã nguồn mở Monaspace Krypton để thêm các phiên bản màu của từng ký tự
- Sử dụng bảng COLR của OpenType và tính năng thay thế theo ngữ cảnh để tìm và thay thế các chuỗi cụ thể
- Kết quả là hoàn thiện một bộ tô sáng cú pháp đơn giản được tích hợp ngay trong phông chữ
Ưu điểm và nhược điểm
Ưu điểm
- Cài đặt đơn giản: chỉ cần import phông chữ và bật các tính năng OpenType COLR (màu sắc) và CALT (thay thế theo ngữ cảnh)
- Không cần JavaScript
- Không cần chủ đề CSS
- Nhanh như văn bản thuần
- Có thể thêm đoạn mã vào thẻ
<pre> và <code>
- Mã nguồn HTML gọn gàng
- Hoạt động ở mọi nơi hỗ trợ tính năng OpenType, như InDesign
- Không cần bảo trì hay cập nhật
- Hoạt động cả trong
<textarea> và <input>
Nhược điểm
- Khi cần chỉnh sửa như đổi bảng màu hoặc thêm hỗ trợ ngôn ngữ, phải sửa chính file phông chữ
- Chỉ hoạt động ở nơi có hỗ trợ OpenType
- Việc tìm mẫu bằng thay thế theo ngữ cảnh của OpenType chỉ ở mức cơ bản, không thể so với script dùng biểu thức chính quy
Cách nó thực sự hoạt động
- Sử dụng bảng COLR của OpenType và tính năng thay thế theo ngữ cảnh
- Bảng COLR cho phép tạo phông chữ nhiều màu
- Thay thế theo ngữ cảnh nhận diện các ký tự liền kề để thay thế
- Ví dụ: tìm từ khóa JavaScript
if và thay bằng biến thể có màu
Tổng kết của GN⁺
- Bài viết này giới thiệu một cách mới để triển khai tô sáng cú pháp khi code website thủ công
- Bằng cách tận dụng các tính năng OpenType để nhúng tô sáng cú pháp trực tiếp vào phông chữ, có thể tô sáng cú pháp mà không cần JavaScript hay chủ đề CSS
- Cách này phù hợp với tô sáng cú pháp đơn giản, nhưng có những giới hạn so với các thư viện tô sáng cú pháp phức tạp hơn
- Các dự án cung cấp chức năng tương tự gồm có Prism, highlight.js, v.v.
1 bình luận
Ý kiến Hacker News
Một kiểu hack thú vị
font-feature-settings: "colr", "calt";không có ý nghĩacolrkhông tồn tại trong bảng bố cục OpenTypecaltđược bật mặc địnhVăn bản gốc vẫn được giữ nguyên
userContent.cssmà không cần bọc thẻ hay JSTôi không phải chuyên gia OpenType nên có thể cải thiện logic thay thế
Kiểu hack này thật kinh khủng nhưng cũng đáng kinh ngạc
Một kiểu hack tuyệt vời
Có một thông điệp hay ở cuối trang
Có vẻ có thể tự động hóa bằng code
Có lỗi trên các trình duyệt dựa trên Chromium
color: bluethì chỉ chữrđược tô nổi bậtTính năng này thực sự rất tuyệt
spanvà thẻ HTMLCó lẽ cần thứ gì đó hoạt động giống như trình tạo parser
Một tính năng thực sự đáng kinh ngạc