Commit 715e1139 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Turn @aside to builtin tag class.

For now the injection of @assets is implemented as specific to @aside
tag.  Needs cleaning up in the future.  But now finally all the old
meta-tags have been replaced with new builtin tags.
parent 981882c0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
require 'jsduck/batch_parser'
require 'jsduck/assets'
require 'jsduck/meta_tag_registry'
require 'jsduck/builtins_registry'
require 'jsduck/export_writer'
require 'jsduck/web_writer'

@@ -39,6 +40,7 @@ module JsDuck

      # Give access to assets from all meta-tags
      MetaTagRegistry.instance.assets = @assets
      BuiltinsRegistry.assets = @assets
    end

    def generate_export
+70 −0
Original line number Diff line number Diff line
require "jsduck/meta_tag"
require "jsduck/builtins/tag"
require "jsduck/logger"

module JsDuck::Tag
  # Implementation of @aside tag.
  class Aside < JsDuck::MetaTag
module JsDuck::Builtins
  class Aside < Tag
    def initialize
      @name = "aside"
      @pattern = "aside"
      @key = :aside
      @position = :top
      @allowed_types = {
        :guide => true,
        :video => true,
        :example => true,
      }
      @html_position = :top
    end

    def to_value(asides)
      asides.map do |line|
        if line =~ /\A(\w+) +([^ ].*)\Z/
          type = $1.to_sym
          name = $2.strip
          if @allowed_types[type]
            {:type => type, :name => name}
          else
            warn("Unknown @aside type: #{type}")
    def parse(p)
      p.add_tag(:aside)
      p.skip_horiz_white
      maybe_aside_type(p)
      p.skip_horiz_white
      p.maybe_name
    end
        else
          warn("Bad syntax: @aside #{line}")

    def maybe_aside_type(p)
      p.current_tag[:type] = p.ident.to_sym if p.look(/\w+/)
    end
      end.compact

    def process_doc(tags)
      tags
    end

    def to_html(asides)
      asides.map do |aside|
    def to_html(context)
      context[:aside].map do |aside|
        type = aside[:type]
        name = aside[:name]
        assets_group = get_assets_group(type)
@@ -49,11 +43,14 @@ module JsDuck::Tag
            </div>
          EOHTML
        else
          warn("Unknown @aside name: #{type} #{name}")
          warn("Unknown @aside name: #{type} #{name}", context)
        end
      end.compact
    end

    # special accessor for @aside alone through which assets are set
    attr_accessor :assets

    def get_assets_group(type)
      case type
      when :guide then @assets.guides
@@ -63,12 +60,11 @@ module JsDuck::Tag
      end
    end

    def warn(msg)
      ctx = @context ? @context[:files][0] : {}
      JsDuck::Logger.warn(:aside, msg, ctx[:filename], ctx[:linenr])
    def warn(msg, context)
      file = context[:files][0]
      JsDuck::Logger.warn(:aside, msg, file[:filename], file[:linenr])
      nil
    end

  end
end
+5 −0
Original line number Diff line number Diff line
@@ -89,6 +89,11 @@ module JsDuck
    # Array of attributes to be shown in member signatures
    # (and in order they should be shown in).
    attr_reader :signatures

    # Gives access to assets from @aside tag
    def assets=(assets)
      @keys[:aside].assets = assets
    end
  end

end