lib/csl/style/label.rb in csl-1.0.0.pre14 vs lib/csl/style/label.rb in csl-1.0.0.pre15
- old
+ new
@@ -1,19 +1,40 @@
module CSL
class Style
+ # Labels are used for printing the term matching the variable selected
+ # with the required variable attribute, which must be set to "locator,
+ # "page", or one of the number variables.
+ #
+ # The term is only rendered if the selected variable is non-empty.
+ #
+ # If the {Label} is the child of a {Names} node, the parent's variable
+ # is used instead of the local attribute.
class Label < Node
attr_struct :variable, :form, :plural,
*Schema.attr(:formatting, :periods)
has_no_children
@variables = [:locator, :page].concat(Schema.variables[:number]).freeze
+ @terms = Hash.new { |h,k| h[k] = k }
+
+ @terms['number-of-pages'] = 'page'
+ @terms['number-of-volumes'] = 'volume'
+ @terms['chapter-number'] = 'chapter'
+ @terms['collection-number'] = 'collection'
+
class << self
+ # @!attribute [r] variables
+ # @return [Array<Symbol>] a list of valid label variable values
attr_reader :variables
+
+ # @!attribute [r] terms
+ # @return [Hash<String, String>] a cache for variable-term mapping
+ attr_reader :terms
end
def has_variable?
return parent.has_variable? if names_label?
attribute?(:variable)
@@ -49,9 +70,12 @@
def names_label?
parent.is_a?(Names)
end
alias name_label? names_label?
+ def term
+ Label.terms[variable]
+ end
end
end
end
\ No newline at end of file