1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package Gsg::MdParse;
- use strict;
- use warnings;
- use Log::Log4perl qw(:easy);
- use Exporter qw(import);
- our @EXPORT_OK = qw(render_readme);
- # README content is passed in as a var, sub returned an HTML version of the parsed markdown
- sub render_readme($$) {
- my $readme_content = shift;
- my $logger = shift;
- my $html_readme;
- # Might be a better way to do this? TODO
- open my $fh, '>>', \$html_readme or die "Can't open variable: $!";
- # Main parsing logic, doing it line by line
- # I have some ideas on how to make this more robust/efficient,
- # but starting with below for POC
- my @readme_lines = split("\n", $readme_content);
- my $inside_code = 0;
- foreach my $line ( @readme_lines ) {
- # HEADERS
- if ( $line =~ m/^#{1}(?!#)(.*)#$|^#{1}(?!#)(.*)$/ && $inside_code == 0 ) {
- my $parsed_line;
- if ( ! defined $1 || $1 eq "" ) {
- $parsed_line = "<h1>$2</h1>";
- } else {
- $parsed_line = "<h1>$1</h1>";
- }
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^#{2}(?!#)(.*)#{2}$|^#{2}(?!#)(.*)$/ && $inside_code == 0) {
- my $parsed_line;
- if ( ! defined $1 || $1 eq "" ) {
- $parsed_line = "<h2>$2</h2>";
- } else {
- $parsed_line = "<h2>$1</h2>";
- }
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^#{3}(?!#)(.*)#{3}$|^#{3}(?!#)(.*)$/ && $inside_code == 0) {
- my $parsed_line;
- if ( ! defined $1 || $1 eq "" ) {
- $parsed_line = "<h3>$2</h3>";
- } else {
- $parsed_line = "<h3>$1</h3>";
- }
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^#{4}(?!#)(.*)#{4}$|^#{4}(?!#)(.*)$/ && $inside_code == 0) {
- my $parsed_line;
- if ( ! defined $1 || $1 eq "" ) {
- $parsed_line = "<h4>$2</h4>";
- } else {
- $parsed_line = "<h4>$1</h4>";
- }
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^#{5}(?!#)(.*)#{5}$|^#{5}(?!#)(.*)$/ && $inside_code == 0) {
- my $parsed_line;
- if ( ! defined $1 || $1 eq "" ) {
- $parsed_line = "<h5>$2</h5>";
- } else {
- $parsed_line = "<h5>$1</h5>";
- }
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^\*(.*)/ && $inside_code == 0) {
- my $parsed_line = "<ul><li>$1</li></ul>";
- print $fh "$parsed_line";
- } elsif ( $line =~ m/^```$/ ) {
- if ( $inside_code == 0 ) {
- $inside_code = 1;
- print $fh "<br>";
- } elsif ( $inside_code == 1 ) {
- $inside_code = 0;
- }
- } elsif ( $inside_code == 1 ) {
- print $fh "<code>$line</code><br>";
- }
- else {
- print $fh "$line<br>";
- }
- }
- close $fh;
- $logger->info("Parsed README");
- return $html_readme;
- }
- 1;
|