Estou tentando adicionar um recurso de comentário à documentação do Pod para scripts Perl, e gostaria de destacar os comentários do Pod com uma face especial. Um protótipo simples de script Perl poderia ser:
#! /usr/bin/env perl
use strict;
use warnings;
print "Hello\n"; # a Perl comment /* hello */
__END__
=head1 SYNOPSIS
my_program <arg1> [OPTIONS]
/* this is a Pod comment */
Como vemos, um comentário de um pod é substituído por uma /* */
linguagem de programação C. No entanto, apenas a parte abaixo da linha __END__
é a documentação do Pod. A parte acima dessa linha é um código Perl comum. Agora, se eu tentar adicionar destaque de sintaxe ao comentário do Pod usando, por exemplo (chamado de cperl-mode-hook
):
(font-lock-add-keywords nil '(("\\(/\\*.*?\\*/\\)" 1 'font-lock-warning-face t)))
Recebo o seguinte usando cperl-mode
como modo principal:
Portanto, os comentários do Pod também são destacados em um comentário Perl comum (um comentário do Perl começa com um #
caractere), o que não é desejado (os comentários do Pod devem ser destacados apenas nas seções do Pod, e não no código Perl comum).
Para simplificar, para esta pergunta, podemos assumir que a documentação do Pod está confinada ao final do documento, começando pelas linhas após a __END__
tag. É possível verificar a posição do comentário atual e relacioná-lo à posição da __END__
linha e, a partir dessas informações, determinar se estamos dentro de um bloco de Pod ou não (e adicionar sintaxe destacando apenas se estiver dentro de um bloco de Pod) ao executar o código de bloqueio da fonte?
pod-mode
modo principal que seja adequado para as regiões de comentários do Pod, mmm-mode
poderá ser aplicável. Não sei se é esse o caso. Provavelmente o que você precisa aqui é apenas uma configuração adicional de bloqueio de fonte.
mmm-mode
mas acho que essa pode ser a solução para você.