diff --git a/lib/jekyll/tags/include.rb b/lib/jekyll/tags/include.rb index d5aa3b6d..fbe03ed3 100644 --- a/lib/jekyll/tags/include.rb +++ b/lib/jekyll/tags/include.rb @@ -13,11 +13,14 @@ module Jekyll class IncludeTag < Liquid::Tag + attr_reader :includes_dir + VALID_SYNTAX = /([\w-]+)\s*=\s*(?:"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'|([\w\.-]+))/ VARIABLE_SYNTAX = /(?[^{]*\{\{\s*(?[\w\-\.]+)\s*(\|.*)?\}\}[^\s}]*)(?.*)/ def initialize(tag_name, markup, tokens) super + @includes_dir = tag_includes_dir matched = markup.strip.match(VARIABLE_SYNTAX) if matched @file = matched['variable'].strip @@ -97,8 +100,8 @@ eos end end - def includes_dir - @includes_dir ||= '_includes' + def tag_includes_dir + '_includes' end def render(context) @@ -118,12 +121,12 @@ eos partial.render!(context) end rescue => e - raise IncludeTagError.new e.message, File.join(includes_dir, @file) + raise IncludeTagError.new e.message, File.join(@includes_dir, @file) end end def resolved_includes_dir(context) - File.join(File.realpath(context.registers[:site].source), includes_dir) + File.join(File.realpath(context.registers[:site].source), @includes_dir) end def validate_path(path, dir, safe) @@ -135,7 +138,7 @@ eos end def path_relative_to_source(dir, path) - File.join(includes_dir, path.sub(Regexp.new("^#{dir}"), "")) + File.join(@includes_dir, path.sub(Regexp.new("^#{dir}"), "")) end def realpath_prefixed_with?(path, dir) @@ -149,12 +152,15 @@ eos end class IncludeRelativeTag < IncludeTag - def includes_dir - @includes_dir ||= '.' + def tag_includes_dir + '.' + end + + def page_path + context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"]) end def resolved_includes_dir(context) - page_path = context.registers[:page].nil? ? includes_dir : File.dirname(context.registers[:page]["path"]) Jekyll.sanitized_path(context.registers[:site].source, page_path) end end