Irez a kontenajo

Uzanto:Maksim/ngc

De Wikipedio
  • podg_st_ngc.py
# -*- coding: utf-8  -*-

# ftp://cdsarc.u-strasbg.fr/cats/VII/118/ngc2000.dat

import wikipedia, string, csv, sys, os, codecs
from atomobot_la2 import AtomobotLanguageRu
from tbl_sozv import WizzoBotSuhvezdie
from bib_tekst import *

lang = AtomobotLanguageRu()
suhv = WizzoBotSuhvezdie()

#print u"Od akého objektu mám začať? ";
#MIN = int( input() )
#print u"Pri akom objekte mám skončiť? ";
#MAX = int( input() )
MIN=1
MAX=7840

def vivod(b):
    wikipedia.output(b)
    otch.write(b)
    otch.flush()

def prev(j,min,max):
    if j <= min:
        return max
    else:
        return j-1
def next(j,min,max):
    if j >= max:
        return min
    else:
        return j+1

#en:Category:Nebular images
#http://www.astrosurf.com/cielextreme/page47F.html

imobj = {
 u'Herschel W.' : (u'Уильям Гершель',u'William Herschel'),
 u'Herschel J.' : (u'Джон Гершель','John Herschel'),
 u'Marth' : (u'', u'Albert Marth'),
 u'Swift L.' : (u'',u'Lewis A. Swift'),
 u'Stephan' : (u'',u'Édouard Jean-Marie Stephan'),
 u'd\'Arrest' : (u'Генрих Луи Д\'Арре',u'Heinrich Louis d\'Arrest'),
 u'Leavenworth' : (u'',u'Frank Leavenworth'), #LEAVENWORTH; Frank P.; ????-????; USA
 u'Parsons W.' : (u'Уильям Парсонс',u'William Parsons'), #William Parsons, 3rd Earl of Rosse
 u'Dunlop' : (u'',u'James Dunlop'),
 u'Tempel' : (u'Эрнст Вильгельм Леберехт Темпель',u'Ernst Wilhelm Leberecht Tempel'),
 u'Stone' : (u'',u'Ormond Stone'),
 u'Muller' : (u'',u'Frank Müller'), #MULLER [Müller]; Frank; ????-????; USA
 u'Bigourdan' : (u'',u'Guillaume Bigourdan'),
 u'Messier' : (u'Чарльз Мессье',u'Charles Messier'),
 u'Parsons L.' : (u'',u'Lawrence Parsons'), #Lawrence Parsons, 4th Earl of Rosse
 u'Copeland' : (u'',u'Ralph Copeland'),
 u'Common' : (u'-',u'-'),
 u'Swift E.' : (u'',u'Edward D. Swift'),
 u'Mechain' : (u'Пьер Мешен',u'Pierre Méchain'), # Pierre François André Méchain
 u'Lacaille' : (u'Никола Луи де Лакайль',u'Nicolas Louis de Lacaille'),
 u'Holden' : (u'',u'Edward Singleton Holden'),
 u'Barnard' : (u'Эдуард Эмерсон Барнард',u'Edward Emerson Barnard'),
 u'Struve W.' : (u'Василий Яковлевич Струве',u'Friedrich Georg Wilhelm Struve'),  #нем.
}


sh_=(u'',u'')
#sh_ga=(u'Галактика',u'Шаблон:Галактика 2')
sh_ga=(u'Галактика',u'Галактика 2')
sh_zvsk=(u'Звёздное скопление',u'Звёздное скопление')
sh_zv=(u'Звезда',u'Звезда')
sh_pltu=(u'Планетарная туманность',u'Планетарная туманность 2')
sh_ditu=(u'Диффузная туманность',u'Диффузная туманность 2')
sh_tjotu=(u'Тёмная туманность',u'Тёмная туманность')
sh_tu=(u'Туманность',u'Туманность')


typ = {
'gxy'   : (sh_ga,u'Галактика',u'Галактики',u''),
'GxyP'  : (sh_zvsk,u'Звёздная ассоциация',u'Звёздные ассоциации',u''),#u'hviezdna asociácia',
'*Grp'  : (sh_zvsk,u'Рассеянное скопление',u'Рассеянные скопления',u''),#u'otvorená hviezdokopa',
'OCL'   : (sh_zvsk,u'Рассеянное скопление',u'Рассеянные скопления',u''),#u'otvorená hviezdokopa',
'GCL'   : (sh_zvsk,u'Шаровое скопление',u'Шаровые скопления',u''),#u'guľová hviezdokopa',
'*'     : (sh_zv,u'Звезда',u'Звёзды',u''),#u'hviezda',
'*2'    : (sh_zv,u'Двойная звезда',u'Двойные звёзды',u''),#u'dvojhviezda',
'*3'    : (sh_zv,u'Тройная звезда',u'Тройные звёзды',u''),#u'trojhviezda',
'*4'    : (sh_zv,u'Четверная звезда',u'Четверные звёзды',u''),#u'štvorhviezda',
'*?'    : (sh_zv,u'Кратная звезда',u'Кратные звёзды',u''),#u'viacnásobná hviezda',
'PN'    : (sh_pltu,u'Планетарная туманность',u'Планетарные туманности',u''),#u'planetárna hmlovina',
'EN'    : (sh_ditu,u'Эмиссионная туманность',u'Эмиссионные туманности',u''),#u'emisná hmlovina',
'RN'    : (sh_ditu,u'Отражающая туманность',u'Отражающие туманности',u''),#u'reflexná hmlovina',
'DN'    : (sh_tjotu,u'Тёмная туманность',u'Тёмные туманности',u''),#u'tmavá hmlovina',
'RN+EN' : (sh_ditu,u'Отражающая туманность и эмиссионная туманность',u'Отражающие туманности',u'Эмиссионные туманности'),#u'reflexná hmlovina a emisná hmlovina',
'EN+RN' : (sh_ditu,u'Эмиссионная туманность и отражающая туманность',u'Эмиссионные туманности',u'Отражающие туманности'),#u'emisná hmlovina a reflexná hmlovina',
'EN+OCL': (sh_ditu,u'Эмиссионная туманность с рассеянным скоплением',u'Эмиссионные туманности',u'Рассеянные скопления'),#u'emisná hmlovina s otvorenou hviezdokopou',
'EN+*'  : (sh_ditu,u'Эмиссионная туманность со звездой',u'Эмиссионные туманности',u'Звёзды'),#u'emisná hmlovina s hviezdou',
'SNR'   : (sh_ditu,u'Остатки сверхновой',u'Остатки сверхновых',u''),#u'zvyšok supernovy',
'SNR?'  : (sh_tu,u'Туманность',u'Туманности',u''),#u'hmlovina',
'OCL+PN': (sh_zvsk,u'Рассеянное скопление с планетарной туманностью',u'Рассеянные скопления',u'Планетарные туманности'),#u'otvorená hviezdokopa a planetárna hmlovina',
'OCL+EN': (sh_zvsk,u'Рассеянное скопление с эмиссионной туманностью',u'Рассеянные скопления',u'Эмиссионные туманности'),#u'otvorená hviezdokopa s emisnou hmlovinou',
'OCL+RN': (sh_zvsk,u'Рассеянное скопление с отражающей туманностью',u'Рассеянные скопления',u'Отражающие туманности'),#u'otvorená hviezdokopa s reflexnou hmlovinou',
'*Cloud': (sh_tu,u'Туманность',u'Туманности',u''),#u'hmlovina',
'NF'    : (sh_,u'',u'',u''),#u'neexistujúci objekt'
}

def vytvor_clanok( udaje ):
    infobox = ((u'{{%(shabl)s |\n'+
#názov            = %(nazov)s |
#typ              = %(typ)s |
#rektascenzia     = %(rektascenzia)s |
#deklinácia       = %(deklinacia)s |
#zdanlivá jasnosť = %(vmag)s |
#súhvezdie        = %(suhv)s |
#obrázok          = Astro no image.png |
#epocha           = 2000.0 |
u'Название                  = %(nazov)s |\n'+
u'Обозначения               = %(obozn)s |\n'+
u'Тип                       = %(typ)s |\n'+
u'Прямое_восхождение        = %(rektascenzia)s |\n'+
u'Склонение                 = %(deklinacia)s |\n'+
u'Видимая_звёздная_величина = %(vmag)s |\n'+
u'Созвездие                 = %(suhv)s |\n'+
u'Эпоха                     = [[J2000.0]] |\n'+
u'Открыватель               = %(objavitel)s |\n'+
u'Дата_открытия             = %(datuma)s\n'+
u'}}\n') % udaje)
    clanok = (infobox + 
#'''%(nazov)s''' je %(typ)s v súhvezdí %(suhvezdie)s, ktorú objavil %(objavitel)s %(datuma)s.
u"'''%(nazov)s''' %(nazovdop)s— %(typc)s в созвездии [[%(suhv)s (созвездие)|%(suhv)s]].\n"+
u'%(temnob)s'+
u'\n== См. также ==\n\n'+
u'* [[Список объектов Мессье]]\n'+
u'* [[Новый общий каталог]]\n\n'+
u'%(dopnavig)s'+
#%(velkost)s
u'{{Навигатор NGC|'+
u'NGC %(prev4)s|'+
u'NGC %(prev3)s|'+
u'NGC %(prev2)s|'+
u'NGC %(prev)s|'+
u'NGC %(cislo)s|'+
u'NGC %(next)s|'+
u'NGC %(next2)s|'+
u'NGC %(next3)s|'+
u'NGC %(next4)s'+
u'}}\n\n'+

#{{astronomický výhonok}}

#== Pozri aj ==
#* [[Zoznam NGC objektov]]

#[[Kategória:NGC objekty|%(cislo)s]]
#u'[[Категория:%(typkat)s]]\n'+
u'[[Категория:Объекты NGC|%(cislo0)s]]\n%(katmes)s'+
u'[[Категория:%(suhv)s (созвездие)]]\n%(kat1)s%(kat2)s\n'+
u'%(ivien)s[[sk:NGC %(cislo)s]]\n'
) % udaje
#    if u"%(typ)s" % udaje == u"[[neexistujúci objekt]]":
#        clanok = u"#REDIRECT [[Zoznam NGC objektov]]"
#        wikipedia.output(u'ne %d'%udaje['cislo'])
#    site = wikipedia.getSite()
#    stranka = wikipedia.Page( site, ngc['nazov'] )
#    if stranka.exists() and (not stranka.isRedirectPage()):
#        povodny = stranka.get()
#        clanok = infobox + povodny
#    if (not stranka.isRedirectPage()):
#        stranka.put(clanok, u"vytvorenie NGC objektu podľa šablóny")
    return clanok


#fvh = wikipedia.argHandler(sys.argv[1], 'slov_iz_xml')
#reader = csv.reader(codecs.open("ngc.csv", 'rb', 'utf-8'), delimiter=u";")
reader=codecs.open("ngc.csv", 'rb', 'utf-8')

tblen={}
fpref=codecs.open("ngc-en.txt",'rb',encoding='utf-8')
for s in fpref.readlines():
    if ord(s[0]) == 65279:
        s=s[1:]
    s=ubr_nk_prob(s)
    tblen[s]=1
fpref.close()

tblm={}
fpref=codecs.open("ngc-m.txt",'rb',encoding='utf-8')
for s in fpref.readlines():
    if ord(s[0]) == 65279:
        s=s[1:]
    s=ubr_nk_prob(s)
    st=s.split(u'|')
    if len(st)==2:
        tblm[ubr_nk_prob(st[0])]=ubr_nk_prob(st[1])
fpref.close()


fi = wikipedia.argHandler(sys.argv[1], 'slov_iz_xml')
fvih= fi+u'.txt'
fotch = fi+u'-ot.txt'

f1=codecs.open(fvih, 'w', 'utf-8')
otch = codecs.open(fotch, 'w', 'utf-8')

j = -1
#reader.next()
tobj={}
for i1 in reader.readlines():
  i=i1.split(u';')
  j = j+1
  if (j >= MIN) and (j <= MAX):
#    wikipedia.output(u'%d'%j)
    ngc = {}
    if (i[3] != "-") and (i[3] != "*"):
        i[3] = int(i[3])
        datum_mes = lang.MONTH_NAME[ i[3] ]
        datuma_mes = lang.MONTH_NAME_GEN[ i[3] ]
    else:
        datum_mes = u""
    if i[4] != u"-":
        objav_den = i[4]
    else:
        objav_den = ''
    if i[2] != u"-":
        objav_rok = i[2]
    if (datum_mes != u"") and (objav_den != u""):
#        ngc['datum'] = u"[[%s. %s]] [[%s]]" % ( objav_den, datum_mes, objav_rok )
#        ngc['datuma'] = u"[[%s. %s|%s. %s]] [[%s]]" % ( objav_den, datum_mes, objav_den, datuma_mes, objav_rok )
        ngc['datum'] = u"[[%s %s]] [[%s]]" % ( objav_den, datuma_mes, objav_rok )
        ngc['datuma'] = ngc['datum']
    else:
        ngc['datum'] = u"[[%s]]" % ( objav_rok )
#        ngc['datuma'] = u"v roku [[%s]]" % ( objav_rok )
        ngc['datuma'] = ngc['datum']
#    ngc['nazov'] = u"NGC %s" % i[0]
#    ngc['cislo'] = u"%s" % i[0]
    ngc['nazov'] = u"NGC %d" % j
    ngc['cislo'] = u"%d" % j
    ngc['cislo0'] = u"%04d" % j
    if u"%d" % j!=i[0]:
        wikipedia.output(u'j!=i[0] %d'%j)

    obj = i[1]

    if tobj.has_key(obj):
        tobj[obj]+=1
    else:
        tobj[obj]=1
    iru=u''
    ila=u''
    if imobj.has_key(obj):
        (iru,ila)=imobj[obj]
    if iru!=u'':
        obj=iru
        if obj!=u'-':
            obj=u'[['+obj+u']]'
    elif ila!=u'':
        obj=u'<!-- '+ila+u' -->'
    else:
        obj=u'<!-- '+obj+u' -->'

    ngc['objavitel'] = obj

#    if u" " in ngc['objavitel']:
#        priezvisko, meno = ngc['objavitel'].split();
#        ngc['objavitel'] = u"[[%s %s]]" % (meno, priezvisko)
#    else:
#        ngc['objavitel'] = u"[[%s]]" % ngc['objavitel']
    ngc['suhv'] = u"%s" % suhv.suhvezdie_ru[i[18]]
#    ngc['typ'] = "[[%s]]" % typ[i[19]]
    (sh,to,kat1,kat2)=typ[i[19]]
    (shosn,shabl)=sh
    if shabl==u'':
        wikipedia.output(u'ne %d'%j)
        continue
    if to==shosn:
        ngc['typ']=u''
    else:
        ngc['typ']=to
    ngc['typc']=to.lower()
    if kat1!=u'':
        kat1=u'[[Категория:%s]]\n'%kat1
    ngc['kat1']=kat1
    if kat2!=u'':
        kat2=u'[[Категория:%s]]\n'%kat2
    ngc['kat2']=kat2

    ngc['typkat']=to
    ngc['shabl']=shabl
    ngc['rektascenzia'] = u"%sh %sm %ss" % (i[10], i[11], i[12])
    ngc['deklinacia'] = u"%s%s° %s' %s\"" % (i[13], i[14], i[15], i[16])
    ngc['vmag'] = i[17]
    if ngc['vmag'] != "-":
        ngc['velkost'] = u"""
Jej zdanlivá [[hviezdna veľkosť]] je %s.
        """ % ngc['vmag']
    else:
        ngc['velkost'] = ""
        ngc['vmag'] = u''
    pr=prev(j,1,7840)
    pr2=prev(pr,1,7840)
    pr3=prev(pr2,1,7840)
    pr4=prev(pr3,1,7840)
    ne=next(j,1,7840)
    ne2=next(ne,1,7840)
    ne3=next(ne2,1,7840)
    ne4=next(ne3,1,7840)

    ngc['prev'] = pr
    ngc['prev2'] = pr2
    ngc['prev3'] = pr3
    ngc['prev4'] = pr4
    ngc['next'] = ne
    ngc['next2'] = ne2
    ngc['next3'] = ne3
    ngc['next4'] = ne4

    ivien=u''
    if tblen.has_key(ngc['nazov']):
        ivien=u'[[en:%s]]\n'%ngc['nazov']
    ngc['ivien']=ivien

    clanok=u''
    sobozn=i[26:28]

    ngc['dopnavig'] = u''
    ngc['katmes'] = u''
    messob2=u''
    if tblm.has_key(ngc['nazov']):
        b=u'%s\n#REDIRECT [[%s]]\n========\n'%(ngc['nazov'],tblm[ngc['nazov']])
        f1.write(b)
        f1.flush()
        sobozn.append(ngc['nazov'])
        ngc['nazov']=tblm[ngc['nazov']]

        ngc['dopnavig'] = u'{{Каталог Мессье}}\n'
        ngc['katmes'] = u'[[Категория:Объекты Мессье]]\n'
        jm=int(ngc['nazov'][1:])
        messob2=u"'''Messier %d''', '''Мессье %d'''"%(jm,jm)

#    teob=u''
    teob=u"'''%s'''"%ngc['nazov']
    tedopob=u''
    ndopob=0
    tengcob=u''
    nngcob=0
    if messob2!=u'':
        teob+=u', '+messob2
    if ngc['nazov'].startswith(u'NGC '):
#        if tengcob!=u'':
#            tengcob+=u', '
        tengcob+=u"'''%s'''"%ngc['nazov']
        nngcob+=1

    for ob in sobozn:
        if ob==u'-':
            continue
        if ob.startswith(u'NGC '):
            j1=int(ob[4:])
            if j1<j:
                clanok = u"#REDIRECT [[NGC %d]]"%j1
                break
            if tengcob!=u'':
                tengcob+=u', '
            tengcob+=u"'''%s'''"%ob
            nngcob+=1
#        if teob==u'':
#            teob=u"'''%s'''"%ngc['nazov']
        teob+=u', '
        teob+=u"'''%s'''"%ob
        if tedopob!=u'':
            tedopob+=u', '
        tedopob+=u"'''%s'''"%ob
        ndopob+=1
    ngc['obozn'] = teob

    if ndopob==1:
        tedopob=u'другое обозначение — %s'%tedopob
    elif ndopob>1:
        tedopob=u'другие обозначения — %s'%tedopob

    nazovdop=u''
    if messob2!=u'' or tedopob!=u'':
        if messob2!=u'' and tedopob!=u'':
            nazovdop=u'(%s, %s) '%(messob2,tedopob)
        else:
            nazovdop=u'(%s%s) '%(messob2,tedopob)

    ngc['nazovdop']=nazovdop

    temnob=u''
    if nngcob>1:
        temnob=((u"\nЭтот объект был занесён в [[новый общий каталог]] "+
                 u"несколько раз, с обозначениями %s.\n")%tengcob)
    ngc['temnob'] = temnob

    if clanok==u'':
        udaje = {}
        udaje.update(ngc)
        clanok=vytvor_clanok( udaje )

    b=((u'%s\n%s\n========\n')%(ngc['nazov'],clanok))
    f1.write(b)
    f1.flush()


sobj=[]
for t, n in tobj.iteritems():
    sobj.append((n,t))

sobj.sort(reverse=True)
for n, t in sobj:
#    vivod(u'%d %s\n'%(n,t))
    pass
for n, t in sobj:
#    vivod(u' u\'%s\' : u\'\',\n'%t)
    pass

for t, n in suhv.suhvezdie_ru.iteritems():
    b=((u'Категория:%s (созвездие)\n'+
        u'{{catmain}}\n\n[[Категория:Созвездия]]\n\n'+
        u'[[sk:Kategória:Súhvezdie %s]]\n\n'+
        u'========\n')%(n,suhv.suhvezdie_sk[t]))
    f1.write(b)
    f1.flush()

* tbl_sozv.py

# -*- coding: utf-8  -*-

class WizzoBotSuhvezdie:
    suhvezdie_ru = {
        u'AND': u'Андромеда',
        u'GEM': u'Близнецы',
        u'UMA': u'Большая Медведица',
        u'CMA': u'Большой Пёс',
        u'LIB': u'Весы',
        u'AQR': u'Водолей',
        u'AUR': u'Возничий',
        u'LUP': u'Волк',
        u'BOO': u'Волопас',
        u'COM': u'Волосы Вероники',
        u'CRV': u'Ворон',
        u'HER': u'Геркулес',
        u'HYA': u'Гидра',
        u'COL': u'Голубь',
        u'CVN': u'Гончие Псы',
        u'VIR': u'Дева',
        u'DEL': u'Дельфин',
        u'DRA': u'Дракон',
        u'MON': u'Единорог',
        u'ARA': u'Жертвенник',
        u'PIC': u'Живописец',
        u'CAM': u'Жираф',
        u'GRU': u'Журавль',
        u'LEP': u'Заяц',
        u'OPH': u'Змееносец',
        u'SER': u'Змея',
        u'DOR': u'Золотая Рыба',
        u'IND': u'Индеец',
        u'CAS': u'Кассиопея',
        u'CAR': u'Киль',
        u'CET': u'Кит',
        u'CAP': u'Козерог',
        u'PYX': u'Компас',
        u'PUP': u'Корма',
        u'CYG': u'Лебедь',
        u'LEO': u'Лев',
        u'VOL': u'Летучая Рыба',
        u'LYR': u'Лира',
        u'VUL': u'Лисичка',
        u'UMI': u'Малая Медведица',
        u'EQU': u'Малый Конь',
        u'LMI': u'Малый Лев',
        u'CMI': u'Малый Пёс',
        u'MIC': u'Микроскоп',
        u'MUS': u'Муха',
        u'ANT': u'Насос',
        u'NOR': u'Наугольник',
        u'ARI': u'Овен',
        u'OCT': u'Октант',
        u'AQL': u'Орёл',
        u'ORI': u'Орион',
        u'PAV': u'Павлин',
        u'VEL': u'Паруса',
        u'PEG': u'Пегас',
        u'PER': u'Персей',
        u'FOR': u'Печь',
        u'APS': u'Райская Птица',
        u'CNC': u'Рак',
        u'CAE': u'Резец',
        u'PSC': u'Рыбы',
        u'LYN': u'Рысь',
        u'CRB': u'Северная Корона',
        u'SEX': u'Секстант',
        u'RET': u'Сетка',
        u'SCO': u'Скорпион',
        u'SCU': u'Скульптор',
        u'SCL': u'Скульптор',
        u'MEN': u'Столовая Гора',
        u'SGE': u'Стрела',
        u'SGR': u'Стрелец',
        u'TEL': u'Телескоп',
        u'TAU': u'Телец',
        u'TRI': u'Треугольник',
        u'TUC': u'Тукан',
        u'PHE': u'Феникс',
        u'CHA': u'Хамелеон',
        u'CEN': u'Центавр',
        u'CEP': u'Цефей',
        u'CIR': u'Циркуль',
        u'HOR': u'Часы',
        u'CRT': u'Чаша',
        u'SCT': u'Щит',
        u'ERI': u'Эридан',
        u'HYI': u'Южная Гидра',
        u'CRA': u'Южная Корона',
        u'PSA': u'Южная Рыба',
        u'CRU': u'Южный Крест',
        u'TRA': u'Южный Треугольник',
        u'LAC': u'Ящерица',
    }

    suhvezdie_sk = {
	'AND': u'Androméda',
	'ANT': u'Výveva',
	'APS': u'Rajka',
	'AQR': u'Vodnár',
	'AQL': u'Orol',
	'ARA': u'Oltár',
	'ARI': u'Baran',
	'AUR': u'Povozník',
	'BOO': u'Pastier',
	'CAE': u'Rydlo',
	'CAM': u'Žirafa',
	'CNC': u'Rak',
	'CVN': u'Poľovné psy',
	'CMA': u'Veľký pes',
	'CMI': u'Malý pes',
	'CAP': u'Kozorožec',
	'CAR': u'Kýl',
	'CAS': u'Kasiopeja',
	'CEN': u'Kentaur',
	'CEP': u'Cefeus',
	'CET': u'Veľryba',
	'CHA': u'Chameleón',
	'CIR': u'Kružidlo',
	'COL': u'Holubica',
	'COM': u'Vlasy Bereniky',
	'CRA': u'Južná koruna',
	'CRB': u'Severná koruna',
	'CRV': u'Havran',
	'CRT': u'Pohár',
	'CRU': u'Južný kríž',
	'CYG': u'Labuť',
	'DEL': u'Delfín',
	'DOR': u'Mečiar',
	'DRA': u'Drak',
	'EQU': u'Koník',
	'ERI': u'Eridanus',
	'FOR': u'Pec',
	'GEM': u'Blíženci',
	'GRU': u'Žeriav',
	'HER': u'Herkules',
	'HOR': u'Hodiny',
	'HYA': u'Hydra',
	'HYI': u'Vodný had',
	'IND': u'Indián',
	'LAC': u'Jašterica',
	'LEO': u'Lev',
	'LMI': u'Malý lev',
	'LEP': u'Zajac',
	'LIB': u'Váhy',
	'LUP': u'Vlk',
	'LYN': u'Rys',
	'LYR': u'Lýra',
	'MEN': u'Stolový vrch',
	'MIC': u'Mikroskop',
	'MON': u'Jednorožec',
	'MUS': u'Mucha',
	'NOR': u'Pravítko',
	'OCT': u'Oktant',
	'OPH': u'Hadonos',
	'ORI': u'Orión',
	'PAV': u'Páv',
	'PEG': u'Pegas',
	'PER': u'Perzeus',
	'PHE': u'Fénix',
	'PIC': u'Maliar',
	'PSC': u'Ryby',
	'PSA': u'Južná ryba',
	'PUP': u'Korma',
	'PYX': u'Kompas',
	'RET': u'Sieť',
	'SGE': u'Šíp',
	'SGR': u'Strelec',
	'SCO': u'Škorpión',
	'SCL': u'Sochár',
	'SCU': u'Sochár',
	'SCT': u'Štít',
	'SER': u'Had',
	'SEX': u'Sextant',
	'TAU': u'Býk',
	'TEL': u'Ďalekohľad',
	'TRI': u'Trojuholník',
	'TRA': u'Južný trojuholník',
	'TUC': u'Tukan',
	'UMA': u'Veľký voz',
	'UMI': u'Malý voz',
	'VEL': u'Plachty',
	'VIR': u'Panna',
	'VOL': u'Lietajúca ryba',
	'VUL': u'Líška'
    }

* atomobot_la2.py

# -*- coding: utf-8  -*-


class AtomobotLanguageError( Exception ):
    pass



class LanguageText( object ):

    def __init__( self, lang, text ):
        self.lang = lang
        self.text = text
        self.decomposed = tuple( self.lang.decompose( text ) )


    def __str__( self ):
        return self.text


    def __repr__( self ):
        return "LanguageText('%s', %s)" % ( self.lang.code, repr( self.text ) )


    def __hash__( self ):
        return hash( self.decomposed )


    def __cmp__( self, other ):
        if isinstance( other, LanguageText ):
            return cmp( self.decomposed, other.decomposed )
        elif isinstance( other, basestring ):
            otherlangtext = LanguageText( self.lang, other )
            return cmp( self, otherlangtext )
        else:
            raise TypeError()



class AtomobotLanguage( object ):

    plurals = {}


    def __init__( self ):
        self.number = 0
        self.letters = [ u'?' ]
        self.number_by_letter = {}
        self.cgroups_by_first = {}
        self.letters_by_first = {}
        self.ch_types = {}


    def new_number( self ):
        self.number += 1
        return self.number


    def plural( self, number, name ):
        forms = self.plurals.get( name, None )
        if not forms:
            return name
        number = abs( number )
        if number >= 5:
            return forms[5]
        return forms[ number ]


    def add_letter( self, letter, ch_type='letter' ):
        number = self.new_number()
        self.letters.append( letter )
        self.number_by_letter[ letter ] = number
        cgroups = self.cgroups_by_first.setdefault( letter[0], {} )
        samelets = cgroups.setdefault( len( letter ), [] )
        samelets.append( letter )
        self.ch_types.setdefault( ch_type, set() ).add( letter )


    def tidy_letters( self ):
        for letter, cgroups in self.cgroups_by_first.iteritems():
            lst = self.letters_by_first.setdefault( letter, [] )
            for size in reversed( sorted( cgroups.keys() ) ):
                lst.extend( cgroups[ size ] )


    def decompose( self, text ):
        text = text.upper()
        decomposed = []
        pos = 0
        while True:
            if pos >= len( text ):
                break
            ch = text[ pos ]
            firstlets = self.letters_by_first.get( ch, None )
            if not firstlets:
                decomposed.append( 0 )
                pos += 1
                continue
            for firstlet in firstlets:
                if pos + len( firstlet ) > len( text ):
                    continue
                cpos = 1
                mismatched = False
                for fl in firstlet[ 1: ]:
                    if fl != text[ pos + cpos ]:
                        mismatched = True
                        break
                if mismatched:
                    continue
                decomposed.append( self.number_by_letter[ firstlet ] )
                pos += len( firstlet )
                break
        return decomposed


    def compose( self, decotext ):
        return u''.join( [ self.letters[ number ] for number in decotext ] )


    def compare_ci( self, text1, text2 ):
        dec1 = self.decompose( text1 )
        dec2 = self.decompose( text2 )
        return cmp( dec1, dec2 )




class AtomobotLanguageRu( AtomobotLanguage ):

    code = 'ru'

    plurals = {
        'článok': ( u'článkov', u'článok', u'články', u'články', u'články', u'článkov' ),
        'kategória': ( u'kategórií', u'kategória', u'kategórie', u'kategórie', u'kategórie', u'kategórií' ),
        }

    TEXT_UPDATE = u'Atomobot :: aktualizácia'

    MONTH_NAME = {
#        1: u'január', 2: u'február', 3: u'marec', 4: u'apríl', 5: u'máj', 6: u'jún', 7: u'júl',
#        8: u'august', 9: u'september', 10: u'október', 11: u'november', 12: u'december' }
        1: u'январь', 2: u'февраль', 3: u'март', 4: u'апрель', 5: u'май', 6: u'июнь', 7: u'июль',
        8: u'август', 9: u'сентябрь', 10: u'октябрь', 11: u'ноябрь', 12: u'декабрь' }

    MONTH_NAME_GEN = {
#        1: u'januára', 2: u'februára', 3: u'marca', 4: u'apríla', 5: u'mája', 6: u'júna', 7: u'júla',
#        8: u'augusta', 9: u'septembra', 10: u'októbra', 11: u'novembra', 12: u'decembra' }
        1: u'января', 2: u'февраля', 3: u'марта', 4: u'апреля', 5: u'мая', 6: u'июня', 7: u'июля',
        8: u'августа', 9: u'сентября', 10: u'октября', 11: u'ноября', 12: u'декабря' }
    
    
    def __init__( self ):
        super( AtomobotLanguageRu, self ).__init__()
        self.init_collated_letters()
        self.tidy_letters()


    def format_number( self, number, places=0 ):
        minus = False
        number = float( number )
        formatstr = '%%.%sf' % places
        numberstr = formatstr % number
        parts = numberstr.split( '.', 1 )
        if len( parts ) > 1:
            pre, post = parts
        else:
            pre = parts[0]
            post = ''
        if pre.startswith( '-' ):
            pre = pre[1:]
            minus = True
        final_number = []
        grouppos = 0
        for digit in reversed( pre ):
            if grouppos >= 3:
                final_number.insert( 0, ' ' )
                grouppos = 0
            final_number.insert( 0, digit )
            grouppos += 1
        if minus:
            final_number.insert( 0, '-' )
        final_str = ''.join( final_number )
        if post:
            final_str += ',' + post
        return final_str


    def init_collated_letters( self ):
        self.add_letter( u' ', 'symbol' )
        self.add_letter( u'!', 'symbol' )
        self.add_letter( u'"', 'symbol' )
        self.add_letter( u'#', 'symbol' )
        self.add_letter( u'$', 'symbol' )
        self.add_letter( u'.', 'symbol' )
        self.add_letter( u',', 'symbol' )
        self.add_letter( u'-', 'symbol' )
        self.add_letter( u'(', 'symbol' )
        self.add_letter( u')', 'symbol' )
        self.add_letter( u'0', 'number' )
        self.add_letter( u'1', 'number' )
        self.add_letter( u'2', 'number' )
        self.add_letter( u'3', 'number' )
        self.add_letter( u'4', 'number' )
        self.add_letter( u'5', 'number' )
        self.add_letter( u'6', 'number' )
        self.add_letter( u'7', 'number' )
        self.add_letter( u'8', 'number' )
        self.add_letter( u'9', 'number' )
        self.add_letter( u'A' )
        self.add_letter( u'Á' )
        self.add_letter( u'Â' )
        self.add_letter( u'Ä' )
        self.add_letter( u'Å' )
        self.add_letter( u'Æ' )
        self.add_letter( u'B' )
        self.add_letter( u'C' )
        self.add_letter( u'Ć' )
        self.add_letter( u'Č' )
        self.add_letter( u'Ç' )
        self.add_letter( u'D' )
        self.add_letter( u'Ď' )
        self.add_letter( u'DZ' )
        self.add_letter( u'DŽ' )
        self.add_letter( u'Ð' )
        self.add_letter( u'E' )
        self.add_letter( u'É' )
        self.add_letter( u'Ě' )
        self.add_letter( u'Ę' )
        self.add_letter( u'F' )
        self.add_letter( u'G' )
        self.add_letter( u'H' )
        self.add_letter( u'CH' )
        self.add_letter( u'I' )
        self.add_letter( u'Ì' )
        self.add_letter( u'Í' )
        self.add_letter( u'Î' )
        self.add_letter( u'Ï' )
        self.add_letter( u'Į' )
        self.add_letter( u'J' )
        self.add_letter( u'K' )
        self.add_letter( u'L' )
        self.add_letter( u'Ĺ' )
        self.add_letter( u'Ľ' )
        self.add_letter( u'Ł' )
        self.add_letter( u'M' )
        self.add_letter( u'N' )
        self.add_letter( u'Ń' )
        self.add_letter( u'Ň' )
        self.add_letter( u'Ñ' )
        self.add_letter( u'O' )
        self.add_letter( u'Ó' )
        self.add_letter( u'Ô' )
        self.add_letter( u'Ö' )
        self.add_letter( u'Ő' )
        self.add_letter( u'Œ' )
        self.add_letter( u'Ø' )
        self.add_letter( u'P' )
        self.add_letter( u'Q' )
        self.add_letter( u'R' )
        self.add_letter( u'Ŕ' )
        self.add_letter( u'Ř' )
        self.add_letter( u'S' )
        self.add_letter( u'Ś' )
        self.add_letter( u'Š' )
        self.add_letter( u'Ş' )
        self.add_letter( u'T' )
        self.add_letter( u'Ť' )
        self.add_letter( u'U' )
        self.add_letter( u'Ú' )
        self.add_letter( u'Ů' )
        self.add_letter( u'Ü' )
        self.add_letter( u'Ű' )
        self.add_letter( u'V' )
        self.add_letter( u'W' )
        self.add_letter( u'X' )
        self.add_letter( u'Y' )
        self.add_letter( u'Ý' )
        self.add_letter( u'Z' )
        self.add_letter( u'Ź' )
        self.add_letter( u'Ž' )


* NGC-en.txt

NGC 1
NGC 1039
NGC 104
NGC 1049
NGC 1068
NGC 1097
NGC 1128
NGC 1156
NGC 1232
NGC 1232A
NGC 1275
NGC 1300
NGC 1300 galaxy
NGC 1309
NGC 1316
NGC 1365
NGC 1427
NGC 1435
NGC 147
NGC 1499
NGC 1502
NGC 1512
NGC 1514
NGC 1531
NGC 1531 and NGC 1532
NGC 1532
NGC 1559
NGC 1569
NGC 1637
NGC 17
NGC 1705
NGC 1818
NGC 185
NGC 1850
NGC 1872
NGC 188
NGC 1904
NGC 1912
NGC 1952
NGC 1960
NGC 1973, NGC 1975 and NGC 1977
NGC 1976
NGC 1982
NGC 1999
NGC 2
NGC 205
NGC 206
NGC 2068
NGC 2070
NGC 2080
NGC 2099
NGC 2158
NGC 2168
NGC 2169
NGC 2175
NGC 2204
NGC 2207
NGC 2207 and IC 2163
NGC 221
NGC 2237
NGC 224
NGC 225
NGC 2264
NGC 2287
NGC 2323
NGC 2346
NGC 2349
NGC 2360
NGC 2362
NGC 2392
NGC 2403
NGC 2419
NGC 2422
NGC 2437
NGC 2438
NGC 2440
NGC 2442
NGC 2447
NGC 2451
NGC 246
NGC 2477
NGC 2516
NGC 253
NGC 2541
NGC 2546
NGC 2547
NGC 2548
NGC 2632
NGC 2682
NGC 2683
NGC 2715
NGC 2736
NGC 2787
NGC 281
NGC 2841
NGC 2903
NGC 2915
NGC 292
NGC 2976
NGC 2997
NGC 3
NGC 300
NGC 3031
NGC 3034
NGC 3054
NGC 3077
NGC 3079
NGC 3109
NGC 3115
NGC 3132
NGC 3180
NGC 3184
NGC 3226
NGC 3227
NGC 3310
NGC 3314
NGC 3351
NGC 3368
NGC 3370
NGC 3372
NGC 3379
NGC 3384
NGC 3486
NGC 3521
NGC 3532
NGC 3556
NGC 3587
NGC 3596
NGC 3603
NGC 3623
NGC 3627
NGC 3628
NGC 3690
NGC 3766
NGC 381
NGC 3877
NGC 3949
NGC 3953
NGC 3982
NGC 3992
NGC 40
NGC 4013
NGC 4027
NGC 4038
NGC 4038 group of galaxies
NGC 4039
NGC 404
NGC 4088
NGC 4192
NGC 4216
NGC 4254
NGC 4258
NGC 4303
NGC 4314
NGC 4321
NGC 4374
NGC 4382
NGC 4395
NGC 4406
NGC 4414
NGC 4435
NGC 4438
NGC 4463
NGC 4472
NGC 4486
NGC 4501
NGC 4526
NGC 4548
NGC 4552
NGC 4555
NGC 4565
NGC 4567
NGC 4567 and NGC 4568
NGC 4568
NGC 4569
NGC 457
NGC 4579
NGC 4590
NGC 4594
NGC 4621
NGC 4631
NGC 4631 group of galaxies
NGC 4649
NGC 4656
NGC 4656/7
NGC 4656 and NGC 4657
NGC 4657
NGC 4676
NGC 47
NGC 4725
NGC 4736
NGC 4755
NGC 4826
NGC 4833
NGC 4881
NGC 4945
NGC 5024
NGC 5055
NGC 5078
NGC 5090
NGC 5090 and NGC 5091
NGC 5091
NGC 5102
NGC 5128
NGC 5128 Group
NGC 5128 group
NGC 5139
NGC 514
NGC 5164
NGC 5189
NGC 5194
NGC 5195
NGC 520
NGC 5236
NGC 5253
NGC 5272
NGC 5408
NGC 5457
NGC 55
NGC 5548
NGC 56
NGC 57
NGC 58
NGC 581
NGC 5866
NGC 5866 group
NGC 5904
NGC 5921
NGC 595
NGC 598
NGC 604
NGC 6093
NGC 6121
NGC 6152
NGC 6171
NGC 6205
NGC 6218
NGC 6231
NGC 6240
NGC 6254
NGC 6266
NGC 6273
NGC 628
NGC 6302
NGC 6333
NGC 6341
NGC 6397
NGC 6402
NGC 6405
NGC 6475
NGC 6494
NGC 650
NGC 651
NGC 6514
NGC 6523
NGC 6531
NGC 6537
NGC 6543
NGC 659
NGC 6603
NGC 6611
NGC 6613
NGC 6618
NGC 6626
NGC 663
NGC 6633
NGC 6637
NGC 6656
NGC 6681
NGC 6694
NGC 6705
NGC 6712
NGC 6715
NGC 6720
NGC 6744
NGC 6745
NGC 6751
NGC 6779
NGC 6781
NGC 6791
NGC 6809
NGC 6822
NGC 6838
NGC 6853
NGC 6864
NGC 6872
NGC 6872 and IC 4970
NGC 6888
NGC 6913
NGC 6946
NGC 6981
NGC 6994
NGC 7000
NGC 7009
NGC 7027
NGC 7078
NGC 7089
NGC 7092
NGC 7099
NGC 7129
NGC 7217
NGC 7293
NGC 7318
NGC 7318A
NGC 7318B
NGC 7320
NGC 7331
NGC 7380
NGC 7479
NGC 7510
NGC 752
NGC 7654
NGC 771
NGC 772
NGC 7742
NGC 7752
NGC 7752 and NGC 7753
NGC 7753
NGC 7789
NGC 7793
NGC 7814
NGC 869
NGC 884
NGC 891

* ngc-m.txt

NGC 1952 |M1 
NGC 7089 |M2 
NGC 5272 |M3 
NGC 6121 |M4 
NGC 5904 |M5 
NGC 6405 |M6 
NGC 6475 |M7 
NGC 6523 |M8 
NGC 6333 |M9 
NGC 6254 |M10 
NGC 6705 |M11 
NGC 6218 |M12 
NGC 6205 |M13 
NGC 6402 |M14 
NGC 7078 |M15 
NGC 6611 |M16 
NGC 6618 |M17 
NGC 6613 |M18 
NGC 6273 |M19 
NGC 6514 |M20 
NGC 6531 |M21 
NGC 6656 |M22 
NGC 6494 |M23 
NGC 6694 |M26 
NGC 6853 |M27 
NGC 6626 |M28 
NGC 6913 |M29 
NGC 7099 |M30 
NGC 224 |M31 
NGC 221 |M32 
NGC 598 |M33 
NGC 1039 |M34 
NGC 2168 |M35 
NGC 1960 |M36 
NGC 2099 |M37 
NGC 1912 |M38 
NGC 7092 |M39 
NGC 2287 |M41 
NGC 1976 |M42 
NGC 1982 |M43 
NGC 2632 |M44 
NGC 2437 |M46 
NGC 2422 |M47 
NGC 2548 |M48 
NGC 4472 |M49 
NGC 2323 |M50 
NGC 7654 |M52 
NGC 5024 |M53 
NGC 6715 |M54 
NGC 6809 |M55 
NGC 6779 |M56 
NGC 6720 |M57 
NGC 4579 |M58 
NGC 4621 |M59 
NGC 4649 |M60 
NGC 4303 |M61 
NGC 6266 |M62 
NGC 5055 |M63 
NGC 4826 |M64 
NGC 3623 |M65 
NGC 3627 |M66 
NGC 2682 |M67 
NGC 4590 |M68 
NGC 6637 |M69 
NGC 6681 |M70 
NGC 6838 |M71 
NGC 6981 |M72 
NGC 6994 |M73 
NGC 628 |M74 
NGC 6864 |M75 
NGC 1068 |M77 
NGC 2068 |M78 
NGC 1904 |M79 
NGC 6093 |M80 
NGC 3031 |M81 
NGC 3034 |M82 
NGC 5236 |M83 
NGC 4374 |M84 
NGC 4382 |M85 
NGC 4406 |M86 
NGC 4486 |M87 
NGC 4501 |M88 
NGC 4552 |M89 
NGC 4569 |M90 
NGC 4548 |M91 
NGC 6341 |M92 
NGC 2447 |M93 
NGC 4736 |M94 
NGC 3351 |M95 
NGC 3368 |M96 
NGC 3587 |M97 
NGC 4192 |M98 
NGC 4254 |M99 
NGC 4321 |M100 
NGC 5457 |M101 
NGC 581 |M103 
NGC 4594 |M104 
NGC 3379 |M105 
NGC 4258 |M106 
NGC 6171 |M107 
NGC 3556 |M108 
NGC 3992 |M109 
NGC 205 |M110 

* sh_ru_kosm.txt

Шаблон:Галактика 2
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #FFFFC0;" |<small>[[Галактика]]</small>
| align="center" |<small>[[:Категория:Галактики|Список галактик]]</small>
|- 
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #FFFFC0;" colspan="2" | История исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! colspan="2" style="background-color: #FFFFC0; text-align: center;" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{epoch}}})</small>
|-
| '''[[Последовательность Хаббла|Тип]]'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|- 
| '''[[Красное смещение]]'''
| {{{z|?}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]]''' <small>(V)</small>
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимый размер''' <small>(V)</small>
| {{{Видимый_размер|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
| colspan="2" style="background-color: #FFFFC0; text-align: center;" | Физические характеристики
|-
| '''[[Радиус]]'''
| {{{Радиус|}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина|}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Планетарная туманность 2
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #a0d8a0;" |<small>[[Планетарная туманность]]</small>
| align="center" |<small>[[:Категория:Планетарные туманности|Список туманностей]]</small>
|-
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #a0d8a0;" colspan="2" | История Исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! style="background-color: #a0d8a0;" colspan="2" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{Эпоха}}})</small>
|-
| '''Тип'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]] <small>(V)</small>'''
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимые размеры <small>(V)</small>'''
| {{{Видимые_размеры|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
! style="background-color: #a0d8a0;" colspan="2" | Физические характеристики
|-
| '''[[Радиус]]'''
| {{{Радиус|}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина|}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Диффузная туманность 2
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #FFb8b0;" |<small>[[Диффузная туманность]]</small>
| align="center" |<small>[[:Категория:Диффузные туманности|Список туманностей]]</small>
|-
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #FFb8b0;" colspan="2" | История исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! style="background-color: #FFb8b0;" colspan="2" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{Эпоха}}})</small>
|-
| '''Тип'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]] <small>(V)</small>'''
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимые размеры <small>(V)</small>'''
| {{{Видимые_размеры|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
! style="background-color: #FFb8b0;" colspan="2" | Физические характеристики
|-
| '''[[Радиус]]'''
| {{{Радиус}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Тёмная туманность
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #c0c0c0; color:white;" |<small>[[Темная туманность]]</small>
| align="center" |<small>[[:Категория:Тёмные туманности|Список туманностей]]</small>
|-
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #c0c0c0;" colspan="2" | История Исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! style="background-color: #c0c0c0;" colspan="2" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{Эпоха}}})</small>
|-
| '''Тип'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]] <small>(V)</small>'''
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимые размеры <small>(V)</small>'''
| {{{Видимые_размеры|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
! style="background-color: #c0c0c0;" colspan="2" | Физические характеристики
|-
| '''[[Радиус]]'''
| {{{Радиус}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Звёздное скопление
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #FFFFC0; color:white;" |<small>[[Звёздное скопление]]</small>
| align="center" |<small>[[:Категория:Звёздные скопления|Список скоплений]]</small>
|-
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #FFFFC0;" colspan="2" | История Исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! style="background-color: #FFFFC0;" colspan="2" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{Эпоха}}})</small>
|-
| '''Тип'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]] <small>(V)</small>'''
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимые размеры <small>(V)</small>'''
| {{{Видимые_размеры|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
! style="background-color: #FFFFC0;" colspan="2" | Физические характеристики
|-
| '''[[Масса]]'''
| {{{Масса|}}}
|-
| '''[[Радиус]]'''
| {{{Радиус|}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина|}}}
|-
| '''Возраст'''
| {{{Возраст|}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Звезда
{| class="infobox" style="border: 1px solid #999; border-right-width: 2px; border-bottom-width: 2px;"
|+ '''{{{Название}}}'''
|-
! style="background-color: #FFFFC0; color:white;" |<small>[[Звезда]]</small>
| align="center" |<small>[[:Категория:Звёзды|Список звёзд]]</small>
|-
| colspan="2" align="center" | {{qif
|test={{{Изображение|}}}
|then=[[Изображение:{{{Изображение}}}|250px|center|{{{Описание|{{{Название}}}}}}]]   }}
|-
! style="background-color: #FFFFC0;" colspan="2" | История Исследования
|-
| '''Открыватель'''
| {{{Открыватель|}}}
|-
| '''Дата открытия'''
| {{{Дата_открытия|}}}
|-
| '''Обозначения'''
| {{{Обозначения|}}}
|-
! style="background-color: #FFFFC0;" colspan="2" | Наблюдательные данные<br/><small>([[Эпоха (астрономия)|Эпоха]] {{{Эпоха}}})</small>
|-
| '''Тип'''
| {{{Тип|}}}
|-
| '''[[Системы небесных координат|Прямое восхождение]]'''
| {{{Прямое_восхождение|}}}
|-
| '''[[Системы небесных координат|Склонение]]'''
| {{{Склонение|}}}
|-
| '''Расстояние'''
| {{{Расстояние|}}}
|-
| '''[[Видимая звёздная величина]] <small>(V)</small>'''
| {{{Видимая_звёздная_величина|}}}
|-
| '''Видимые размеры <small>(V)</small>'''
| {{{Видимые_размеры|}}}
|-
| '''[[Созвездие]]'''
| [[{{{Созвездие}}} (созвездие)|{{{Созвездие|}}}]]
|-
! style="background-color: #FFFFC0;" colspan="2" | Физические характеристики
|-
| '''[[Масса]]'''
| {{{Масса|}}}
|-
| '''[[Радиус]]'''
| {{{Радиус|}}}
|-
| '''[[Абсолютная звёздная величина]] <small>(V)</small>'''
| {{{Абсолютная_звёздная_величина|}}}
|-
| '''Возраст'''
| {{{Возраст|}}}
|-
| '''Свойства'''
| {{{Свойства|}}}
|}
==================================================================
Шаблон:Навигатор NGC
<br clear=all>
{| align=center style="font-size: 82%; margin:0 auto; background-color:#DEEAFF; padding:5px; border:1px solid #003399;"
| <big>◄</big> [[{{{1}}}]] | [[{{{2}}}]] | [[{{{3}}}]] | [[{{{4}}}]] | '''{{{5}}}''' | [[{{{6}}}]] | [[{{{7}}}]] | [[{{{8}}}]] | [[{{{9}}}]] <big>►</big>
|}
==================================================================
==================================================================
==================================================================
==================================================================