Problema
- Ao criar um site codificado manualmente com HTML e CSS, é difícil fazer destaque de sintaxe
- Quero destacar com cores para que trechos de código sejam fáceis de ler e entender
- Normalmente é preciso usar bibliotecas complexas de destaque de sintaxe, como Prism ou highlight.js
- Quero codificar manualmente sem usar scripts externos
Inserindo o destaque de sintaxe na própria fonte usando recursos do OpenType
- Uma fonte open source chamada Monaspace Krypton foi modificada para incluir versões coloridas de cada caractere
- A tabela COLR do OpenType e o recurso de substituição contextual foram usados para localizar e substituir determinadas strings
- Como resultado, foi concluído um destacador de sintaxe simples embutido na própria fonte
Vantagens e desvantagens
Vantagens
- Instalação simples: basta importar a fonte e ativar os recursos OpenType COLR (cor) e CALT (substituição contextual)
- Não precisa de JavaScript
- Não precisa de tema CSS
- Tão rápido quanto texto puro
- É possível adicionar trechos de código nas tags
<pre> e <code>
- Código-fonte HTML limpo
- Funciona em qualquer lugar que ofereça suporte a recursos OpenType, como o InDesign
- Não requer manutenção nem atualizações
- Também funciona em
<textarea> e <input>
Desvantagens
- Quando é necessário fazer alterações, como mudar a paleta de cores ou adicionar suporte a linguagens, é preciso modificar o arquivo da fonte
- Só funciona onde há suporte a OpenType
- A busca de padrões usando substituição contextual do OpenType é básica e não pode ser comparada a scripts com expressões regulares
Como isso funciona na prática
- Usa a tabela COLR do OpenType e o recurso de substituição contextual
- A tabela COLR permite fontes multicoloridas
- A substituição contextual reconhece caracteres adjacentes e os substitui
- Exemplo: encontra a palavra-chave JavaScript
if e a substitui por uma variação colorida
Resumo do GN⁺
- Este artigo apresenta uma nova forma de implementar destaque de sintaxe ao codificar sites manualmente
- Ao incorporar o destaque de sintaxe na própria fonte com recursos do OpenType, ele se torna possível sem JavaScript nem temas CSS
- Esse método é adequado para destaque de sintaxe simples, mas tem limitações em comparação com bibliotecas mais complexas
- Projetos com recursos semelhantes incluem Prism e highlight.js
1 comentários
Comentários do Hacker News
Hack interessante
font-feature-settings: "colr", "calt";não faz sentidocolrnão existe nas tabelas de layout do OpenTypecaltjá vem ativado por padrãoO texto original é preservado integralmente
userContent.css, sem wrapping de tags nem JSNão sou especialista em OpenType, então talvez seja possível melhorar a lógica de fallback
Esse hack é horrível, mas impressionante
Excelente hack
Há uma boa mensagem no fim da página
Parece algo que daria para automatizar com código
Há um bug em navegadores baseados em Chromium
color: blue, só orfica destacadoRecurso realmente muito legal
textareae campos de entrada, mas também em documentos HTML grandesParece que seria preciso algo que funcione como um gerador de parser
Recurso realmente impressionante