HTMLをMarkdownに変換する

概要: Markdownから変換したHTMLをもう一度Markdownに戻す方法。


Tumblrでは記法としてMarkdownを使えたりするんだけど、API経由では元のMarkdownが取得できず、 HTMLに変換されたものしか取れないので、仕方なくHTMLをMarkdownに戻す方法を模索してみた。

んで、以下のコードで大体元のMarkdownに戻せると思う。

use strict;
use warnings;
use HTML::WikiConverter;
use HTML::Entities qw( decode_entities );
my $html = q{Markdownから変換されたHTML};
my $converter = HTML::WikiConverter->new(
dialect => 'Markdown',
);
my $source = $converter->html2wiki( $html );
$source = decode_entities( $source );
$source = "\n${source}\n";
$source =~ s{\n ` ( \s\S +?) ` \n}{
my $match = $1;
$match = "\n$match\n";
$match =~ s{\n}{\n    }g;
$match =~ s^\n*  \s*$ {}g;
$match .= "\n";
"\n$match\n"
}gse;
print $source;

動作にはHTML::WikiConverterHTML::WikiConverter::Markdownが必要。 引数なんかは各モジュールのPODを参照。

HTML::WikiConverter + HTML::WikiConverter::Markdownで一発変換できるかと思ったんだけど、 整形済みテキスト(pre要素とcode要素で囲まれたテキスト)が元に戻せなかったので正規表現で置換してる。

あと実際に使ってるコードでは出力される構文が気に喰わないとかなんとかで、 HTML::WikiConverter::Markdownを継承して部分的に書き換えて使ってるけど。

#FIXME

nyarla が大体

Scrapbox でコメントや意見を書く