Module: Pubid::Ieee
- Extended by:
- PrefixesSupport
- Defined in:
- lib/pubid/ieee.rb,
lib/pubid/ieee/ire.rb,
lib/pubid/ieee/aiee.rb,
lib/pubid/ieee/nesc.rb,
lib/pubid/ieee_debug.rb,
lib/pubid/ieee/parser.rb,
lib/pubid/ieee/builder.rb,
lib/pubid/ieee/renderer.rb,
lib/pubid/ieee/compaction.rb,
lib/pubid/ieee/ire/parser.rb,
lib/pubid/ieee/pre_parser.rb,
lib/pubid/ieee/urn_parser.rb,
lib/pubid/ieee/aiee/parser.rb,
lib/pubid/ieee/identifiers.rb,
lib/pubid/ieee/ire/builder.rb,
lib/pubid/ieee/nesc/parser.rb,
lib/pubid/ieee/aiee/builder.rb,
lib/pubid/ieee/nesc/builder.rb,
lib/pubid/ieee/typed_stages.rb,
lib/pubid/ieee/urn_generator.rb,
lib/pubid/ieee/ire/identifier.rb,
lib/pubid/ieee/aiee/identifier.rb,
lib/pubid/ieee/components/code.rb,
lib/pubid/ieee/components/draft.rb,
lib/pubid/ieee/identifiers/base.rb,
lib/pubid/ieee/identifiers/nesc.rb,
lib/pubid/ieee/identifiers/standard.rb,
lib/pubid/ieee/identifiers/amendment.rb,
lib/pubid/ieee/identifiers/nesc/base.rb,
lib/pubid/ieee/components/typed_stage.rb,
lib/pubid/ieee/identifiers/nesc/draft.rb,
lib/pubid/ieee/components/relationship.rb,
lib/pubid/ieee/identifiers/code_number.rb,
lib/pubid/ieee/identifiers/corrigendum.rb,
lib/pubid/ieee/identifiers/si_standard.rb,
lib/pubid/ieee/identifiers/nesc/edition.rb,
lib/pubid/ieee/identifiers/nesc/redline.rb,
lib/pubid/ieee/identifiers/nesc/handbook.rb,
lib/pubid/ieee/identifiers/nesc/standard.rb,
lib/pubid/ieee/identifiers/dual_published.rb,
lib/pubid/ieee/identifiers/dual_identifier.rb,
lib/pubid/ieee/identifiers/adopted_standard.rb,
lib/pubid/ieee/identifiers/joint_development.rb,
lib/pubid/ieee/identifiers/redlined_standard.rb,
lib/pubid/ieee/identifiers/csa_dual_published.rb,
lib/pubid/ieee/identifiers/iec_ieee_copublished.rb,
lib/pubid/ieee/identifiers/supplement_identifier.rb,
lib/pubid/ieee/identifiers/conformance_identifier.rb,
lib/pubid/ieee/identifiers/parenthetical_identifier.rb,
lib/pubid/ieee/identifiers/project_draft_identifier.rb,
lib/pubid/ieee/identifiers/interpretation_identifier.rb,
lib/pubid/ieee/identifiers/multi_numbered_identifier.rb
Defined Under Namespace
Modules: Aiee, Compaction, Components, Identifiers, Ire, Nesc, PreParser, TypedStages Classes: Builder, Identifier, Parser, Renderer, UrnGenerator, UrnParser
Constant Summary collapse
- PREFIXES =
Publisher prefix. The private PreParser::PUBLISHERS list also holds adopted co-org names (ANSI, AIEE, ASA, ...) that are not leading routing tokens for an IEEE reference, so they are deliberately excluded. The joint ISO/IEC/IEEE form comes from Pubid::JOINT_PREFIXES.
["IEEE"].freeze
- REGISTERED_SERIES =
Document-number series carrying an IEEE registered trademark ("®"). 8802 is the ISO/IEC co-published form of the 802 series.
%w[802 8802 2030].freeze
- ISO_ADOPTED_SERIES =
The ISO/IEC adoption of IEEE 802: the number alone identifies the series, whatever publishers are printed.
"8802"- TYPED_STAGES =
Backward compatibility aliases at module level These allow code expecting Pubid::Ieee::TYPED_STAGES to still work
TypedStages::TYPED_STAGES
- DEFAULT_TYPED_STAGE =
TypedStages::DEFAULT_TYPED_STAGE
Class Method Summary collapse
-
.all_typed_stages ⇒ Array<Pubid::Components::TypedStage>
Build typed stage index from TypedStages module.
-
.identifier_types ⇒ Array<Class>
Auto-discover all identifier types from the Identifiers namespace.
-
.locate_stage(abbr) ⇒ Pubid::Components::TypedStage?
Lookup: abbreviation -> typed stage.
-
.locate_stage_by_ieee_draft(draft) ⇒ Pubid::Components::TypedStage?
Lookup: IEEE draft notation -> typed stage.
-
.locate_stage_by_iso_stage(stage) ⇒ Pubid::Components::TypedStage?
Lookup: ISO stage code -> typed stage.
-
.locate_type(code) ⇒ Class?
Lookup: type code -> identifier class.
- .parse(input) ⇒ Object
-
.registered_series?(number, prefix = nil, publishers: nil) ⇒ Boolean
True when the document number belongs to a registered-trademark series.
-
.trademark_symbol(rendered) ⇒ Object
IEEE trademark symbol for a rendered identifier string.
-
.trademark_symbol_for(number, prefix = nil, publishers: nil) ⇒ Object
IEEE trademark symbol for a document number: ® for the registered series, ™ for everything else.
Methods included from PrefixesSupport
Class Method Details
.all_typed_stages ⇒ Array<Pubid::Components::TypedStage>
Build typed stage index from TypedStages module
107 108 109 |
# File 'lib/pubid/ieee.rb', line 107 def all_typed_stages @all_typed_stages ||= TypedStages::TYPED_STAGES end |
.identifier_types ⇒ Array<Class>
Auto-discover all identifier types from the Identifiers namespace
98 99 100 101 102 103 |
# File 'lib/pubid/ieee.rb', line 98 def identifier_types @identifier_types ||= Identifiers.constants .filter_map { |c| begin; Identifiers.const_get(c); rescue NameError; nil; end } .select { |c| c.is_a?(Class) && c.singleton_methods(false).include?(:type) } .select { |c| c.type.is_a?(Hash) } end |
.locate_stage(abbr) ⇒ Pubid::Components::TypedStage?
Lookup: abbreviation -> typed stage
121 122 123 124 |
# File 'lib/pubid/ieee.rb', line 121 def locate_stage(abbr) abbr_str = abbr.to_s.upcase all_typed_stages.find { |s| s.abbr.any? { |a| a.to_s.upcase == abbr_str } } end |
.locate_stage_by_ieee_draft(draft) ⇒ Pubid::Components::TypedStage?
Lookup: IEEE draft notation -> typed stage
129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/pubid/ieee.rb', line 129 def locate_stage_by_ieee_draft(draft) return nil if draft.nil? || draft.to_s.strip.empty? draft_str = draft.to_s.strip # Try exact match on abbreviation first ts = all_typed_stages.find { |t| t.abbr.include?(draft_str) } return ts if ts # Try match on ieee_draft_equivalent all_typed_stages.find { |t| t.ieee_draft_equivalent == draft_str } end |
.locate_stage_by_iso_stage(stage) ⇒ Pubid::Components::TypedStage?
Lookup: ISO stage code -> typed stage
145 146 147 148 149 |
# File 'lib/pubid/ieee.rb', line 145 def locate_stage_by_iso_stage(stage) return nil if stage.nil? || stage.to_s.strip.empty? all_typed_stages.find { |ts| ts.iso_stage_equivalent == stage.to_s.strip } end |
.locate_type(code) ⇒ Class?
Lookup: type code -> identifier class
114 115 116 |
# File 'lib/pubid/ieee.rb', line 114 def locate_type(code) identifier_types.find { |t| t.type[:key].to_s == code.to_s } end |
.parse(input) ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/pubid/ieee.rb', line 44 def parse(input) if input.length > Pubid::MAX_INPUT_LENGTH raise ArgumentError, Pubid::INPUT_TOO_LONG_MESSAGE end Identifier.parse(input) end |
.registered_series?(number, prefix = nil, publishers: nil) ⇒ Boolean
True when the document number belongs to a registered-trademark series.
A project number keeps its series identity, so a leading "P" is
stripped. prefix is the code's letter series, which must be absent
(or the bare project "P") — "C802.1" is a different series that merely
starts with the same digits. publishers guards against claiming an
IEEE registered mark for another body that happens to have numbered a
document 802 or 2030 — "AIEE Std No. 802" predates the IEEE 802 series
by two decades. It is optional: with no publishers given the number
decides, which keeps the plain number lookup usable on its own.
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/pubid/ieee.rb', line 64 def registered_series?(number, prefix = nil, publishers: nil) return false unless prefix.nil? || prefix.to_s.empty? || prefix.to_s == "P" = number.to_s.delete_prefix("P") return false unless REGISTERED_SERIES.include?() return true if == ISO_ADOPTED_SERIES || publishers.nil? Array(publishers).any? { |p| p.to_s.split("/").include?("IEEE") } end |
.trademark_symbol(rendered) ⇒ Object
IEEE trademark symbol for a rendered identifier string. Kept for external callers only — every render site inside pubid passes the document number to #trademark_symbol_for instead, because the first numeric token of a rendered string is not reliably the document number (a NESC or IRE string starts with the publication year).
92 93 94 |
# File 'lib/pubid/ieee.rb', line 92 def trademark_symbol(rendered) trademark_symbol_for(rendered.to_s[/(?<![0-9A-Za-z])P?(\d+)/, 1]) end |
.trademark_symbol_for(number, prefix = nil, publishers: nil) ⇒ Object
IEEE trademark symbol for a document number: ® for the registered series, ™ for everything else. This is the entry point render sites use, because they hold the identifier and so know its number — the symbol must not depend on where in the rendered string the mark lands.
79 80 81 82 83 84 85 |
# File 'lib/pubid/ieee.rb', line 79 def trademark_symbol_for(number, prefix = nil, publishers: nil) if registered_series?(number, prefix, publishers: publishers) "®" else "™" end end |