# encoding: UTF-8 module Asciidoctor # A utility class for working with the built-in stylesheets. #-- # QUESTION create methods for link_*_stylesheet? # QUESTION create method for user stylesheet? class Stylesheets DEFAULT_STYLESHEET_NAME = 'asciidoctor.css' DEFAULT_PYGMENTS_STYLE = 'default' STYLESHEETS_DATA_PATH = ::File.join DATA_PATH, 'stylesheets' @__instance__ = new def self.instance @__instance__ end def primary_stylesheet_name DEFAULT_STYLESHEET_NAME end # Public: Read the contents of the default Asciidoctor stylesheet # # returns the [String] Asciidoctor stylesheet data def primary_stylesheet_data @primary_stylesheet_data ||= ::IO.read(::File.join(STYLESHEETS_DATA_PATH, 'asciidoctor-default.css')).chomp end def embed_primary_stylesheet %() end def write_primary_stylesheet target_dir = '.' ::IO.write(::File.join(target_dir, primary_stylesheet_name), primary_stylesheet_data) end def coderay_stylesheet_name 'coderay-asciidoctor.css' end # Public: Read the contents of the default CodeRay stylesheet # # returns the [String] CodeRay stylesheet data def coderay_stylesheet_data # NOTE use the following lines to load a built-in theme instead # unless load_coderay.nil? # ::CodeRay::Encoders[:html]::CSS.new(:default).stylesheet # end @coderay_stylesheet_data ||= ::IO.read(::File.join(STYLESHEETS_DATA_PATH, 'coderay-asciidoctor.css')).chomp end def embed_coderay_stylesheet %() end def write_coderay_stylesheet target_dir = '.' ::IO.write(::File.join(target_dir, coderay_stylesheet_name), coderay_stylesheet_data) end def pygments_stylesheet_name style = nil %(pygments-#{style || DEFAULT_PYGMENTS_STYLE}.css) end # Public: Generate the Pygments stylesheet with the specified style. # # returns the [String] Pygments stylesheet data def pygments_stylesheet_data style = nil if load_pygments (@pygments_stylesheet_data ||= {})[style || DEFAULT_PYGMENTS_STYLE] ||= (::Pygments.css '.listingblock .pygments', :classprefix => 'tok-', :style => (style || DEFAULT_PYGMENTS_STYLE)). sub('.listingblock .pygments {', '.listingblock .pygments, .listingblock .pygments code {') else '/* Pygments styles disabled. Pygments is not available. */' end end def embed_pygments_stylesheet style = nil %() end def write_pygments_stylesheet target_dir = '.', style = nil ::IO.write(::File.join(target_dir, pygments_stylesheet_name(style)), pygments_stylesheet_data(style)) end #def load_coderay # (defined? ::CodeRay) ? true : !(Helpers.require_library 'coderay', true, :ignore).nil? #end def load_pygments (defined? ::Pygments) ? true : !(Helpers.require_library 'pygments', 'pygments.rb', :ignore).nil? end end end