From fc86c9dd85ae99bc60dd7ec8c6190a58e6df2ec4 Mon Sep 17 00:00:00 2001 From: Kris Brown Date: Sun, 28 Feb 2010 10:10:10 +0000 Subject: [PATCH] extended concept to extensions in general, providing both converters and generators --- lib/jekyll.rb | 13 +++++++-- lib/jekyll/converter.rb | 33 +--------------------- lib/jekyll/converters/identity.rb | 6 ++-- lib/jekyll/converters/markdown.rb | 2 ++ lib/jekyll/converters/textile.rb | 6 ++-- lib/jekyll/extension.rb | 44 +++++++++++++++++++++++++++++ lib/jekyll/generator.rb | 7 +++++ lib/jekyll/generators/pagination.rb | 7 +++++ lib/jekyll/site.rb | 4 ++- 9 files changed, 78 insertions(+), 44 deletions(-) create mode 100644 lib/jekyll/extension.rb create mode 100644 lib/jekyll/generator.rb create mode 100644 lib/jekyll/generators/pagination.rb diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 53a9b84b..fb14b7c0 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -27,10 +27,17 @@ require 'jekyll/tags/highlight' require 'jekyll/tags/include' require 'jekyll/albino' require 'jekyll/static_file' + +#extensions +require 'jekyll/extension' require 'jekyll/converter' -require 'jekyll/converters/identity' -require 'jekyll/converters/markdown' -require 'jekyll/converters/textile' +Dir["#{File.dirname(__FILE__)}/jekyll/converters/*.rb"].each do |file| + require file +end +require 'jekyll/generator' +Dir["#{File.dirname(__FILE__)}/jekyll/generators/*.rb"].each do |file| + require file +end module Jekyll # Default options. Overriden by values in _config.yml or command-line opts. diff --git a/lib/jekyll/converter.rb b/lib/jekyll/converter.rb index faacfb7d..7beddd36 100644 --- a/lib/jekyll/converter.rb +++ b/lib/jekyll/converter.rb @@ -1,31 +1,8 @@ module Jekyll - class Converter - - PRIORITIES = { :lowest => -100, - :low => -10, - :normal => 0, - :high => 10, - :highest => 100 } + class Converter < Extension class << self - def subclasses - @subclasses ||= [] - end - - def inherited(base) - subclasses << base - subclasses.sort! - end - - # priority order of this converter - def priority(priority = nil) - if priority && PRIORITIES.has_key?(priority) - @priority = priority - end - @priority || :normal - end - # prefix for highlighting def pygments_prefix(pygments_prefix = nil) @pygments_prefix = pygments_prefix if pygments_prefix @@ -37,14 +14,6 @@ module Jekyll @pygments_suffix = pygments_suffix if pygments_suffix @pygments_suffix end - - # Spaceship is priority [higher -> lower] - # - # Returns -1, 0, 1 - def <=>(other) - cmp = PRIORITIES[other.priority] <=> PRIORITIES[self.priority] - return cmp - end end # prefix for highlighting diff --git a/lib/jekyll/converters/identity.rb b/lib/jekyll/converters/identity.rb index ad21bb7b..8d2da491 100644 --- a/lib/jekyll/converters/identity.rb +++ b/lib/jekyll/converters/identity.rb @@ -1,11 +1,8 @@ module Jekyll + class IdentityConverter < Converter priority :lowest - def initialize(config = {}) - - end - def matches(ext) true end @@ -19,4 +16,5 @@ module Jekyll end end + end diff --git a/lib/jekyll/converters/markdown.rb b/lib/jekyll/converters/markdown.rb index a9056c7d..6fc218d5 100644 --- a/lib/jekyll/converters/markdown.rb +++ b/lib/jekyll/converters/markdown.rb @@ -1,4 +1,5 @@ module Jekyll + class MarkdownConverter < Converter pygments_prefix '\n' pygments_suffix '\n' @@ -62,4 +63,5 @@ module Jekyll end end + end diff --git a/lib/jekyll/converters/textile.rb b/lib/jekyll/converters/textile.rb index 5a4d68cd..d301387b 100644 --- a/lib/jekyll/converters/textile.rb +++ b/lib/jekyll/converters/textile.rb @@ -1,12 +1,9 @@ module Jekyll + class TextileConverter < Converter pygments_prefix '' pygments_suffix '' - def initialize(config = {}) - - end - def matches(ext) ext =~ /textile/i end @@ -20,4 +17,5 @@ module Jekyll end end + end diff --git a/lib/jekyll/extension.rb b/lib/jekyll/extension.rb new file mode 100644 index 00000000..f928c37a --- /dev/null +++ b/lib/jekyll/extension.rb @@ -0,0 +1,44 @@ +module Jekyll + + class Extension + + PRIORITIES = { :lowest => -100, + :low => -10, + :normal => 0, + :high => 10, + :highest => 100 } + + class << self + def subclasses + @subclasses ||= [] + end + + def inherited(base) + subclasses << base + subclasses.sort! + end + + # priority order of this converter + def priority(priority = nil) + if priority && PRIORITIES.has_key?(priority) + @priority = priority + end + @priority || :normal + end + + # Spaceship is priority [higher -> lower] + # + # Returns -1, 0, 1 + def <=>(other) + cmp = PRIORITIES[other.priority] <=> PRIORITIES[self.priority] + return cmp + end + end + + def initialize(config = {}) + #no-op for default + end + + end + +end \ No newline at end of file diff --git a/lib/jekyll/generator.rb b/lib/jekyll/generator.rb new file mode 100644 index 00000000..318267c5 --- /dev/null +++ b/lib/jekyll/generator.rb @@ -0,0 +1,7 @@ +module Jekyll + + class Generator < Extension + + end + +end \ No newline at end of file diff --git a/lib/jekyll/generators/pagination.rb b/lib/jekyll/generators/pagination.rb new file mode 100644 index 00000000..cb54d788 --- /dev/null +++ b/lib/jekyll/generators/pagination.rb @@ -0,0 +1,7 @@ +module Jekyll + + class Pagination < Generator + + end + +end diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index df7bc612..a06b386f 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -3,7 +3,8 @@ module Jekyll class Site attr_accessor :config, :layouts, :posts, :pages, :static_files, :categories, :exclude, :source, :dest, :lsi, :pygments, :permalink_style, :tags, :time, - :future, :converters + :future + attr_accessor :converters, :generators # Initialize the site # +config+ is a Hash containing site configurations details @@ -39,6 +40,7 @@ module Jekyll require 'classifier' if self.lsi self.converters = Jekyll::Converter.subclasses.collect { |c| c.new(self.config) } + self.generators = Jekyll::Generator.subclasses.collect { |c| c.new(self.config) } end # Do the actual work of processing the site and generating the