Browse Source

say: added two scripts for correct declension of numerals by gender and case

master
Sergey Kiselev 3 months ago
parent
commit
fa12164c39
  1. 3
      README.md
  2. 43
      date2word
  3. 10
      say
  4. 30
      time2word

3
README.md

@ -14,7 +14,8 @@ __say__
- cURL (`ftp/curl`); - cURL (`ftp/curl`);
- jq (`textproc/jq`); - jq (`textproc/jq`);
- опционально утилита notify-send (из `devel/libnotify`); - опционально утилита notify-send (из `devel/libnotify`);
- скрипт date2word.lua. - два скрипта на Python: date2word и time2word. Для их работы требуется
библиотека num2words (`devel/py-num2words`).
--- ---

43
date2word

@ -0,0 +1,43 @@
#!/usr/local/bin/python3
import time
from num2words import num2words
month_names = [
' января ', ' февраля ', ' марта ',
' апреля ', ' мая ', ' июня ',
' июля ', ' августа ', ' сентября ',
' октября ', ' ноября ', ' декабря ',
]
wdays = [
' понедельник, ', ' вторник, ', ' среда, ',
' четверг, ', ' пятница, ', ' суббота, ', ' воскресенье, '
]
def pluralize(n, forms):
"""
Returns appropriate form of item that should be after its quantity
:param n: number of items
:param forms: array of 3 forms for 1, 2 and 5 counts
('яблоко', 'яблока', 'яблок')
:returns
"""
if n % 100 in (11, 12, 13, 14):
return forms[2]
if n % 10 == 1:
return forms[0]
if n % 10 in (2, 3, 4):
return forms[1]
return forms[2]
WD = wdays[time.localtime(time.time()).tm_wday]
D = time.localtime(time.time()).tm_mday
M = month_names[time.localtime(time.time()).tm_mon]
Y = time.localtime(time.time()).tm_year
W = WD + num2words(D, lang = 'ru', gender = 'n', to = 'ordinal') + M
W = W + num2words(Y, lang = 'ru', gender = 'm', case = 'g', to = 'ordinal')
W = W + ' года'
print(W)

10
say

@ -40,17 +40,11 @@ _pluralform(){
} }
_date() { _date() {
echo "Сегодня - $( date '+%A' ), $( date2word.lua )." echo "Сегодня - $( date2word )."
} }
_time() { _time() {
H=$(( $( date '+%H' ) + 0 )) echo "Текущее время - $( time2word )"
M=$(( $( date '+%M' ) + 0 ))
H="${H} $( _pluralform ${H} час часа часов )"
M="${M} $( _pluralform ${M} минута минуты минут )"
echo "${H}. ${M}"
} }
_godville() { _godville() {

30
time2word

@ -0,0 +1,30 @@
#!/usr/local/bin/python3
import time
from num2words import num2words
def pluralize(n, forms):
"""
Returns appropriate form of item that should be after its quantity
:param n: number of items
:param forms: array of 3 forms for 1, 2 and 5 counts
('яблоко', 'яблока', 'яблок')
:returns
"""
if n % 100 in (11, 12, 13, 14):
return forms[2]
if n % 10 == 1:
return forms[0]
if n % 10 in (2, 3, 4):
return forms[1]
return forms[2]
H = time.localtime(time.time()).tm_hour
M = time.localtime(time.time()).tm_min
W = num2words(H, lang = 'ru', gender = 'm') + pluralize(H, [' час, ', ' часа, ', ' часов, '])
W = W + num2words(M, lang = 'ru', gender = 'f') + pluralize(M, [' минута', ' минуты', ' минут'])
print(W)
Loading…
Cancel
Save