【问题标题】:Escape angle brackets using Pod::Markdown使用 Pod::Markdown 转义尖括号
【发布时间】:2015-02-13 09:27:59
【问题描述】:

当使用方括号 <> 时,我无法从 Pod::Markdown 获得正确的行为。例如:

use strict;
use warnings;

use Data::Dump;
use Pod::Markdown;

my $str = "=head1 OPTIONS\n\n=over 4\n\n=item B<< --file=<filename> >>\n\nFile name \n\n=back\n";

my $parser = Pod::Markdown->new;
my $markdown;
$parser->output_string( \$markdown );
$parser->parse_string_document($str);

dd $markdown;

给出输出:

"# OPTIONS\n\n- **--file=<filename>**\n\n    File name \n"

这给了

在 GitHub 上。因此,** 标记内的&lt;filename&gt; 部分可能被视为 HTML 标记,因此未显示。 所需的输出将是

"# OPTIONS\n\n- **--file=\<filename\>**\n\n    File name \n"

括号&amp;lt;&amp;gt;应该用反斜杠转义。

更新

似乎问题不仅限于双星序列。我根据这个更新了问题..

【问题讨论】:

  • 我使用“转义”尖括号的大多数 Markdown 处理器通过将它们替换为 HTML 实体 &amp;lt;&amp;gt;,而不是通过反斜杠文字尖括号。这在这里有效吗?
  • @Chris 原则上我不应该修改 Pod 文本/文档。直接在 Pod 文档中插入 &amp;lt; 不会产生正确的 Pod 到文本的转换。所以最好让 Pod 保持原样。问题似乎是 Pod::Markdown 的输出。但是我必须修改 Pod::Markdown 的源代码才能插入&amp;lt;,这是不希望的(因为这将被我以外的其他用户使用)

标签: perl markdown github-flavored-markdown


【解决方案1】:

目前,一种解决方法似乎是在后处理步骤中插入反斜杠。例如:

$parser->output_string( \$markdown );
$parser->parse_string_document($str);
fix_escape_chars(\$markdown);

sub fix_escape_chars {
    my ($str) = @_;

    $$str =~ s/(?<!\\)>/\\>/g;
    $$str =~ s/(?<!\\)</\\</g;
}

这似乎运作良好..(与this question 中声称的相反,它甚至在 URL 内也有效)..

【讨论】:

    【解决方案2】:

    Pod::Markdown 3.000 已发布并修复了此问题。 并非所有 Markdown 处理器都能识别转义的反斜杠 &amp;lt; 字符,因此我遵循了将 &amp;amp;&amp;lt; 转义为 html 实体(&amp;amp;&amp;lt;)的 Markdown 规范建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2010-09-09
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多