From 6cebae3ffa2ea2b364b0c39238ec7cea243cc2a7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Aug 2020 09:19:34 -0300 Subject: Generate plaintext links to raw code blocks Generate txt files from code blocks embedded on pages, and add links to them. --- _plugins/add-link-to-plaintext-code-block.rb | 14 ++++++++ _plugins/generate-pastebin-plaintext-alternate.rb | 39 +++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 _plugins/add-link-to-plaintext-code-block.rb create mode 100644 _plugins/generate-pastebin-plaintext-alternate.rb (limited to '_plugins') diff --git a/_plugins/add-link-to-plaintext-code-block.rb b/_plugins/add-link-to-plaintext-code-block.rb new file mode 100644 index 0000000..461102e --- /dev/null +++ b/_plugins/add-link-to-plaintext-code-block.rb @@ -0,0 +1,14 @@ +# +Jekyll::Hooks.register :documents, :post_render do |doc| + if doc.output_ext == ".html" + code_block_counter = 1 + doc.output = doc.output.gsub(/(<\/code><\/pre><\/div><\/div>)/) do |match| + res = match + + '' + code_block_counter += 1 + res + end + end +end diff --git a/_plugins/generate-pastebin-plaintext-alternate.rb b/_plugins/generate-pastebin-plaintext-alternate.rb new file mode 100644 index 0000000..bf97f44 --- /dev/null +++ b/_plugins/generate-pastebin-plaintext-alternate.rb @@ -0,0 +1,39 @@ +require 'cgi' +CODE_BLOCK = /
(.*?)<\/pre><\/td>/m
+
+module Jekyll
+  class PlainTextGenerator < Generator
+    safe true
+
+    def generate(site)
+      site.collections.each do |collection|
+        _collection_name, collection_documents = collection
+        collection_documents.docs.each do |document|
+          n = 1
+          Renderer
+            .new(site, document)                       # create a renderer for the document
+            .run                                       # generate the HTML string
+            .scan(CODE_BLOCK)                          # match all occurrences of regexp
+            .each do |code_block|                      # iterate on each match
+              unhighlighted_code = code_block[0]       # regexp only defines 1 match (only 1 parens)
+                                     .gsub(/(.*?)<\/span>/m, '\1')
+              content = CGI.unescapeHTML unhighlighted_code
+              name = "#{document.url}.#{n}.txt"
+              plain = PageWithoutAFile.new(site, site.source, "", name)
+              plain.content = content
+              site.pages << plain
+              n += 1
+          end
+        end
+      end
+    end
+  end
+
+  # Taken from:
+  # https://github.com/jekyll/jekyll-feed/blob/c552b8ef7bd7a4babcfb5aec2b22283a5bc354dd/lib/jekyll-feed/page-without-a-file.rb#L4
+  class PageWithoutAFile < Jekyll::Page
+    def read_yaml(*)
+      @data ||= {}
+    end
+  end
+end
-- 
cgit v1.2.3