Sha256: 4fb014db057dda75bb9aeed50bb08663f3d20b09eaaf6d507a490e8525f011d0

Contents?: true

Size: 1.2 KB

Versions: 4

Compression:

Stored size: 1.2 KB

Contents

# ~*~ encoding: utf-8 ~*~
require 'active_support/core_ext/string/inflections'

module Aladdin

  module Render

    # Keeps track of headers within the same document. It's responsible for
    # assigning unique names that can be used in the anchors.
    class Headers

      def initialize
        @headers = {}
      end

      # Adds a new header to the set.
      # @return [Header] header
      def add(text, level=1)
        name = text.parameterize
        if @headers.include? name
          name += '-%d' % (@headers[name] += 1)
        else @headers[name] = 0 end
        Header.new(text, level, name)
      end

    end

    # Renders a header (e.g. +h1+, +h2+, ...) with anchors.
    class Header < Template

      # Name of template file for rendering headers.
      TEMPLATE = 'header.haml'

      attr_reader :name

      # Creates a new header.
      # @param [String] text          header text
      # @param [Fixnum] level         1 to 6
      # @param [String] name          anchor name
      def initialize(text, level, name)
        @text, @level, @name = text, level, name
      end

      def render(locals={})
        super locals.merge(text: @text, level: @level, name: @name)
      end

    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
aladdin-0.0.8 lib/aladdin/render/templates/header.rb
aladdin-0.0.7 lib/aladdin/render/templates/header.rb
aladdin-0.0.6 lib/aladdin/render/templates/header.rb
aladdin-0.0.5 lib/aladdin/render/templates/header.rb