Merge branch 'ayastreb-tags'
* ayastreb-tags: rubocop: fix code style rubocop: fix spacing in code style rubocop: fix code style rubocop: fix include tag code style rubocop: fix post URL tag code style rubocop: fix link tag code style rubocop: fix highlight tag code style
This commit is contained in:
		
						commit
						5e46a02d71
					
				| 
						 | 
				
			
			@ -21,10 +21,6 @@ AllCops:
 | 
			
		|||
  - lib/jekyll/renderer.rb
 | 
			
		||||
  - lib/jekyll/site.rb
 | 
			
		||||
  - lib/jekyll/static_file.rb
 | 
			
		||||
  - lib/jekyll/tags/highlight.rb
 | 
			
		||||
  - lib/jekyll/tags/include.rb
 | 
			
		||||
  - lib/jekyll/tags/link.rb
 | 
			
		||||
  - lib/jekyll/tags/post_url.rb
 | 
			
		||||
  - lib/jekyll/theme.rb
 | 
			
		||||
  - lib/jekyll/url.rb
 | 
			
		||||
  - lib/jekyll/utils.rb
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,22 +14,9 @@ module Jekyll
 | 
			
		|||
        super
 | 
			
		||||
        if markup.strip =~ SYNTAX
 | 
			
		||||
          @lang = Regexp.last_match(1).downcase
 | 
			
		||||
          @highlight_options = {}
 | 
			
		||||
          if defined?(Regexp.last_match(2)) && Regexp.last_match(2) != ''
 | 
			
		||||
            # Split along 3 possible forms -- key="<quoted list>", key=value, or key
 | 
			
		||||
            Regexp.last_match(2).scan(/(?:\w="[^"]*"|\w=\w|\w)+/) do |opt|
 | 
			
		||||
              key, value = opt.split('=')
 | 
			
		||||
              # If a quoted list, convert to array
 | 
			
		||||
              if value && value.include?("\"")
 | 
			
		||||
                value.delete!('"')
 | 
			
		||||
                  value = value.split
 | 
			
		||||
              end
 | 
			
		||||
              @highlight_options[key.to_sym] = value || true
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
          @highlight_options[:linenos] = "inline" if @highlight_options.key?(:linenos) && @highlight_options[:linenos] == true
 | 
			
		||||
          @highlight_options = parse_options(Regexp.last_match(2))
 | 
			
		||||
        else
 | 
			
		||||
          raise SyntaxError.new <<-eos
 | 
			
		||||
          raise SyntaxError, <<-eos
 | 
			
		||||
Syntax Error in tag 'highlight' while parsing the following markup:
 | 
			
		||||
 | 
			
		||||
  #{markup}
 | 
			
		||||
| 
						 | 
				
			
			@ -42,15 +29,15 @@ eos
 | 
			
		|||
      def render(context)
 | 
			
		||||
        prefix = context["highlighter_prefix"] || ""
 | 
			
		||||
        suffix = context["highlighter_suffix"] || ""
 | 
			
		||||
        code = super.to_s.gsub(/\A(\n|\r)+|(\n|\r)+\z/, '')
 | 
			
		||||
        code = super.to_s.gsub(/\A(\n|\r)+|(\n|\r)+\z/, "")
 | 
			
		||||
 | 
			
		||||
        is_safe = !!context.registers[:site].safe
 | 
			
		||||
 | 
			
		||||
        output =
 | 
			
		||||
          case context.registers[:site].highlighter
 | 
			
		||||
          when 'pygments'
 | 
			
		||||
          when "pygments"
 | 
			
		||||
            render_pygments(code, is_safe)
 | 
			
		||||
          when 'rouge'
 | 
			
		||||
          when "rouge"
 | 
			
		||||
            render_rouge(code)
 | 
			
		||||
          else
 | 
			
		||||
            render_codehighlighter(code)
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +53,7 @@ eos
 | 
			
		|||
            [:startinline, opts.fetch(:startinline, nil)],
 | 
			
		||||
            [:hl_lines,    opts.fetch(:hl_lines, nil)],
 | 
			
		||||
            [:linenos,     opts.fetch(:linenos, nil)],
 | 
			
		||||
            [:encoding,    opts.fetch(:encoding, 'utf-8')],
 | 
			
		||||
            [:encoding,    opts.fetch(:encoding, "utf-8")],
 | 
			
		||||
            [:cssclass,    opts.fetch(:cssclass, nil)]
 | 
			
		||||
          ].reject { |f| f.last.nil? }]
 | 
			
		||||
        else
 | 
			
		||||
| 
						 | 
				
			
			@ -74,8 +61,30 @@ eos
 | 
			
		|||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      private
 | 
			
		||||
 | 
			
		||||
      def parse_options(input)
 | 
			
		||||
        options = {}
 | 
			
		||||
        unless input.empty?
 | 
			
		||||
          # Split along 3 possible forms -- key="<quoted list>", key=value, or key
 | 
			
		||||
          input.scan(/(?:\w="[^"]*"|\w=\w|\w)+/) do |opt|
 | 
			
		||||
            key, value = opt.split("=")
 | 
			
		||||
            # If a quoted list, convert to array
 | 
			
		||||
            if value && value.include?("\"")
 | 
			
		||||
              value.delete!('"')
 | 
			
		||||
              value = value.split
 | 
			
		||||
            end
 | 
			
		||||
            options[key.to_sym] = value || true
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
        if options.key?(:linenos) && options[:linenos] == true
 | 
			
		||||
          options[:linenos] = "inline"
 | 
			
		||||
        end
 | 
			
		||||
        options
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def render_pygments(code, is_safe)
 | 
			
		||||
        Jekyll::External.require_with_graceful_fail('pygments')
 | 
			
		||||
        Jekyll::External.require_with_graceful_fail("pygments")
 | 
			
		||||
 | 
			
		||||
        highlighted_code = Pygments.highlight(
 | 
			
		||||
          code,
 | 
			
		||||
| 
						 | 
				
			
			@ -84,22 +93,27 @@ eos
 | 
			
		|||
        )
 | 
			
		||||
 | 
			
		||||
        if highlighted_code.nil?
 | 
			
		||||
          Jekyll.logger.error "There was an error highlighting your code:"
 | 
			
		||||
          puts
 | 
			
		||||
          Jekyll.logger.error code
 | 
			
		||||
          puts
 | 
			
		||||
          Jekyll.logger.error "While attempting to convert the above code, Pygments.rb" \
 | 
			
		||||
            " returned an unacceptable value."
 | 
			
		||||
          Jekyll.logger.error "This is usually a timeout problem solved by running `jekyll build` again."
 | 
			
		||||
          raise ArgumentError.new("Pygments.rb returned an unacceptable value when attempting to highlight some code.")
 | 
			
		||||
          Jekyll.logger.error <<eos
 | 
			
		||||
There was an error highlighting your code:
 | 
			
		||||
 | 
			
		||||
#{code}
 | 
			
		||||
 | 
			
		||||
While attempting to convert the above code, Pygments.rb returned an unacceptable value.
 | 
			
		||||
This is usually a timeout problem solved by running `jekyll build` again.
 | 
			
		||||
eos
 | 
			
		||||
          raise ArgumentError, "Pygments.rb returned an unacceptable value "\
 | 
			
		||||
          "when attempting to highlight some code."
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        highlighted_code.sub('<div class="highlight"><pre>', '').sub('</pre></div>', '')
 | 
			
		||||
        highlighted_code.sub('<div class="highlight"><pre>', "").sub("</pre></div>", "")
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def render_rouge(code)
 | 
			
		||||
        Jekyll::External.require_with_graceful_fail('rouge')
 | 
			
		||||
        formatter = Rouge::Formatters::HTML.new(:line_numbers => @highlight_options[:linenos], :wrap => false)
 | 
			
		||||
        Jekyll::External.require_with_graceful_fail("rouge")
 | 
			
		||||
        formatter = Rouge::Formatters::HTML.new(
 | 
			
		||||
          :line_numbers => @highlight_options[:linenos],
 | 
			
		||||
          :wrap         => false
 | 
			
		||||
        )
 | 
			
		||||
        lexer = Rouge::Lexer.find_fancy(@lang, code) || Rouge::Lexers::PlainText
 | 
			
		||||
        formatter.format(lexer.lex(code))
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -110,13 +124,14 @@ eos
 | 
			
		|||
 | 
			
		||||
      def add_code_tag(code)
 | 
			
		||||
        code_attributes = [
 | 
			
		||||
          "class=\"language-#{@lang.to_s.tr('+', '-')}\"",
 | 
			
		||||
          "class=\"language-#{@lang.to_s.tr("+", "-")}\"",
 | 
			
		||||
          "data-lang=\"#{@lang}\""
 | 
			
		||||
        ].join(" ")
 | 
			
		||||
        "<figure class=\"highlight\"><pre><code #{code_attributes}>#{code.chomp}</code></pre></figure>"
 | 
			
		||||
        "<figure class=\"highlight\"><pre><code #{code_attributes}>"\
 | 
			
		||||
        "#{code.chomp}</code></pre></figure>"
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Liquid::Template.register_tag('highlight', Jekyll::Tags::HighlightBlock)
 | 
			
		||||
Liquid::Template.register_tag("highlight", Jekyll::Tags::HighlightBlock)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,17 +12,23 @@ module Jekyll
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    class IncludeTag < Liquid::Tag
 | 
			
		||||
      VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/
 | 
			
		||||
      VARIABLE_SYNTAX = /(?<variable>[^{]*(\{\{\s*[\w\-\.]+\s*(\|.*)?\}\}[^\s{}]*)+)(?<params>.*)/
 | 
			
		||||
      VALID_SYNTAX = /
 | 
			
		||||
        ([\w-]+)\s*=\s*
 | 
			
		||||
        (?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))
 | 
			
		||||
      /x
 | 
			
		||||
      VARIABLE_SYNTAX = /
 | 
			
		||||
        (?<variable>[^{]*(\{\{\s*[\w\-\.]+\s*(\|.*)?\}\}[^\s{}]*)+)
 | 
			
		||||
        (?<params>.*)
 | 
			
		||||
      /x
 | 
			
		||||
 | 
			
		||||
      def initialize(tag_name, markup, tokens)
 | 
			
		||||
        super
 | 
			
		||||
        matched = markup.strip.match(VARIABLE_SYNTAX)
 | 
			
		||||
        if matched
 | 
			
		||||
          @file = matched['variable'].strip
 | 
			
		||||
          @params = matched['params'].strip
 | 
			
		||||
          @file = matched["variable"].strip
 | 
			
		||||
          @params = matched["params"].strip
 | 
			
		||||
        else
 | 
			
		||||
          @file, @params = markup.strip.split(' ', 2)
 | 
			
		||||
          @file, @params = markup.strip.split(/\s+/, 2)
 | 
			
		||||
        end
 | 
			
		||||
        validate_params if @params
 | 
			
		||||
        @tag_name = tag_name
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +42,7 @@ module Jekyll
 | 
			
		|||
        params = {}
 | 
			
		||||
        markup = @params
 | 
			
		||||
 | 
			
		||||
        while match = VALID_SYNTAX.match(markup) do
 | 
			
		||||
        while (match = VALID_SYNTAX.match(markup))
 | 
			
		||||
          markup = markup[match.end(0)..-1]
 | 
			
		||||
 | 
			
		||||
          value = if match[2]
 | 
			
		||||
| 
						 | 
				
			
			@ -53,8 +59,8 @@ module Jekyll
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      def validate_file_name(file)
 | 
			
		||||
        if file !~ /^[a-zA-Z0-9_\/\.-]+$/ || file =~ /\.\// || file =~ /\/\./
 | 
			
		||||
          raise ArgumentError.new <<-eos
 | 
			
		||||
        if file !~ %r!^[a-zA-Z0-9_/\.-]+$! || file =~ %r!\./! || file =~ %r!/\.!
 | 
			
		||||
          raise ArgumentError, <<-eos
 | 
			
		||||
Invalid syntax for include tag. File contains invalid characters or sequences:
 | 
			
		||||
 | 
			
		||||
  #{file}
 | 
			
		||||
| 
						 | 
				
			
			@ -68,9 +74,9 @@ eos
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      def validate_params
 | 
			
		||||
        full_valid_syntax = Regexp.compile('\A\s*(?:' + VALID_SYNTAX.to_s + '(?=\s|\z)\s*)*\z')
 | 
			
		||||
        full_valid_syntax = /\A\s*(?:#{VALID_SYNTAX}(?=\s|\z)\s*)*\z/
 | 
			
		||||
        unless @params =~ full_valid_syntax
 | 
			
		||||
          raise ArgumentError.new <<-eos
 | 
			
		||||
          raise ArgumentError, <<-eos
 | 
			
		||||
Invalid syntax for include tag:
 | 
			
		||||
 | 
			
		||||
  #{@params}
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +97,10 @@ eos
 | 
			
		|||
      # Render the variable if required
 | 
			
		||||
      def render_variable(context)
 | 
			
		||||
        if @file.match(VARIABLE_SYNTAX)
 | 
			
		||||
          partial = context.registers[:site].liquid_renderer.file("(variable)").parse(@file)
 | 
			
		||||
          partial = context.registers[:site]
 | 
			
		||||
            .liquid_renderer
 | 
			
		||||
            .file("(variable)")
 | 
			
		||||
            .parse(@file)
 | 
			
		||||
          partial.render!(context)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -106,9 +115,9 @@ eos
 | 
			
		|||
          path = File.join(dir, file)
 | 
			
		||||
          return path if valid_include_file?(path, dir, safe)
 | 
			
		||||
        end
 | 
			
		||||
        raise IOError, "Could not locate the included file '#{file}' in any of #{includes_dirs}." \
 | 
			
		||||
          " Ensure it exists in one of those directories and, if it is a symlink, " \
 | 
			
		||||
          "does not point outside your site source."
 | 
			
		||||
        raise IOError, "Could not locate the included file '#{file}' in any of "\
 | 
			
		||||
          "#{includes_dirs}. Ensure it exists in one of those directories and, "\
 | 
			
		||||
          "if it is a symlink, does not point outside your site source."
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def render(context)
 | 
			
		||||
| 
						 | 
				
			
			@ -120,24 +129,23 @@ eos
 | 
			
		|||
        path = locate_include_file(context, file, site.safe)
 | 
			
		||||
        return unless path
 | 
			
		||||
 | 
			
		||||
        # Add include to dependency tree
 | 
			
		||||
        add_include_to_dependency(site, path, context)
 | 
			
		||||
 | 
			
		||||
        partial = load_cached_partial(path, context)
 | 
			
		||||
 | 
			
		||||
        context.stack do
 | 
			
		||||
          context["include"] = parse_params(context) if @params
 | 
			
		||||
          partial.render!(context)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def add_include_to_dependency(site, path, context)
 | 
			
		||||
        if context.registers[:page] && context.registers[:page].key?("path")
 | 
			
		||||
          site.regenerator.add_dependency(
 | 
			
		||||
            site.in_source_dir(context.registers[:page]["path"]),
 | 
			
		||||
            path
 | 
			
		||||
          )
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        #begin
 | 
			
		||||
          partial = load_cached_partial(path, context)
 | 
			
		||||
 | 
			
		||||
          context.stack do
 | 
			
		||||
            context['include'] = parse_params(context) if @params
 | 
			
		||||
            partial.render!(context)
 | 
			
		||||
          end
 | 
			
		||||
          #rescue => e
 | 
			
		||||
          #raise IncludeTagError.new e.message, path
 | 
			
		||||
          #end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def load_cached_partial(path, context)
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +155,10 @@ eos
 | 
			
		|||
        if cached_partial.key?(path)
 | 
			
		||||
          cached_partial[path]
 | 
			
		||||
        else
 | 
			
		||||
          cached_partial[path] = context.registers[:site].liquid_renderer.file(path).parse(read_file(path, context))
 | 
			
		||||
          cached_partial[path] = context.registers[:site]
 | 
			
		||||
            .liquid_renderer
 | 
			
		||||
            .file(path)
 | 
			
		||||
            .parse(read_file(path, context))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -188,5 +199,5 @@ eos
 | 
			
		|||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Liquid::Template.register_tag('include', Jekyll::Tags::IncludeTag)
 | 
			
		||||
Liquid::Template.register_tag('include_relative', Jekyll::Tags::IncludeRelativeTag)
 | 
			
		||||
Liquid::Template.register_tag("include", Jekyll::Tags::IncludeTag)
 | 
			
		||||
Liquid::Template.register_tag("include_relative", Jekyll::Tags::IncludeRelativeTag)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
module Jekyll
 | 
			
		||||
  module Tags
 | 
			
		||||
    class Link < Liquid::Tag
 | 
			
		||||
      TagName = 'link'
 | 
			
		||||
      TAG_NAME = "link".freeze
 | 
			
		||||
 | 
			
		||||
      def initialize(tag_name, relative_path, tokens)
 | 
			
		||||
        super
 | 
			
		||||
| 
						 | 
				
			
			@ -16,11 +16,14 @@ module Jekyll
 | 
			
		|||
          return document.url if document.relative_path == @relative_path
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        raise ArgumentError, "Could not find document '#{@relative_path}' in tag '#{TagName}'.\n\n" \
 | 
			
		||||
          "Make sure the document exists and the path is correct."
 | 
			
		||||
        raise ArgumentError, <<eos
 | 
			
		||||
Could not find document '#{@relative_path}' in tag '#{TAG_NAME}'.
 | 
			
		||||
 | 
			
		||||
Make sure the document exists and the path is correct.
 | 
			
		||||
eos
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Liquid::Template.register_tag(Jekyll::Tags::Link::TagName, Jekyll::Tags::Link)
 | 
			
		||||
Liquid::Template.register_tag(Jekyll::Tags::Link::TAG_NAME, Jekyll::Tags::Link)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,14 @@
 | 
			
		|||
module Jekyll
 | 
			
		||||
  module Tags
 | 
			
		||||
    class PostComparer
 | 
			
		||||
      MATCHER = /^(.+\/)*(\d+-\d+-\d+)-(.*)$/
 | 
			
		||||
      MATCHER = %r!^(.+/)*(\d+-\d+-\d+)-(.*)$!
 | 
			
		||||
 | 
			
		||||
      attr_reader :path, :date, :slug, :name
 | 
			
		||||
 | 
			
		||||
      def initialize(name)
 | 
			
		||||
        @name = name
 | 
			
		||||
 | 
			
		||||
        all, @path, @date, @slug = *name.sub(/^\//, "").match(MATCHER)
 | 
			
		||||
        all, @path, @date, @slug = *name.sub(%r!^/!, "").match(MATCHER)
 | 
			
		||||
        unless all
 | 
			
		||||
          raise Jekyll::Errors::InvalidPostNameError,
 | 
			
		||||
            "'#{name}' does not contain valid date and/or title."
 | 
			
		||||
| 
						 | 
				
			
			@ -42,9 +42,9 @@ module Jekyll
 | 
			
		|||
      def post_slug(other)
 | 
			
		||||
        path = other.basename.split("/")[0...-1].join("/")
 | 
			
		||||
        if path.nil? || path == ""
 | 
			
		||||
          other.data['slug']
 | 
			
		||||
          other.data["slug"]
 | 
			
		||||
        else
 | 
			
		||||
          path + '/' + other.data['slug']
 | 
			
		||||
          path + "/" + other.data["slug"]
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,8 @@ eos
 | 
			
		|||
 | 
			
		||||
        site.posts.docs.each do |p|
 | 
			
		||||
          next unless @post.deprecated_equality p
 | 
			
		||||
          Jekyll::Deprecator.deprecation_message "A call to '{{ post_url #{@post.name} }}' did not match " \
 | 
			
		||||
          Jekyll::Deprecator.deprecation_message "A call to "\
 | 
			
		||||
            "'{{ post_url #{@post.name} }}' did not match " \
 | 
			
		||||
            "a post using the new matching method of checking name " \
 | 
			
		||||
            "(path-date-slug) equality. Please make sure that you " \
 | 
			
		||||
            "change this tag to match the post's name exactly."
 | 
			
		||||
| 
						 | 
				
			
			@ -95,4 +96,4 @@ eos
 | 
			
		|||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
Liquid::Template.register_tag('post_url', Jekyll::Tags::PostUrl)
 | 
			
		||||
Liquid::Template.register_tag("post_url", Jekyll::Tags::PostUrl)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue