Модуль:Отексте/СочиненияПлатона

Для документации этого модуля может быть создана страница Модуль:Отексте/СочиненияПлатона/Документация

local p = {}

indexes_of_volumes = {
	'Сочинения Платона (Платон, Карпов). Том 1, 1863.pdf', 
	'Сочинения Платона (Платон, Карпов). Том 2, 1863.pdf', 
	'Сочинения Платона (Платон, Карпов). Том 3, 1863.pdf', 
	'Сочинения Платона (Платон, Карпов). Том 4, 1863.pdf', 
	'Сочинения Платона (Платон, Карпов). Том 5, 1879.pdf', 
	'Сочинения Платона (Платон, Карпов). Том 6, 1879.pdf'
}

-- диапазоны страниц частей
	--[=[ формат: 
	в кв.скобках название секции (она же секция в ПИ Страница) как идентификатор
	в фиг.скобках нач. и конеч. номера страниц; если они символьные (у предисловий) то далее - номера страниц скана, 
	title - название, если отличается от секции
	--]=]
pagination = {
-- <!-- === Том 1 ===-->
  ['Предисловие-1'] = {'V', 'XXII', 6, 23, title = 'Предисловие (к первому изданию)'},
  ['Предисловие-2'] = {'XXIII', 'XXXI', 24, 31, title = 'Предисловие (ко второму изданию)'},
  ['Жизнь Платона'] = {1, 14},
  ['О сочинениях Платона'] = {15, 40},
  ['Протагор. Введение'] = {43, 50},
  ['Протагор'] = {51, 130},
  ['Эвтидем. Введение'] = {133, 162},
  ['Эвтидем'] = {163, 216},
  ['Лахес. Введение'] = {219, 226},
  ['Лахес'] = {227, 260},
  ['Хармид. Введение'] = {263, 276},
  ['Хармид'] = {277, 310},
  ['Иппиас меньший. Введение'] = {313, 320},
  ['Иппиас меньший'] = {321, 342},
  ['Эвтифрон. Введение'] = {345, 354},
  ['Эвтифрон'] = {355, 382},
  ['Апология Сократа. Введение'] = {385, 403},
  ['Апология Сократа'] = {404, 443},
  ['указатель-1'] = {444, 448, title = 'Историко-филологический указатель к 1-й части соч. Платона'},
  ['Опечатки-1'] = {449, 449},
-- <!-- === Том 2 ===-->
  ['Критон. Введение'] = {7, 13},
  ['Критон'] = {14, 34},
  ['Федон. Введение'] = {37, 58},
  ['Федон'] = {59, 144},
  ['Менон. Введение'] = {147, 155},
  ['Менон'] = {156, 208},
  ['Горгиас. Введение'] = {211, 235},
  ['Горгиас'] = {236, 366},
  ['Алкивиад Первый. Введение'] = {369, 384},
  ['Алкивиад Первый'] = {385, 450},
  ['Алкивиад Второй. Введение'] = {453, 458},
  ['Алкивиад Второй'] = {459, 481},
  ['указатель-2'] = {482, 485, title = 'Историко-филологический указатель к 2-й части соч. Платона'},
  ['Опечатки-2'] = {486, 486},
-- <!-- === Том 3 ===-->
  ['Политика или государство. Введение'] = {3, 48},
  ['Содержание первой книги'] = {49, 50},
  ['Книга первая'] = {51, 92},
  ['Содержание второй книги'] = {93, 95},
  ['Книга вторая'] = {96, 138},
  ['Содержание третьей книги'] = {139, 144},
  ['Книга третья'] = {145, 196},
  ['Содержание четвертой книги'] = {197, 203},
  ['Книга четвертая'] = {204, 243},
  ['Содержание пятой книги'] = {244, 248},
  ['Книга пятая'] = {249, 294},
  ['Содержание шестой книги'] = {295, 304},
  ['Книга шестая'] = {305, 345},
  ['Содержание седьмой книги'] = {346, 353},
  ['Книга седьмая'] = {354, 394},
  ['Содержание восьмой книги'] = {395, 397},
  ['Книга восьмая'] = {398, 438},
  ['Содержание девятой книги'] = {439, 446},
  ['Книга девятая'] = {447, 478},
  ['Содержание десятой книги'] = {479, 485},
  ['Книга десятая'] = {486, 525},
  ['указатель-3'] = {526, 531, title = 'Историко-филологический указатель к 3-й части соч. Платона'},
  ['Опечатки-3'] = {532, 532},
-- <!-- === Том 4 ===-->
  ['Федр. Введение'] = {3, 16},
  ['Федр'] = {17, 116},
  ['Пир. Введение'] = {119, 143},
  ['Пир'] = {144, 224},
  ['Лизис. Введение'] = {227, 236},
  ['Лизис'] = {237, 264},
  ['Иппиас больший. Введение'] = {267, 277},
  ['Иппиас больший'] = {278, 316},
  ['Менексен. Введение'] = {319, 327},
  ['Менексен'] = {328, 356},
  ['Ион. Введение'] = {359, 365},
  ['Ион'] = {366, 386},
  ['Феаг. Введение'] = {389, 397},
  ['Феаг'] = {398, 416},
  ['Соперники. Введение'] = {419, 421},
  ['Соперники'] = {422, 434},
  ['Иппарх. Введение'] = {437, 438},
  ['Иппарх'] = {439, 452},
  ['Клитофон. Введение'] = {455, 456},
  ['Клитофон'] = {457, 463},
  ['указатель-4'] = {464, 470, title = 'Историко-филологический указатель к 4-й части соч. Платона'},
  ['Опечатки-4'] = {470, 470},
-- <!-- === Том 5 ===--><!-- -->
  ['Предисловие-5'] = {'I', 'II', 6, 7, title = 'Несколько слов по поводу издания'},
  ['Филеб. Введение'] = {3, 48},
  ['Филеб'] = {49, 166},
  ['Кратил. Введение'] = {169, 197},
  ['Кратил'] = {198, 286},
  ['Теэтет. Введение'] = {289, 319},
  ['Теэтет'] = {320, 437},
  ['Софист. Введение'] = {441, 478},
  ['Софист'] = {479, 574},
  ['Опечатки-5'] = {575, 575, title = 'Поправки к V-ой части'},
-- <!-- === Том 6 ===-->
  ['Политик. Введение'] = {3, 65},
  ['Политик'] = {66, 157},
  ['Парменид. Введение'] = {161, 243},
  ['Парменид'] = {244, 325},
  ['Тимей. Введение'] = {329, 370},
  ['Тимей'] = {371, 488},
  ['Критиас. Введение'] = {491, 496},
  ['Критиас'] = {497, 519},
  ['Минос. Введение'] = {523, 536},
  ['Минос'] = {537, 553},
  ['Эриксиас. Введение'] = {557, 558},
  ['Эриксиас'] = {559, 578},
  ['Опечатки-6'] = {579, 580, title = 'Опечатки, замеченные в VI-ой части'},
}

local translator = {
	'[[Василий Николаевич Карпов]]',
	'[[Василий Николаевич Карпов|Василій Николаевичъ Карповъ]]'
}

function p.wrapper ( frame, args )
	local page = mw.title.getCurrentTitle()
	local pagename = page.text
	local isPRS = toBool ( pagename:find ( "/ДО$" ) or pagename:find ( "/ДО/" ) or pagename:find ( " %(ДО%)$" ) or pagename:find ( " %(ДО%)/" ) )
	local a, cat
	if frame.args[1] == 'translations_list' then 
		a, cat = translations_list(frame, args, isPRS, pagename)
	else 
		a, cat = work(frame, args, isPRS, pagename) 
	end
	return a, cat, ''
end


-- страницы произведений
function work( frame, a, isPRS, pagename )
	--mw.logObject(pagename, "pagename")
	local isPlatonWork = false; if pagename:find('%(Платон') then isPlatonWork=true end
	local oldidx = 1; if isPRS then oldidx = 2 end  -- индекс строк в ДО
	local section = a[1]
	local title = pagination[section].title; if not title then title = section end
	local volume = a["т"]
	
	if isPlatonWork and not pagename:find('Политика или государство') then 
		a["НАЗВАНИЕ"] = '[['..title..' (Платон)|'..title..']]'
		a["НЕОДНОЗНАЧНОСТЬ"] = title..' (Платон)'
	else
		a["НАЗВАНИЕ"] = title
	end

	local author
	local author_editor = {'~— издатель V-VI томов', '~— издатель V-VI томовъ'}
	local author_PlatonWork = {'[[Платон]]', '[[Платон|Платонъ]]'}
	local author_PseudoPlaton = {'[[Платон|Псевдо-Платон]]', '[[Платон|Псевдо-Платонъ]]'}
	local author_Karpov = {'[[Василий Николаевич Карпов]]', '[[Василий Николаевич Карпов|Василій Николаевичъ Карповъ]]'}
	if section == 'Предисловие-5' then author = author_editor[oldidx]
	elseif isPlatonWork then author = author_PlatonWork[oldidx]
	elseif pagename:find('%(Псевдо') then author = author_PseudoPlaton[oldidx]
	else author = author_Karpov[oldidx]
	end
	a["АВТОР"] = author

	if isPlatonWork then 
		a["ЯЗЫКОРИГИНАЛА"] = 'grc'
		a["ПЕРЕВОДЧИК"] = author_Karpov[oldidx]
		--[[
		local date_pub_volyears = {
			{' вт. пол. IV века до н. э.; Перевод: 1863 (том 1, СПб., типография духовн. журнала «Странник»)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1863 (том 1, СПб., типографія духовн. журнала «Странникъ»)'},
			{' вт. пол. IV века до н. э.; Перевод: 1863 (том 2, СПб., типография духовн. журнала «Странник»)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1863 (том 2, СПб., типографія духовн. журнала «Странникъ»)'},
			{' вт. пол. IV века до н. э.; Перевод: 1863 (том 3, СПб., типография духовн. журнала «Странник»)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1863 (том 3, СПб., типографія духовн. журнала «Странникъ»)'},
			{' вт. пол. IV века до н. э.; Перевод: 1863 (том 4, СПб., типография духовн. журнала «Странник»)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1863 (том 4, СПб., типографія духовн. журнала «Странникъ»)'},
			{' вт. пол. IV века до н. э.; Перевод: 1879 (том 5, М., синодальная типография)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1879 (том 5, М., синодальная типографія)'},
			{' вт. пол. IV века до н. э.; Перевод: 1879 (том 6, М., синодальная типография)', ' вт. пол. IV вѣка до н. э.; Переводъ: 1879 (том 6, М., синодальная типографія)'},
		}
		a["ДАТАПУБЛИКАЦИИ"] = date_pub_volyears[volume][oldidx]
		--]]
	end
	
	if not is(a["НАЗВАНИЕОРИГИНАЛА"]) then 
		local entity = mw.wikibase.getEntity()
		if entity and entity.claims[ "P629"] then 
			local entity_topic_id = entity.claims[ "P629"][1].mainsnak.datavalue.value.id
			if entity_topic_id then 
				local entity_topic = mw.wikibase.getEntity( entity_topic_id )
				a["НАЗВАНИЕОРИГИНАЛА"] = entity_topic.claims[ 'P1476'][1].mainsnak.datavalue.value.text 
			end
		end
    end

	local from_collection = {'[[Сочинения Платона (Платон; Карпов)|Сочинения Платона]]', '[[Сочинения Платона (Платон; Карпов)/ДО|Сочиненія Платона]]'}
	a["ИЗСБОРНИКА"] = from_collection[oldidx]
	a["ОГЛАВЛЕНИЕ"] = 'Сочинения Платона (Платон; Карпов)/оглавление'
	if isPRS then a["ОГЛАВЛЕНИЕ"] = a["ОГЛАВЛЕНИЕ"] .. '/ДО' end

	local pages_range = pagination[section][1]..'—'..pagination[section][2]
	a["ИСТОЧНИК"] = book(frame, title, tonumber(volume), pages_range, oldidx)

	if isPlatonWork then
		local marginalia_note = {
			'Пометки на полях, в виде цифр и букв B, C, D, E, [[Страница:'..indexes_of_volumes[1]..'/14|означают]] ссылки на [[w:en:Stephanus_pagination|издание Стефана]] 1578 года',
			'Помѣтки на поляхъ, въ видѣ цифръ и буквъ B, C, D, E, [[Страница:'..indexes_of_volumes[1]..'/14|означаютъ]] ссылки на [[w:en:Stephanus_pagination|изданіе Стефана]] 1578 года'
		}
		a["ДРУГОЕ"] = marginalia_note[oldidx] .. '.'
	end
	
	a["ВИКИПЕДИЯ"] = a["ВИКИПЕДИЯ"] -- or
	-- local page = mw.title.getCurrentTitle()
	-- if page.text toBool ( pagename:find ( "Платон/" )
	-- '{{#ifeq:{{str find|{{PAGENAME}}|(Платон/}}|-1||  {{Str left|{{PAGENAME}}|{{#expr:{{str find|{{PAGENAME}}|(Платон/}} -2}} }}}}'
	-- part = a["ЧАСТЬ"]; if tonumber(part) then part = names_of_parts[title][tonumber(part)] end

	cat = {'[[Категория:Сочинения Платона (Платон; Карпов)]]'}
	if pagename:find('%(Платон') then table.insert(cat, '[[Категория:Диалоги Платона]]') end
	
	return a, cat
end


function book(frame, title, volume, pages, oldidx)
	local edition; if volume >= 1 and volume <= 4 then edition = 1 
		elseif volume == 5 or volume == 6 then edition = 2 end
	local editions = {
		{1863, 'СПб.', {'типография духовн. журнала «Странник»', 'типографія духовн. журнала «Странникъ»'}}, 
		{1879, 'М.', {'Синодальная типография', 'Синодальная типографія'}}
	}
	local e = editions[edition]
	local year, place, pub = e[1], e[2], e[3][oldidx]
	d = {
		['автор']='', ['заглавие']='Сочинения Платона',
		['место']=place, ['издательство']=pub, ['томов']=6,
		['том']=volume,	['год'] = year,
		['часть']=title, 
		['страницы']=pages,
		['викитека']='Индекс:'..indexes_of_volumes[volume],
		['ответственный']='пер. В. Н. Карпова'
	}
	return frame:expandTemplate{ title = 'книга', args = d }
end



-- страницы произведений
function p.transclude( frame )
	local pargs = frame:getParent().args
	local section = pargs[1]  --title
	local volume = tonumber(pargs['т'])
	local _from, _to
	
	-- страницы скана. Для предисловий отдельно - страницы начал и концов
	sp_from = { ['Предисловие-1'] = 6,	['Предисловие-2'] = 24, ['Предисловие-5'] = 6}
	sp_to = { ['Предисловие-1'] = 23, ['Предисловие-2'] = 31, ['Предисловие-5'] = 7}
	pageoffset_of_volumes = {33, 1, 5, 5, 7, 5}  -- смещения страниц по томам
	if pagination[section][3] then _from = pagination[section][3]
	else _from = pagination[section][1] + pageoffset_of_volumes[volume]
	end
	
	if pagination[section][4] then _to = pagination[section][4]
	else _to = pagination[section][2] + pageoffset_of_volumes[volume]
	end
	_text =  frame:extensionTag ( "pages", "", { 
						index = indexes_of_volumes[volume], 
						from = _from, 
						to = _to, 
						-- exclude = v.soft.skip or "", 
						onlysection = section,
					} )
	-- mw.logObject(_text, "_text")
	return _text
end


-- номер начальной страницы части
function p.page_number_begin( frame )
	local section = frame.args[1]
	return pagination[section][1]
end


-- проверка переменной, возврат её или nil если пустая
function is ( var ) if ( var == '' or var == nil ) then return nil else return var end end

return p