Module: Num2words::Locales::EL

Defined in:
lib/num2words/locales/el.rb

Constant Summary collapse

ONES_MASC =
I18n.t("num2words.ones_masc", locale: :el)
ONES_FEM =
I18n.t("num2words.ones_fem", locale: :el)
TEENS =
I18n.t("num2words.teens", locale: :el)
TENS =
I18n.t("num2words.tens", locale: :el)
HUNDREDS =
I18n.t("num2words.hundreds", locale: :el)
SCALES =
I18n.t("num2words.scales", locale: :el)
FRACTIONS =
I18n.t("num2words.fractions", locale: :el)
GRAMMAR =
I18n.t("num2words.grammar", locale: :el)
DATE =
I18n.t("num2words.date", locale: :el)
DATE_TEMPLATE =
I18n.t("num2words.date.template", locale: :el)
TIME =
I18n.t("num2words.time", locale: :el)
TIME_TEMPLATE =
I18n.t("num2words.time.template", locale: :el)
DATETIME_TEMPLATE =
I18n.t("num2words.datetime.template", locale: :el)
ORDINALS =
I18n.t("num2words.numbers.ordinals", locale: :el)
ONES_NEUT =
["μηδέν", "ένα", "δύο", "τρία", "τέσσερα", "πέντε", "έξι", "επτά", "οκτώ", "εννέα"].freeze
TEENS_MASC =
["δέκα", "έντεκα", "δώδεκα", "δεκατρείς", "δεκατέσσερις", "δεκαπέντε", "δεκαέξι", "δεκαεπτά", "δεκαοκτώ", "δεκαεννέα"].freeze
TEENS_FEM =
TEENS_MASC
TEENS_NEUT =
TEENS
FEMININE_MAJOR_CURRENCIES =
%i[GBP TRY UAH CZK SEK NOK DKK INR IDR PKR].freeze
NEUTER_MAJOR_CURRENCIES =
%i[EUR USD RUB KRW PLN RON BGN BYN KZT ILS HUF SAR THB VND IRR RSD MYR BDT KES BRL CNY JPY].freeze
NEUTER_MINOR_CURRENCIES =
%i[EUR USD GBP JPY CNY RUB KRW TRY PLN UAH CZK RON BGN BYN KZT SEK NOK DKK HUF THB VND IDR IRR MYR KES BRL].freeze

Class Method Summary collapse

Class Method Details

.cardinal(number, gender: :masculine) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/num2words/locales/el.rb', line 87

def cardinal(number, gender: :masculine)
  integer_value = Integer(number)
  negative = integer_value.negative?
  integer_value = integer_value.abs

  return ones(gender)[0] if integer_value.zero?

  groups = integer_value.to_s
                        .chars.reverse.each_slice(3).map(&:reverse)
                        .map(&:join).map!(&:to_i).reverse

  words = []
  groups.each_with_index do |group_value, index|
    next if group_value.zero?

    scale_idx = groups.size - index - 1
    group_gender = scale_idx.zero? ? gender : scale_gender(scale_idx)
    group_words = triple_words(group_value, scale_idx, gender: group_gender)
    group_words.shift if scale_idx == 1 && group_value == 1
    words.concat group_words
  end

  words.unshift(minus_word) if negative
  words.join(" ")
end

.currency_major_gender(currency) ⇒ Object



152
153
154
155
156
157
# File 'lib/num2words/locales/el.rb', line 152

def currency_major_gender(currency)
  return :feminine if FEMININE_MAJOR_CURRENCIES.include?(currency)
  return :neuter if NEUTER_MAJOR_CURRENCIES.include?(currency)

  :masculine
end

.currency_minor_gender(currency) ⇒ Object



159
160
161
# File 'lib/num2words/locales/el.rb', line 159

def currency_minor_gender(currency)
  NEUTER_MINOR_CURRENCIES.include?(currency) ? :neuter : :feminine
end

.currency_number_words(number, currency, unit:) ⇒ Object



65
66
67
68
# File 'lib/num2words/locales/el.rb', line 65

def currency_number_words(number, currency, unit:)
  gender = unit == :major ? currency_major_gender(currency) : currency_minor_gender(currency)
  cardinal(number, gender: gender)
end

.date_day(day, format:, date_case:) ⇒ Object



70
71
72
# File 'lib/num2words/locales/el.rb', line 70

def date_day(day, format:, date_case:)
  ordinal(day, :default)
end

.date_year(year, format:) ⇒ Object



74
75
76
# File 'lib/num2words/locales/el.rb', line 74

def date_year(year, format:)
  cardinal(year, gender: :neuter)
end

.default_fraction_wordObject



53
54
55
# File 'lib/num2words/locales/el.rb', line 53

def default_fraction_word
  GRAMMAR[:default_fraction]
end

.fraction_joiner(joiner) ⇒ Object



49
50
51
# File 'lib/num2words/locales/el.rb', line 49

def fraction_joiner(joiner)
  joiner.to_sym == :and ? "και" : GRAMMAR[:conjunction]
end

.fraction_numerator_feminine?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/num2words/locales/el.rb', line 57

def fraction_numerator_feminine?
  false
end

.integer_to_words(number, feminine: false) ⇒ Object



34
35
36
# File 'lib/num2words/locales/el.rb', line 34

def integer_to_words(number, feminine: false)
  cardinal(number, gender: feminine ? :feminine : :masculine)
end

.minus_wordObject



45
46
47
# File 'lib/num2words/locales/el.rb', line 45

def minus_word
  GRAMMAR[:minus]
end

.ones(gender) ⇒ Object



136
137
138
139
140
141
142
# File 'lib/num2words/locales/el.rb', line 136

def ones(gender)
  case gender
  when :feminine then ONES_FEM
  when :neuter then ONES_NEUT
  else ONES_MASC
  end
end

.ordinal(value, format, gender: :masculine) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/num2words/locales/el.rb', line 78

def ordinal(value, format, gender: :masculine)
  ordinals = ORDINALS[format] || ORDINALS[:nominative]
  gender_data = ordinals[gender] || ordinals[:masculine]

  return gender_data[value - 1] if value.between?(1, gender_data.length)

  cardinal(value)
end

.pluralize(number, singular, few, plural) ⇒ Object



163
164
165
# File 'lib/num2words/locales/el.rb', line 163

def pluralize(number, singular, few, plural)
  number.abs == 1 ? singular : few
end

.scale_gender(scale_idx) ⇒ Object



132
133
134
# File 'lib/num2words/locales/el.rb', line 132

def scale_gender(scale_idx)
  scale_idx == 1 ? :feminine : :neuter
end

.teens(gender) ⇒ Object



144
145
146
147
148
149
150
# File 'lib/num2words/locales/el.rb', line 144

def teens(gender)
  case gender
  when :feminine then TEENS_FEM
  when :neuter then TEENS_NEUT
  else TEENS_MASC
  end
end

.time_unit_feminine?(unit) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/num2words/locales/el.rb', line 61

def time_unit_feminine?(unit)
  unit == :hour
end

.triple_to_words(number, scale_idx, feminine: false) ⇒ Object



38
39
40
41
42
43
# File 'lib/num2words/locales/el.rb', line 38

def triple_to_words(number, scale_idx, feminine: false)
  gender = feminine ? :feminine : :masculine
  gender = :feminine if scale_idx == 1
  gender = :neuter if scale_idx > 1
  triple_words(number, scale_idx, gender: gender)
end

.triple_words(number, scale_idx, gender:) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/num2words/locales/el.rb', line 113

def triple_words(number, scale_idx, gender:)
  return [] if number.zero?

  words = []
  words << HUNDREDS[number / 100] if number >= 100
  rest = number % 100

  if rest.between?(10, 19)
    words << teens(gender)[rest - 10]
  else
    words << TENS[rest / 10] if rest >= 20
    value = rest % 10
    words << ones(gender)[value] if value.positive?
  end

  words << pluralize(number, *SCALES[scale_idx]) unless scale_idx.zero?
  words.compact
end