Class: Pubid::Itu::Renderer::Base

Inherits:
Core::Renderer::Base
  • Object
show all
Defined in:
lib/pubid/itu/renderer/base.rb

Direct Known Subclasses

Contribution, ImplementersGuide

Constant Summary collapse

TYPE_PREFIX =
"".freeze
LANGUAGES =
Pubid::Core::Renderer::Base::LANGUAGES.merge("zh" => "C").freeze

Instance Method Summary collapse

Instance Method Details

#render(**args) ⇒ Object



7
8
9
# File 'lib/pubid/itu/renderer/base.rb', line 7

def render(**args)
  render_base_identifier(**args) + @prerendered_params[:language].to_s
end

#render_addendum(addendum, opts, params) ⇒ Object



153
154
155
# File 'lib/pubid/itu/renderer/base.rb', line 153

def render_addendum(addendum, opts, params)
  "#{render_date(addendum[:date], opts, params)} Add. #{addendum[:number]}"
end

#render_amendment(amendment, _opts, _params) ⇒ Object



117
118
119
# File 'lib/pubid/itu/renderer/base.rb', line 117

def render_amendment(amendment, _opts, _params)
  " Amd #{amendment[:number]}"
end

#render_annex(annex, _opts, _params) ⇒ Object



141
142
143
# File 'lib/pubid/itu/renderer/base.rb', line 141

def render_annex(annex, _opts, _params)
  " Annex #{annex[:number]}" if annex[:number]
end

#render_annex_to_identifier(params, opts) ⇒ Object

Render “Annex to …” identifier (annex of a Special Publication, where the annex itself has no number). Three forms:

* default (no language): English structural, "Annex to ITU OB No. 1000"
* short with language: structural translation using annex_to
* long with language: per-language annex_long template (title-style)

Languages without an annex_to entry (ru, zh) use the long template for the short form too.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/pubid/itu/renderer/base.rb', line 40

def render_annex_to_identifier(params, opts)
  lang = opts[:i18n_lang]&.to_s
  long_template = lang && Pubid::Itu::I18N["annex_long"]&.fetch(lang, nil)

  if opts[:format] == :long && long_template
    return long_template % { number: @params[:number] }
  end

  annex_translation = lang && Pubid::Itu::I18N["annex_to"]&.fetch(lang, nil)

  if annex_translation
    return "#{render_structural(params)} #{annex_translation}" if lang == "ar"

    return "#{annex_translation} #{render_structural(params)}"
  end

  return long_template % { number: @params[:number] } if long_template

  "Annex to #{render_structural(params)}"
end

#render_appendix(appendix, _opts, _params) ⇒ Object



157
158
159
# File 'lib/pubid/itu/renderer/base.rb', line 157

def render_appendix(appendix, _opts, _params)
  " App. #{appendix[:number]}"
end

#render_base_identifier(**args) ⇒ Object



15
16
17
18
19
20
# File 'lib/pubid/itu/renderer/base.rb', line 15

def render_base_identifier(**args)
  prerender(**args)

  # pass args to render_identifier
  render_identifier(@prerendered_params, args)
end

#render_corrigendum(corrigendum, opts, params) ⇒ Object



145
146
147
# File 'lib/pubid/itu/renderer/base.rb', line 145

def render_corrigendum(corrigendum, opts, params)
  "#{render_date(corrigendum[:date], opts, params)} Cor. #{corrigendum[:number]}"
end

#render_date(date, opts, _params) ⇒ Object



95
96
97
98
99
100
101
# File 'lib/pubid/itu/renderer/base.rb', line 95

def render_date(date, opts, _params)
  return if opts[:without_date]

  return " (#{date[:year]})" unless date[:month]

  " (%<month>02d/%<year>d)" % date
end

#render_identifier(params, opts) ⇒ Object

can prepend entity, can postpend, can use item holder



24
25
26
27
28
29
30
31
# File 'lib/pubid/itu/renderer/base.rb', line 24

def render_identifier(params, opts)
  if @params[:annex] && @params[:annex][:number].nil?
    return render_annex_to_identifier(params, opts)
  end

  prefix, postfix = type_translation_affixes(opts)
  "#{prefix}#{render_structural(params)}#{postfix}"
end

#render_language(language, _opts, _params) ⇒ Object



161
162
163
164
# File 'lib/pubid/itu/renderer/base.rb', line 161

def render_language(language, _opts, _params)
  code = LANGUAGES[language]
  code ? "-#{code}" : nil
end

#render_number(number, _opts, params) ⇒ Object



89
90
91
92
93
# File 'lib/pubid/itu/renderer/base.rb', line 89

def render_number(number, _opts, params)
  return " No. #{number}" if params[:series] == "OB"

  number
end

#render_part(part, opts, _params) ⇒ Object



107
108
109
110
111
# File 'lib/pubid/itu/renderer/base.rb', line 107

def render_part(part, opts, _params)
  return "-#{part.reverse.join('-')}" if part.is_a?(Array)

  "-#{part}"
end

#render_publisher(publisher, opts, params) ⇒ Object



80
81
82
83
84
85
86
87
# File 'lib/pubid/itu/renderer/base.rb', line 80

def render_publisher(publisher, opts, params)
  if opts[:i18n_lang] &&
      (publisher_translation = Pubid::Itu::I18N["publisher"][publisher]&.fetch(opts[:i18n_lang].to_s, nil))
    return super(publisher_translation, opts, params)
  end

  super
end

#render_range(range, _opts, params) ⇒ Object



149
150
151
# File 'lib/pubid/itu/renderer/base.rb', line 149

def render_range(range, _opts, params)
  "-#{params[:series]}.#{range[:number]}"
end

#render_second_number(second_number, _opts, _params) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
# File 'lib/pubid/itu/renderer/base.rb', line 125

def render_second_number(second_number, _opts, _params)
  result = "/#{second_number[:series]}.#{second_number[:number]}"
  if second_number[:subseries]
    result += ".#{second_number[:subseries]}"
  end
  if second_number[:part]
    result += "-#{second_number[:part]}"
  end

  result
end

#render_series(series, _opts, params) ⇒ Object



113
114
115
# File 'lib/pubid/itu/renderer/base.rb', line 113

def render_series(series, _opts, params)
  series + (params[:series] != "OB" && params[:number] ? "." : "")
end

#render_structural(params) ⇒ Object



61
62
63
64
65
66
# File 'lib/pubid/itu/renderer/base.rb', line 61

def render_structural(params)
  pub_sector = params[:sector].to_s.empty? ? "%{publisher}" : "%{publisher}-%{sector}"
  "#{pub_sector} #{render_type_series(params)}%{number}%{subseries}"\
  "%{part}%{second_number}%{range}%{annex}%{amendment}%{corrigendum}%{supplement}"\
  "%{addendum}%{appendix}%{date}" % params
end

#render_subseries(subseries, _opts, _params) ⇒ Object



121
122
123
# File 'lib/pubid/itu/renderer/base.rb', line 121

def render_subseries(subseries, _opts, _params)
  ".#{subseries}"
end

#render_supplement(supplement, _opts, _params) ⇒ Object



137
138
139
# File 'lib/pubid/itu/renderer/base.rb', line 137

def render_supplement(supplement, _opts, _params)
  " Suppl. #{supplement[:number]}"
end

#render_type(type, opts, _params) ⇒ Object



103
104
105
# File 'lib/pubid/itu/renderer/base.rb', line 103

def render_type(type, opts, _params)
  "#{type}-" if opts[:with_type]
end

#render_type_series(params) ⇒ Object



11
12
13
# File 'lib/pubid/itu/renderer/base.rb', line 11

def render_type_series(params)
  "%{type}%{series}" % params
end

#type_translation_affixes(opts) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/pubid/itu/renderer/base.rb', line 68

def type_translation_affixes(opts)
  type_translation = opts[:i18n_lang] &&
    Pubid::Itu::I18N["type"][@params[:type]]&.fetch(opts[:i18n_lang].to_s, nil)
  return ["", ""] unless type_translation

  case opts[:i18n_lang]
  when :zh then ["", type_translation]
  when :ar then ["", " #{type_translation}"]
  else ["#{type_translation} ", ""]
  end
end