From 98ff687369d65974a669c63990fafb65a8885ca7 Mon Sep 17 00:00:00 2001 From: finanalyst Date: Tue, 13 Jun 2023 00:37:39 +0100 Subject: [PATCH] Addresses code-blocks with format codes. fixes #124 --- .../ogdenwebb/ogdenwebb-replacements.raku | 166 ++++++++++++++++-- 1 file changed, 155 insertions(+), 11 deletions(-) diff --git a/Website/plugins/ogdenwebb/ogdenwebb-replacements.raku b/Website/plugins/ogdenwebb/ogdenwebb-replacements.raku index 79dd821..027a7f7 100644 --- a/Website/plugins/ogdenwebb/ogdenwebb-replacements.raku +++ b/Website/plugins/ogdenwebb/ogdenwebb-replacements.raku @@ -236,7 +236,28 @@ use v6.d; }, #placeholder block-code => sub (%prm, %tml) { # previous block-code is set by 02-highlighter - my $hl = %tml.prior('block-code').(%prm, %tml); + my regex marker { + "\xFF\xFF" ~ "\xFF\xFF" $ = (.+?) + }; + my $hl; + my @tokens; + my $t; + my $parsed = %prm ~~ / ^ .*? [ .*?]+ $/; + if $parsed { + for $parsed.chunks -> $c { + if $c.key eq 'marker' { + $t ~= "\xFF\xFF"; + @tokens.push: $c.value.Str; + } + else { + $t ~= $c.value + } + } + %prm = $t; + } + $hl = %tml.prior('block-code').(%prm, %tml); + $hl .= subst( / '
@@ -305,16 +326,6 @@ use v6.d;
         }
         else { '' }
     },
-    'format-x' => sub (%prm, %tml) {
-        my $indexedheader = %prm.elems ?? %prm[0].join(';') !! %prm;
-        qq[
-            
-            { (%prm.defined and %prm ne '') ??
-                '' ~ %prm ~ ''
-            !!  '' }
-        ]
-    },
     'list' => sub (%prm, %tml) {
         qq[
          == 0 ?? ' class="rakudoc-item"' !! ''}>
@@ -322,4 +333,137 @@ use v6.d;
         
         ]
     },
+
+
+    'format-b' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-c' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-i' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-k' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-r' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-t' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-u' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ %prm ~ $end
+    },
+    'format-l' => sub ( %prm, %tml ) {
+        # type = local:  -> # | 
+        # type = internal:  -> #
+        # type = external:  -> 
+        my $trg;
+        given %prm {
+            when 'local' {
+                $trg = %prm;
+                $trg ~= '#' ~ %prm if %prm;
+                $trg = 'href="' ~ $trg ~ '"'
+            }
+            when 'internal' {
+                $trg = 'href="#' ~ %prm ~ '"'
+            }
+            default {
+                $trg = 'href="' ~ %prm ~ '"'
+            }
+        }
+        my $beg = '';
+        my $end =  '';
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ ( %prm // '' ) ~ $end;
+    },
+    'format-n' => sub (%prm, %tml) {
+        my $beg = '';
+        my $end = "\n";
+        my $mark = "\xFF\xFF";
+        if %prm.Str eq 'InCodeBlock' {
+            $beg = $mark ~ $beg ~ $mark;
+            $end = $mark ~ $end ~ $mark;
+        }
+        $beg ~ '[' ~ %tml.(%prm) ~ ']' ~ $end
+    },
+    'format-p' => sub (%prm, %tml) {
+        '
'
+                ~ (%prm // '').=trans(['
', '
'] => ['<pre>', '</pre>']) + ~ "
\n" + }, + 'format-x' => sub (%prm, %tml) { + my $indexedheader = %prm.elems ?? %prm[0].join(';') !! %prm; + my $beg = qq[ + + { (%prm.defined and %prm ne '') ?? '' !! '' } + ]; + my $end = ''; + my $mark = "\xFF\xFF"; + if %prm.Str eq 'InCodeBlock' { + $beg = $mark ~ $beg ~ $mark; + $end = $mark ~ $end ~ $mark; + } + # if there is indexedheader but no text, must still return beg. If indexh.. but text, then end + $beg ~ ( (%prm.defined and %prm ne '') ?? %prm ~ $end !! '' ) + }, );