Редактирование: Модуль:HF/Infobox/Jutsu

Перейти к навигации Перейти к поиску

Примечание. Ваши правки будут показаны в статье только после их проверки участником с соответствующими правами.

Правка может быть отменена. Проверьте сравнение версий ниже и нажмите «Записать страницу».
Если отменяемые вами изменения не вандализм, пожалуйста, допишите причину в описании правки.

Текущая версия Ваш текст
Строка 1: Строка 1:
local Infobox = {}
local Infobox = {}
-------------------------------------
 
-- Библиотеки и глобальные функции --
------------------------------------
-------------------------------------
-- Libraries and Global functions --
-- "Высокочастотные" функции
------------------------------------
-- "High Frequency" functions
local HF = require('Module:HF')
local HF = require('Module:HF')
-- Анализирует параметры вызова и шаблона, урезает пробелы и удаляет пробелы.
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Module:Arguments').getArgs
local getArgs = require('Module:Arguments').getArgs
-- Формирует списки
-- Generates lists
local L = require('Module:List')
local L = require('Module:List')
-- Языковые функции
-- Language functions
local language = mw.language.new('ru')
local language = mw.language.new('en')


-- Вспомогательные функции (локальные, чтобы не беспокоиться о пространствах имен)
-- Helper functions (local to not have to worry about namespaces)
local arraymap = require('Module:HF/Infobox').arraymap
local arraymap = require('Module:HF/Infobox').arraymap
local arrayTable = require('Module:HF/Infobox').arrayTable
local arrayTable = require('Module:HF/Infobox').arrayTable
Строка 18: Строка 19:
local extra1 = require('Module:HF/Infobox').extra1
local extra1 = require('Module:HF/Infobox').extra1


-- Заголовок страницы любой страницы, вызывающей функцию
-- The page title of whatever page is calling the function
local pageTitle = mw.title.getCurrentTitle().text
local pageTitle = mw.title.getCurrentTitle().text


-- Полезные константы
-- Convenient constants
local stripLinkToTarget = '^%[*([^%[|]*)|?'
local stripLinkToTarget = '^%[*([^%[|]*)|?'
local stripPageTitleToBase = "[^(]*"
local stripPageTitleToBase = "[^(]*"
Строка 27: Строка 28:
local extra1pattern = '^[^~]*~([^~]*)'
local extra1pattern = '^[^~]*~([^~]*)'


-------------------------------------------------------------
------------------------------------------------
-- Локальные функции (используются только в данном модуле) --
-- Local functions (used only in this Module) --
-------------------------------------------------------------
------------------------------------------------
-- Replaces {{IsUnnamed}}
-- Replaces {{IsUnnamed}}
local function nameCheck ( target )
local function nameCheck ( target )
local nq = mw.smw.ask{ HF.Link(target:match(stripLinkToTarget)), '?Обслуживание' }
local nq = mw.smw.ask{ HF.Link(target:match(stripLinkToTarget)), '?Maintenance' }
if type(nq) == 'table'  
if type(nq) == 'table'  
    and (
    and (
        nq[1]['Обслуживание'] == 'Название'
        nq[1]['Maintenance'] == 'Name'
        or (type(nq[1]['Обслуживание']) == 'table' and table.concat(nq[1]['Обслуживание']):match('Название'))
        or (type(nq[1]['Maintenance']) == 'table' and table.concat(nq[1]['Maintenance']):match('Name'))
    )
    )
         then
         then
Строка 44: Строка 45:
end
end


---------------------------------------------------------
----------------------------------------------------------
-- Открытые функции (вызываются из шаблона или статьи) --
-- Public functions (called from a Template or article) --
---------------------------------------------------------
----------------------------------------------------------
-- Creates the infobox main title
-- Creates the infobox main title
function Infobox.titleJutsu(frame)
function Infobox.titleJutsu(frame)
Строка 52: Строка 53:
local out = {}
local out = {}
if mw.title.getCurrentTitle().isContentPage == true then
if mw.title.getCurrentTitle().isContentPage == true then
table.insert( out, HF.Category('Дзюцу по алфавиту') )
table.insert( out, HF.Category('Jutsu') )
if args['название'] then
local _editFormURL = mw.html.create('span')
:css('float','right'):css('font-size','x-small')
            :wikitext( HF.Link('Special:FormEdit/Jutsu/' .. pageTitle, 'edit') ):allDone()
local editFormURL = tostring(_editFormURL)
if args['english'] then
mw.smw.set {
mw.smw.set {
['Название'] = args['название'],
['English name'] = args['english'],
['Названия'] = args['название']
['Names'] = args['english']
}
}
end
end
-- Название кандзи
if args['kanji'] then
if args['кандзи'] then
mw.smw.set {
mw.smw.set {
['Кандзи'] = args['кандзи'],
['Kanji name'] = args['kanji'],
['Названия'] = args['кандзи']
['Names'] = args['kanji']
}
}
else
else
mw.smw.set { ['Обслуживание'] = 'Кандзи' }
mw.smw.set { ['Maintenance'] = 'Kanji' }
end
end
if args['romaji'] then
--Название киридзи
if args['киридзи'] then
mw.smw.set{
mw.smw.set{
['Киридзи'] = args['киридзи']:match(stripLinkToTarget),
['Romaji_name'] = args['romaji']:match(stripLinkToTarget),
['Названия'] = args['киридзи']
['Names'] = args['romaji']
}
}
end
end
if args['teams'] then
if args['команды'] then
local teams = mw.text.split( args['teams'], ',%s*' )
local teams = mw.text.split( args['команды'], ',%s*' )
for _, v in ipairs(teams) do
for _, v in ipairs(teams) do
mw.smw.set{ ['Команда'] = mw.text.trim(v) }
mw.smw.set{ ['Team'] = mw.text.trim(v) }
end
end
end
end
if args['image'] then
if args['клан'] then
local images = mw.text.split( args['image'], '\n')
local teams = mw.text.split( args['клан'], ',%s*' )
for _, v in ipairs(teams) do
mw.smw.set{ ['Клан'] = mw.text.trim(v) }
end
end
if args['изображение'] then
local images = mw.text.split( args['изображение'], '\n')
for _, image in ipairs(images) do
for _, image in ipairs(images) do
if type(image) == 'string' then
if type(image) == 'string' then
mw.smw.set{ ['Изображение'] = 'File:' .. image:match("[^:;]*") }
mw.smw.set{ ['Picture'] = 'File:' .. image:match("[^:;]*") }
end
end
end
end
else
else
mw.smw.set{ ['Обслуживание'] = 'Отсутствующее изображение' }
mw.smw.set{ ['Maintenance'] = 'Missing image' }
end
end
if args['unnamed jutsu'] == 'Yes' then
if args['безымянное дзюцу'] == 'Да' then
mw.smw.set{ ['Maintenance'] = 'Name' }
mw.smw.set{ ['Обслуживание'] = 'Название' }
table.insert( out, ("''%s''"):format( pageTitle:match("[^(]*") ) )
table.insert( out, (''%s''):format( pageTitle:match("[^(]*") ) )
else
else
table.insert( out, pageTitle:match("[^(]*") )
table.insert( out, pageTitle:match("[^(]*") )
end
end
local popup = frame:newParserValue(
return table.concat( out ) .. ( args['ref'] or '' )
"{{#queryformlink:form=Image query|link text=" ..
"[[File:Camera font awesome.svg|15px|link=]]" ..
"|query string=Image_query[jutsu]=" .. pageTitle ..
"&_run|wpRunQuery=true|popup|tooltip=Images of " .. pageTitle .. " }}"
)
return table.concat( out ) .. popup:expand() .. ( args['ref'] or '' ) .. editFormURL
elseif mw.title.getCurrentTitle().namespace == 10
elseif mw.title.getCurrentTitle().namespace == 10
    and not pageTitle:match('/testcases') then
    and not pageTitle:match('/testcases') then
    return nil
    return nil
else
else
if args['безымянное дзюцу'] == 'Да' then
if args['unnamed jutsu'] == 'Yes' then
table.insert( out, ("''%s''"):format( args['название'] or pageTitle:match("[^(]*") ) )
table.insert( out, ("''%s''"):format( args['english'] or pageTitle:match("[^(]*") ) )
else
else
table.insert( out, args['название'] or pageTitle:match("[^(]*") )
table.insert( out, args['english'] or pageTitle:match("[^(]*") )
end
end
return table.concat( out ) .. ( args['ref'] or '' )
return table.concat( out ) .. ( args['ref'] or '' )
end
end
Строка 127: Строка 123:
local args = getArgs(frame)
local args = getArgs(frame)
local classifications =
local classifications =
type(args['классификация дзюцу']) == 'string'
type(args['jutsu classification']) == 'string'
and mw.text.split( args['классификация дзюцу'], ',%s*' )
and mw.text.split( args['jutsu classification'], ',%s*' )
if type(classifications) == 'table' then
if type(classifications) == 'table' then
local out = {}
local out = {}
local icons = {}
local icons = {}
local kekkei = {
local kekkei = {
['кэккэй мора'] = true,
['kekkei mōra'] = true,
['кэккэй тота'] = true,
['kekkei tōta'] = true,
['кэккэй гэнкай'] = true
['kekkei genkai'] = true
}
}
for _,classification in ipairs(classifications) do
for _,classification in ipairs(classifications) do
Строка 142: Строка 137:
if classification:match(basepattern):lower() == 'hiden' then
if classification:match(basepattern):lower() == 'hiden' then
local options = {
local options = {
['SemanticPropertyName'] = 'Клан',
['SemanticPropertyName'] = 'Clan',
['PrependText'] = 'Клан',
['PrependText'] = 'Ninja clan',
['PrependTemplate'] = 'Карточка/Наруто/Значки',
['PrependTemplate'] = 'Infobox_icon',
['Print'] = 'none',
['Print'] = 'none',
['Link'] = 'default'
['Link'] = 'default'
Строка 152: Строка 147:
elseif kekkei[classification:match(basepattern):lower()] then
elseif kekkei[classification:match(basepattern):lower()] then
local options = {
local options = {
['SemanticPropertyName'] = 'Кэккэй Гэнкай',
['SemanticPropertyName'] = 'Kekkei Genkai',
['PrependText'] = 'Кэккэй Гэнкай',
['PrependText'] = 'Kekkei Genkai',
['PrependTemplate'] = 'Карточка/Наруто/Значки',
['PrependTemplate'] = 'Infobox_icon',
['Print'] = 'none',
['Print'] = 'none',
['Link'] = 'default'
['Link'] = 'default'
Строка 163: Строка 158:
end
end
if classification:match(basepattern) and #classification > 1 then
if classification:match(basepattern) and #classification > 1 then
mw.smw.set { ['Классификация дзюцу'] = classification:match(basepattern) }
mw.smw.set { ['Jutsu classification'] = classification:match(basepattern) }
table.insert( out, HF.Link(classification:match(basepattern)) )
table.insert( out, HF.Link(classification:match(basepattern)) )
end
end
Строка 175: Строка 170:
local args = getArgs(frame)
local args = getArgs(frame)
local options = {
local options = {
['SemanticPropertyName'] = 'Природа чакры',
['SemanticPropertyName'] = 'Chakra Nature',
['PrependText'] = 'Стихия',
['PrependText'] = 'Nature',
['PrependTemplate'] = 'Карточка/Наруто/Значки',
['PrependTemplate'] = 'Infobox_icon',
['Link'] = 'default'
['Link'] = 'default'
}
}
local values = arrayTable ( args['тип дзюцу'], ',%s*', options, frame )
local values = arrayTable ( args['jutsu type'], ',%s*', options, frame )
return L.makeList( 'unbulleted' , values )
return L.makeList( 'unbulleted' , values )
end
end
Строка 186: Строка 181:
function Infobox.jutsuRank(frame)
function Infobox.jutsuRank(frame)
local args = getArgs(frame)
local args = getArgs(frame)
local array = mw.text.split( args['ранг дзюцу'], ',' )
local array = mw.text.split( args['jutsu rank'], ',' )
local out = {}
local out = {}
for _, v in ipairs( array ) do
for _, v in ipairs( array ) do
table.insert( out , HF.Link('Ранг дзюцу::'..v, v..'-ранг') )
table.insert( out , HF.Link('Jutsu rank::'..v, v..'-rank') )
end
end
return table.concat( out, ',' )
return table.concat( out, ',' )
Строка 197: Строка 192:
local args = getArgs(frame)
local args = getArgs(frame)
local options = {
local options = {
['SemanticPropertyName'] = 'Тип класса дзюцу',
['SemanticPropertyName'] = 'Jutsu class type',
['Link'] = 'none'
['Link'] = 'none'
}
}
local classes = arrayTable ( args['тип класса дзюцу'], ',%s*', options, frame )
local classes = arrayTable ( args['jutsu class type'], ',%s*', options, frame )
return table.concat( classes, ', ' )
return table.concat( classes, ', ' )
end
end
Строка 207: Строка 202:
local args = getArgs(frame)
local args = getArgs(frame)
local ranges = {
local ranges = {
['Короткий'] = 'Короткий диапазон (0-)',
['Short'] = 'Short range (0-5m)',
['Средний'] = 'Средний диапазон (5-10м)',
['Mid'] = 'Mid range (5-10m)',
['Длинный'] = 'Длинный диапазон (10м+)',
['Long'] = 'Long range (10m+)',
['Короткий, Средний, Длинный'] = 'Все диапазоны',
['Short, Mid, Long'] = 'All ranges',
['Короткий, Средний'] = 'Короткий в Средний диапазон (0-10м)',
['Short, Mid'] = 'Short to Mid range (0-10m)',
['Средний, Длинный'] = 'Средний в Длинный диапазон (+)',
['Mid, Long'] = 'Mid to Long range (5m+)',
['Короткий, Длинный'] = 'Короткий или Длинный диапазон (0-5м или 10м+)'
['Short, Long'] = 'Short or Long range (0-5m or 10m+)'
}
}
arrayTable ( args['диапазон дзюцу'], ',%s*', { ['SemanticPropertyName'] = 'Диапазон дзюцу' } )
arrayTable ( args['jutsu range'], ',%s*', { ['SemanticPropertyName'] = 'Jutsu range' } )
return ranges[args['диапазон дзюцу']] or args['диапазон дзюцу']..'-диапазон'
return ranges[args['jutsu range']] or args['jutsu range']..'-range'
end
end


Строка 222: Строка 217:
local args = getArgs(frame)
local args = getArgs(frame)
local options = {
local options = {
['SemanticPropertyName'] = 'Родительское дзюцу',
['SemanticPropertyName'] = 'Parent',
['Link'] = 'Unnamed',
['Link'] = 'Unnamed',
['UnnamedFormat'] = true
['UnnamedFormat'] = true
}
}
local parents = arrayTable ( args['родительское дзюцу'], ',%s*', options )
local parents = arrayTable ( args['parent jutsu'], ',%s*', options )
return L.makeList( 'unbulleted', parents )
return L.makeList( 'unbulleted', parents )
end
end
Строка 234: Строка 229:
local out = {}
local out = {}
local mtypes = {
local mtypes = {
['Фильм'] = 'Дзюцу/НеКанонический',
['Movie'] = 'Jutsu/NonCanon',
['Игра'] = 'Дзюцу/НеКанонический',
['Game'] = 'Jutsu/NonCanon',
['Игра, Фильм'] = 'Дзюцу/НеКанонический'
['Game, Movie'] = 'Jutsu/NonCanon'
}
}
local mq = mw.smw.ask {
local mq = mw.smw.ask {
(HF.Link('Concept:%s')):format( mtypes[args['дзюцу медиа']] or 'Дзюцу/Канонический' ),
(HF.Link('Concept:%s')):format( mtypes[args['jutsu media']] or 'Jutsu/Canon' ),
(HF.Link('Родительское дзюцу::%s')):format( mw.title.getCurrentTitle().prefixedText ),
(HF.Link('Parent::%s')):format( mw.title.getCurrentTitle().prefixedText ),
'?Появляется в',
'?Appears in',
'?Обслуживание',
'?Maintenance',
('userparam=%s'):format(args['дзюцу медиа']),
('userparam=%s'):format(args['jutsu media']),
'mainlabel=main',
'mainlabel=main',
'limit=200'
'limit=200'
}
}
local hasNCderivatives = mw.smw.ask {
local hasNCderivatives = mw.smw.ask {
(HF.Link('Concept:%s')):format( 'Дзюцу/НеКанонический' ),
(HF.Link('Concept:%s')):format( 'Jutsu/NonCanon' ),
(HF.Link('Родительское дзюцу::%s')):format( mw.title.getCurrentTitle().prefixedText )
(HF.Link('Parent::%s')):format( mw.title.getCurrentTitle().prefixedText )
}
}
if type(mq) == 'table' then
if type(mq) == 'table' then
Строка 255: Строка 250:
local mainlink =
local mainlink =
(
(
    parent['Обслуживание'] == 'Название'
    parent['Maintenance'] == 'Name'
    or (
    or (
        type(parent['Обслуживание']) == 'table'
        type(parent['Maintenance']) == 'table'
        and table.concat(parent['Обслуживание']):match('Название')
        and table.concat(parent['Maintenance']):match('Name')
            )
            )
    )
    )
and (''%s''):format(
and ("''%s''"):format(
HF.Link(
HF.Link(
parent['main']:match(stripLinkToTarget),
parent['main']:match(stripLinkToTarget),
Строка 272: Строка 267:
)
)
local dq = mw.smw.ask {
local dq = mw.smw.ask {
(HF.Link('Concept:%s')):format( mtypes[args['дзюцу медиа']] or 'Дзюцу/Канонический' ),
(HF.Link('Concept:%s')):format( mtypes[args['jutsu media']] or 'Jutsu/Canon' ),
(HF.Link('Родительское дзюцу::%s')):format( parent['main']:match(stripLinkToTarget) ),
(HF.Link('Parent::%s')):format( parent['main']:match(stripLinkToTarget) ),
('userparam=%s'):format( args['дзюцу медиа'] or 'Аниме, Манга' ),
('userparam=%s'):format( args['jutsu media'] or 'Anime, Manga' ),
'mainlabel=main',
'mainlabel=main',
'named args=yes',
'named args=yes',
Строка 283: Строка 278:
for _, derived in ipairs(dq) do
for _, derived in ipairs(dq) do
local dlink = (
local dlink = (
    derived['Обслуживание'] == 'Название'
    derived['Maintenance'] == 'Name'
    or type(derived['Обслуживание']) == 'table'
    or type(derived['Maintenance']) == 'table'
        and table.concat(derived['Обслуживание']):match('Название')
        and table.concat(derived['Maintenance']):match('Name')
    )
    )
and ("''%s''"):format(
and ("''%s''"):format(
Строка 309: Строка 304:
        mw.title.new( 'SearchByProperty', 'Special' ).prefixedText
        mw.title.new( 'SearchByProperty', 'Special' ).prefixedText
    local q = mw.uri.buildQueryString{  
    local q = mw.uri.buildQueryString{  
        ['property'] = 'Родительское дзюцу',
        ['property'] = 'Parent',
        ['value'] = mw.uri.encode(
        ['value'] = mw.uri.encode(
            mw.title.getCurrentTitle().prefixedText,
            mw.title.getCurrentTitle().prefixedText,
Строка 317: Строка 312:
         local searchlink = HF.ExternalLink(
         local searchlink = HF.ExternalLink(
             tostring(mw.uri.fullUrl(t,q)),
             tostring(mw.uri.fullUrl(t,q)),
             'Все производные дзюцу'
             'All derived jutsu'
         )
         )
    return ('<center class="smwsearch">%s</center>'):format( searchlink )
    return ('<center class="smwsearch">%s</center>'):format( searchlink )
Строка 325: Строка 320:
function Infobox.jutsuRelated(frame)
function Infobox.jutsuRelated(frame)
local args = getArgs(frame)
local args = getArgs(frame)
return arraymap( args['родственные дзюцу'], ',%s*', HF.Link('%s'), ', ' )
return arraymap( args['related jutsu'], ',%s*', HF.Link('%s'), ', ' )
end
end


function Infobox.jutsuUsers(frame)
function Infobox.jutsuUsers(frame)
local args = getArgs(frame)
  local args = getArgs(frame)
local out = {}
  local out = {}
-- Valid media types
  -- Valid media types
local mtypes = {
  local mtypes = {
['нет'] = true, ['аниме'] = true, ['манга'] = true,
    anime = true, manga = true, novel = true,
['роман'] = true, ['игра'] = true, ['фильм'] = true, ['фильм канон'] = true
    game = true, movie = true, ['movie canon'] = true
}
  }
   -- Divides users into actionable items (even if there's only one)
   -- Divides users into actionable items (even if there's only one)
   local users = args['пользователи'] and mw.text.split( args['пользователи'], ',%s*' )
   local users = args['users'] and mw.text.split( args['users'], ',%s*' )
   -- Checks if any user entries exist, and if they don't, return nil
   -- Checks if any user entries exist, and if they don't, return nil
   if type(users) ~= 'table' then return nil end
   if type(users) ~= 'table' then return nil end
Строка 356: Строка 351:
     --- AdditionalInfo
     --- AdditionalInfo
     -- Puppetry handling
     -- Puppetry handling
     local puppetry = user:match('~~марионетка~(.*)$')
     local puppetry = user:match('~~puppet~(.*)$')
     if puppetry then
     if puppetry then
       puppetry = (' (Использование марионеток %s)')
       puppetry = (' ([[Puppetry]] using %s)')
         :format(mw.text.listToText(mw.text.split(puppetry, '~')))
         :format(mw.text.listToText(mw.text.split(puppetry, '~')))
     end
     end
     -- "with" handling
     -- "with" handling
     local with = user:match('~~с~([^%~]*)')
     local with = user:match('~~with~([^%~]*)')
       and (' (с %s)'):format(user:match('~~с~([^%~]*)'))
       and (' (with %s)'):format(user:match('~~with~([^%~]*)'))
     local AdditionalInfo = puppetry or with or ''
     local AdditionalInfo = puppetry or with or ''


Строка 370: Строка 365:
     if media
     if media
       and mtypes[media:lower()]
       and mtypes[media:lower()]
       and media:lower() ~= 'фильм канон'
       and media:lower() ~= 'movie canon'
     then
     then
       Media = ('<sup> (%s)</sup>')
       Media = ('<sup> (%s only)</sup>')
         :format( language:ucfirst( media ) )
         :format( language:ucfirst( media ) )
     elseif media
     elseif media
       and media:lower() == 'фильм канон'
       and media:lower() == 'movie canon'
       then
       then
         Media = '<sup> (Фильм)</sup>'
         Media = '<sup> (Movie only)</sup>'
     end
     end


     --- Summons
     --- Summons
     local cq = mw.smw.ask {
     local cq = mw.smw.ask {
       (HF.Link('Контракт::%s')):format( prime:match(stripLinkToTarget) ),
       (HF.Link('Contract::%s')):format( prime:match(stripLinkToTarget) ),
       'mainlabel=main'
       'mainlabel=main'
     }
     }
Строка 392: Строка 387:
     end
     end
     local Summons = ((#sl > 0)
     local Summons = ((#sl > 0)
         and ( pageTitle == 'Техника Призыва' or pageTitle == 'Destruction Bug Host Technique' ))
         and ( pageTitle == 'Summoning Technique' or pageTitle == 'Destruction Bug Host Technique' ))
       and ( ' (%s)' ):format( table.concat( sl, ", " ) )
       and ( ' (%s)' ):format( table.concat( sl, ", " ) )
       or ''
       or ''
Строка 401: Строка 396:
       or 'null'
       or 'null'
     mw.smw.set {
     mw.smw.set {
       ['Пользователи техники'] = prime .. ';' .. setmtype
       ['User tech'] = prime .. ';' .. setmtype
     }
     }


Быстрая вставка: «» „“ | {{}} [[]] [] [[|]] {{|}} {{подст:}} <br> &nbsp; #перенаправление [[]] [[Категория:]] {{DEFAULTSORT:}} [[Участник:]] {{u|}} {{userlinks|}} {{ping|}} {{pagelinks|}} {{D-|}} [[d:|]] ~~~~

__NOTOC__ __TOC__ __FORCETOC__   [[ ()|]] [[ (фильм)|]] {{commonscat|}} [[wikt:]] [[Special:Diff/|]] [[Special:Permalink/|]] [[Special:Contributions/]]

Теги: <></>   <!-- -->   <blockquote></blockquote>   <code></code>   <code><nowiki></nowiki></code>   <nowiki></nowiki>   <includeonly></includeonly>   <noinclude></noinclude>   <onlyinclude></onlyinclude>   <poem></poem>   <pre></pre>   <s></s>   <small></small>   <syntaxhighlight lang=""></syntaxhighlight>   <sub></sub>   <sup></sup>

Теги галереи файлов: <gallery></gallery>   <gallery class="center" caption=""></gallery>   <gallery mode="packed" heights="" caption=""></gallery>

Разделы: == ==   === ===   == См. также ==   == Примечания == {{примечания}}   == Литература ==   == Ссылки ==

Шаблоны: {{tl|}}   {{cl|}}   {{clear}}   {{lang-en|}}   {{ref-en}}   {{s|}}   {{неоднозначность}}   {{колонки}}{{колонки|конец}}   {{подст:L}}   {{начало цитаты}}{{конец цитаты|источник=}}   {{hello}}~~~~  

Источники: <ref></ref>   <ref name=""></ref>   <ref name="" />   <ref group=""></ref>   {{ref+||group=""}}  

Символы: Ё ё ~ # @ § · ¡ ¿ \ ½ ¼ ¾ ± × ÷ ° ^ ¹ ² ³ £ ¥ $ ¢ © ® {{подст:ударение}}

Греческий алфавит: Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι Ϊ ι ϊ Κ κ Λ λ Μ μ Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ Ϋ υ ϋ Φ φ Χ χ Ψ ψ Ω ω