File indexing completed on 2024-05-05 17:52:55

0001 #!/usr/bin/env python3
0002 # coding: utf8
0003 
0004 """
0005 Fill in some comets' names that follow specific patterns.
0006 Run against kstars.po.
0007 
0008 Sieve has no options.
0009 
0010 @author: Alexander Potashev <aspotashev@gmail.com>
0011 @license: GPLv3
0012 """
0013 
0014 from pology import _, n_
0015 from pology.report import report
0016 from pology.msgreport import report_msg_content
0017 import os
0018 import re
0019 
0020 
0021 def setup_sieve (p):
0022 
0023     p.set_desc(_("@info sieve discription",
0024     "Fill in some comets' names that follow specific patterns."
0025     ))
0026 
0027 
0028 class Sieve (object):
0029 
0030     def __init__ (self, params):
0031         pass
0032         # Other dates should have the following format: (yyyy-mm-dd)
0033         self.date_re = re.compile("^[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]$")
0034 
0035     def translate (self, msg):
0036         if msg.msgctxt == "Asteroid name (optional)" and re.match(r'\([0-9]{4} [A-Z]{2}[0-9]{1,3}\)', msg.msgid):
0037             return msg.msgid
0038         if msg.msgctxt == 'Comet name (optional)':
0039             m = re.match(r'([CP]/[0-9]* [A-Z0-9\-]{2,5}) \(([a-zA-Z ]*)\)', msg.msgid)
0040             if m:
0041                 code = m.group(1)
0042                 name = m.group(2)
0043 
0044                 tr_name = {
0045                     'Great comet': 'Большая комета',
0046                     'PANSTARRS': 'Pan-STARRS',
0047                     'LINEAR': 'LINEAR',
0048                     'Lemmon': 'обзор Маунт-Леммон',
0049                     'NEOWISE': 'NEOWISE',
0050                     'Catalina': 'обзор Каталина',
0051                     'Borisov': 'Борисов',
0052                     'Messier': 'Мессье',
0053                     'Pons': 'Понс',
0054                     'Гершель': 'Гершель',
0055                     'Olbers': 'Ольберс',
0056                     'Winnecke': 'Виннеке',
0057                     'WISE': 'WISE',
0058                     'Tempel': 'Темпель',
0059                     'STEREO': 'STEREO',
0060                     'SOHO': 'SOHO',
0061                     'Spacewatch': 'Spacewatch',
0062                     'SOLWIND': 'Solwind',
0063                     'Shoemaker': 'Шумейкер',
0064                     'NEAT': 'NEAT',
0065                     'McNaught': 'Макнот',
0066                     'Christensen': 'Кристенсен',
0067                     'Barnard': 'Барнард',
0068                     'LONEOS': 'LONEOS',
0069                     'Lovejoy': 'Лавджой',
0070                     'Machholz': 'Макхольц',
0071                     'Mechain': 'Мешен',
0072                     'SMM': 'SolarMax',
0073                     'Boattini': 'Боаттини',
0074                     'Bradfield': 'Брэдфилд',
0075                     'Mueller': 'Мюллер',
0076                     'Alcock': 'Алкок',
0077                     'Blathwayt': 'Блатуэйт',
0078                     'Borrelly': 'Борелли',
0079                     'Brorsen': 'Брорзен',
0080                     'Burnham': 'Бёрнхем',
0081                     'du Toit': 'Дю Туа',
0082                     'Gambart': 'Гамбар',
0083                     'Giacobini': 'Джакобини',
0084                     'Gibbs': 'Гиббс',
0085                     'Hill': 'Хилл',
0086                     'Honda': 'Хонда',
0087                     'IRAS': 'IRAS',
0088                     'Klinkerfues': 'Клинкерфус',
0089                     'Kohoutek': 'Когоутек',
0090                     'Lovas': 'Ловас',
0091                     'Mauvais': 'Мовэ',
0092                     'Mellish': 'Меллиш',
0093                     'Petersen': 'Петерсон',
0094                     'Siding Spring': 'Сайдинг-Спринг',
0095                     'Skjellerup': 'Скьеллеруп',
0096                     'Swift': 'Свифт',
0097                     'Yanaka': 'Янака',
0098                     'Brooks': 'Брукс',
0099                     'Galle': 'Галле',
0100                     'Skiff': 'Скифф',
0101                     'Wilson': 'Уилсон',
0102                     'Herschel': 'Гершель',
0103                     'Perrine': 'Перрайн',
0104                     'Kowalski': 'Ковальский',
0105                     'Garradd': 'Гаррэдд',
0106                     'Beshore': 'Бешор',
0107                     'Cardinal': 'Кардинал',
0108                     'Denning': 'Деннинг',
0109                     'Finsler': 'Финслер',
0110                     'Harrington': 'Харрингтон',
0111                     'Hartwig': 'Хартвиг',
0112                     'Holvorcem': 'Ольворсем',
0113                     'Humason': 'Хьюмасон',
0114                     'Hyakutake': 'Хякутакэ',
0115                     'Lagerkvist': 'Лагерквист',
0116                     'Larsen': 'Ларсен',
0117                     'Pajdusakova': 'Пайдушакова',
0118                     'Palomar': 'Паломарская обсерватория',
0119                     'Schaumasse': 'Шомасс',
0120                     'Schaeberle': 'Шеберле',
0121                     'Schwartz': 'Шварц',
0122                     'Ikeya': 'Икэя',
0123                     'Austin': 'Остин',
0124                     'de Vico': 'де Вико',
0125                     'Donati': 'Донати',
0126                     'Elenin': 'Еленин',
0127                     'Ferris': 'Феррис',
0128                     'Johnson': 'Джонсон',
0129                     'Metcalf': 'Меткалф',
0130                     'Montani': 'Монтани',
0131                     'Peltier': 'Пельтье',
0132                     'Respighi': 'Респиги',
0133                     'Tabur': 'Табур',
0134                     'Torres': 'Торрес',
0135                     'Wilk': 'Уилк',
0136                     'Bester': 'Бестер',
0137                     'Larson': 'Ларсон',
0138                     'Meier': 'Майер',
0139                     'Schweizer': 'Швейцер',
0140                     'Wirtanen': 'Виртанен',
0141                     'Bruhns': 'Брунс',
0142                     'Coggia': 'Коджа',
0143                     'Levy': 'Леви',
0144                     'La Sagra': 'Ла Сагра',
0145                     'Mrkos': 'Мркос',
0146                     'Skotti': 'Скотти',
0147                     'SWAN': 'SWAN',
0148                 }
0149                 if name in tr_name:
0150                     return '{} ({})'.format(code, tr_name[name])
0151                 else:
0152                     print('unknown: %s' % name)
0153 
0154         return None
0155 
0156     def process (self, msg, cat):
0157         new_msgstr = self.translate(msg)
0158         if new_msgstr is not None and (msg.fuzzy or msg.msgstr[0] != new_msgstr):
0159             msg.msgstr[0] = new_msgstr
0160             msg.unfuzzy()
0161             report_msg_content(msg, cat)
0162 
0163     def finalize (self):
0164         ""