From 1f5ece26349b6f79f0ed4119085917f94f92688f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Aug 2020 07:19:23 -0300 Subject: Create Jekyll hook to add anchors to code block lines --- _plugins/add-anchor-to-code-block-line-numbers.rb | 20 ++++++++++++++++++++ styles.css | 11 ++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 _plugins/add-anchor-to-code-block-line-numbers.rb diff --git a/_plugins/add-anchor-to-code-block-line-numbers.rb b/_plugins/add-anchor-to-code-block-line-numbers.rb new file mode 100644 index 0000000..d4cf763 --- /dev/null +++ b/_plugins/add-anchor-to-code-block-line-numbers.rb @@ -0,0 +1,20 @@ +PREFIX = '
'
+POSTFIX = '
' +Jekyll::Hooks.register :documents, :post_render do |doc| + if doc.output_ext == ".html" + code_block_counter = 1 + doc.output = doc.output.gsub(/
[\n0-9]+<\/pre>/) do |match|
+      line_numbers = match
+                      .gsub(/
([\n0-9]+)<\/pre>/, '\1')
+                      .split("\n")
+
+      anchored_line_numbers_array = line_numbers.map do |n|
+        id = "B#{code_block_counter}-L#{n}"
+        "#{n}"
+      end
+      code_block_counter += 1
+
+      PREFIX + anchored_line_numbers_array.join("\n") + POSTFIX
+    end
+  end
+end
diff --git a/styles.css b/styles.css
index 8f00c9f..5d8ff58 100644
--- a/styles.css
+++ b/styles.css
@@ -81,6 +81,8 @@ section.post-footer, div.footnotes {
 
 /* Code blocks */
 
+/* The "lineno" class is the default generated by Rouge for table-row in code blocks, see:
+   https://github.com/rouge-ruby/rouge */
 pre.lineno {
   margin-right: 3px;
   padding-right: 3px;
@@ -96,7 +98,14 @@ pre.highlight {
 }
 
 
-/* Header anchor icons */
+/* Code block anchors */
+
+a.code-line-anchor {
+  color: black;
+}
+
+
+/* Header anchor */
 
 a.header-anchor {
   color: black;
-- 
cgit v1.2.3