lib/csl/style/label.rb in csl-1.0.0.pre13 vs lib/csl/style/label.rb in csl-1.0.0.pre14

- old
+ new

@@ -6,32 +6,51 @@ attr_struct :variable, :form, :plural, *Schema.attr(:formatting, :periods) has_no_children + @variables = [:locator, :page].concat(Schema.variables[:number]).freeze + + class << self + attr_reader :variables + end + def has_variable? + return parent.has_variable? if names_label? attribute?(:variable) end + # The value of the node's variable attribute. If the {Label} + # is the child of a {Names} node, returns the parent's variable + # attribute instead. + # + # @return [String] the value of the node's variable attribute def variable + return parent.variable if name_label? attributes[:variable] end - def locator? - variable.to_s =~ /^locator$/i - end + Label.variables.each do |type| + pattern = Regexp.new("^#{type}", true) - def page? - variable.to_s =~ /^page$/i + define_method("#{type}?".tr('-', '_')) do + variable.to_s =~ pattern + end end def always_pluralize? attributes[:plural].to_s =~ /^always$/i end def never_pluralize? attributes[:plural].to_s =~ /^never$/i end + + # @return [Boolean] whether or not the {Label} is inside a {Names} node + def names_label? + parent.is_a?(Names) + end + alias name_label? names_label? end end end \ No newline at end of file