summaryrefslogtreecommitdiff
path: root/bin/hedgedoc2quarto
diff options
context:
space:
mode:
Diffstat (limited to 'bin/hedgedoc2quarto')
-rwxr-xr-xbin/hedgedoc2quarto77
1 files changed, 77 insertions, 0 deletions
diff --git a/bin/hedgedoc2quarto b/bin/hedgedoc2quarto
new file mode 100755
index 0000000..21f8158
--- /dev/null
+++ b/bin/hedgedoc2quarto
@@ -0,0 +1,77 @@
+#!/usr/bin/perl -g
+
+use v5.36;
+use strict;
+use utf8;
+
+=head1 NAME
+
+hedgedoc2quarto - convert HedgeDoc content to Quarto
+
+=head1 VERSION
+
+Version 0.0.1
+
+=head1 SYNOPSIS
+
+ hedgedoc2quarto INFILE OUTFILE
+
+ hedgedoc2quarto < INFILE > OUTFILE
+
+=head1 DESCRIPTION
+
+B<hedgedoc2quarto> reformats text content
+from HedgeDoc- to Quarto-flavored Markdown,
+and adapt Mermaid diagram code.
+
+Both HedgeDoc and Quarto use Markdown,
+but different flavors,
+and they support different subsets of Mermaid diagram code.
+
+=cut
+
+my ( $infile, $outfile, $bogus ) = @ARGV;
+die 'Too many arguments: expected INFILE and OUTFILE' if $bogus;
+@ARGV = ($infile) if $infile;
+my $content = <>;
+
+$content =~ s/^(?'fence'[``~]{3,})\s*\Kmermaid\n(?'type'gantt)\n(?'code'.*?\n)\k'fence'$/{mermaid}\n%%| fig-width: 100%\n$+{type}\n$+{code}$+{fence}/gsm;
+
+$content =~ s/^gantt\K$/\ntickInterval 1month/gm;
+
+if ($outfile) {
+ open(FH, '>', $outfile) or die $!;
+ print FH $content;
+} else {
+ print $content;
+}
+
+=encoding UTF-8
+
+=head1 AUTHOR
+
+Jonas Smedegaard C<< <dr@jones.dk> >>
+
+=head1 COPYRIGHT AND LICENSE
+
+ Copyright © 2024 Jonas Smedegaard
+
+This program is free software:
+you can redistribute it and/or modify it
+under the terms of the GNU Affero General Public License
+as published by the Free Software Foundation,
+either version 3, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY;
+without even the implied warranty
+of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See the GNU Affero General Public License for more details.
+
+You should have received a copy
+of the GNU Affero General Public License along with this program.
+If not, see <https://www.gnu.org/licenses/>.
+
+=cut
+
+1;