Модуль:ТСД

Материал из Викитеки — свободной библиотеки
Перейти к навигации Перейти к поиску
Документация Документация

Викитека:Проект:ТСД

Start hand.svg Модуль устарел, используется Модуль:Отексте и его подмодули. Отсюда могут использоваться только некоторые функции.


Подмодули

  • Подмодуль:ТСД/Данные по странице создаёт таблицу с данными по текущей странице. (Данные типа: заглавие страницы, термин (заглавие статьи), термин в ДО, предыдущая и следующая страница, пагинация, том, и др.) При вызове из статей ТСД парсит словники. Модуль был выделен с целью оптимизации методом mw.loadData, — т. е. он выполняется лишь единожды на странице, но ему не могут передаваться параметры, может распознавать только заголовок вызвавшей его страницы.

Использование

Для получения данных по текущей странице (создаваемых модулем «ТСД/Данные по странице») вызвать {{#invoke:ТСД|d|параметр|номер_издания, опционально}}. Список параметров см. в модуле.

Например, в статье ТСД/Ботовка:

  • {{#invoke:ТСД|d|tom|3}} даст: 1
  • {{#invoke:ТСД|d|pagename}}ТСД/Ботовка

Функции вызываются из вики-шаблонов так: {{#invoke:ТСД|имя_функции|параметры_через_символ_'|'}}.

Например (устарело):

  • {{#invoke:ТСД|indexlink|1|{{{1-ИЗД.СТРАНИЦА СКАНА|}}}|{{{1-ИЗД.СТРАНИЦЫ КНИГИ|}}}}}

Список функций

(устарело)

  • indexlink(номер издания, том, страница скана, страницы книги) — Возвращает ссылку на индекс издания. При указанной странице скана вернёт ссылку на страницу в индексе, при неуказанной — на индекс тома.
  • god_toma(номер издания, том) — Возвращает год издания тома.
  • oglavlenie_slovnika(название статьи) — Возвращает буквенное оглавление словника, где каждая буква является вики-ссылкой. Букву с которой начинается статья выделяет тэгом <big>. Если не указан 2-й параметр берётся {{SUBPAGE}}.
  • tom(номер издания, название статьи) — Возвращает номер тома по первой букве названия статьи. Если не указан 2-й параметр берётся {{SUBPAGE}}.
  • pagecalc(издание, том, стр.книги) — Рассчитывает страницу скана по странице книге, добавляя смещение.

и другие.

local p = {}

local data = mw.loadData('Модуль:ТСД/Данные по странице')
--local moduleFunc = require('Модуль:ТСД/Функции')

local god_toma = {{1863,1865,1865,1866}, {1880,1881,1882,1882}, {1903,1905,1907,1909}}
local bukvi_toma = {{'А','Б','В','Г','Д','Е','Ж','З'}, {'И','І','К','Л','М','Н','О'}, {'П'}, {'Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Ѣ','Э','Ю','Ѧ','Я','Ѳ','Ѵ'}} --в ТСД-3 буква 'Р' в 3-м томе

----------- helpers --

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

-- создание ссылки
function make_link(prefix, pagename, text)
	return '[['..prefix..pagename..'|'..text..']]'
end

-----------

-- возвращает значение о странице из модуля данных
function p.d(frame) 
	local var, izdanie = frame.args[1], frame.args[2]
	if not izdanie then 
		return data[var] 
	else 
		return data[tonumber(izdanie)][var]
	end
end

--[=[
-- Расчитывает страницу скана по странице книге, добавляя смещение.  Возврат: стр.скана. 
function p.pagescan_calc(frame)
	return moduleFunc.pagescan_calc(frame)
end
--]=]

-- для [[шаблон:тсд страница словника]] --
-- Расчитывает страницу книги по странице скана, добавляя смещение.  Для тсд-2
function pagecalc_scan(pscan, tom)
    ps = tonumber(pscan)
    tom = tonumber(tom)    
    --if izdanie == 2 then 
    	local offset = {90, 9, 8, 8}
    	return ps - offset[tom]
    --end
end
function p.pagecalc_scan(frame) return pagecalc_scan(frame.args[1], frame.args[2]) end	


-----------

-- Первую букву - заглавной, остальные строчными
function str_registr(s)
	--s = mw.ustring.gsub(s, '{{.-}}', '') --удаление шаблонов. не фурычит, их подстановка идёт раньше вызова этой функции
	s = mw.ustring.gsub(s, "&#x301;", ''); s = mw.ustring.gsub(s, "&#x02CA;", '') -- ударения, которые ставят {{акут}} и {{акут3}}
	s = mw.ustring.gsub(s, "[%[%]'́ˊ]", '')  -- удаление шаблонов, ударений, ', []
	return mw.ustring.upper(mw.ustring.sub(s, 1,1)) .. mw.ustring.lower(mw.ustring.sub(s, 2))
end
function p.str_registr(frame) return str_registr(frame.args[1]) end

-- Для [[шаблон:tsdl]]. Создаёт ссылку на статью ТСД, в зависимости статья ДО или СО, игнориркет ударение, регистр букв, символы оформления. 
function p.perelinkovka(frame)
	local topage, is_article, sufix = frame.args[1], is(frame.args[3]), ''
	local anchor = is(frame.args[2]) or topage
	local basepagename, subpagename = mw.title.getCurrentTitle().rootText, mw.title.getCurrentTitle().subpageText
	if (basepagename == 'ТСД3' or basepagename == 'ТСД2' or basepagename == 'ТСД1' or basepagename == 'ТСД') then 
		if (subpagename == 'ДО') then sufix = '/ДО' end
	elseif (basepagename== 'Толковый словарь. Том 1 (Даль 1903).djvu'
		or basepagename == 'Толковый словарь. Том 2 (Даль 1905).djvu'
		or basepagename == 'Толковый словарь. Том 3 (Даль 1907).djvu'
		or basepagename == 'Толковый словарь. Том 4 (Даль 1909).djvu')	then basepagename = 'ТСД3'
		if (not is_article) then sufix = '/ДО' end
	elseif (basepagename== 'Толковый словарь Даля (2-е издание). Том 1 (1880).pdf'
		or basepagename == 'Толковый словарь Даля (2-е издание). Том 2 (1881).pdf'
		or basepagename == 'Толковый словарь Даля (2-е издание). Том 3 (1882).pdf'
		or basepagename == 'Толковый словарь Даля (2-е издание). Том 4 (1882).pdf')	then basepagename = 'ТСД2'
		if (not is_article) then sufix = '/ДО' end
	elseif (basepagename== 'Толковый словарь Даля (1-е издание). Часть 1 (1863).pdf'
		or basepagename == 'Толковый словарь Даля (1-е издание). Часть 2 (1865).pdf'
		or basepagename == 'Толковый словарь Даля (1-е издание). Часть 3 (1865).pdf'
		or basepagename == 'Толковый словарь Даля (1-е издание). Часть 4 (1866).pdf')	then basepagename = 'ТСД1'
		if (not is_article) then sufix = '/ДО' end
	else basepagename = 'ТСД'
	end
	
	return '[['..basepagename..'/'..str_registr(topage)..sufix..'|'..anchor..']]'
end

-----------

--[=[
-- Возврат: первая буква слова статьи ({{SUBPAGE}}) в верхнем регистре. Иначе если подан входной параметр слово, то возврат его первой буквы.
function p.first_letter_subpage(frame) return first_letter_subpage(frame.args[1]) end
function first_letter_subpage(pagename)
	if not is(pagename) then return end
	local nameparts = mw.text.split(pagename, "/")
	return first_letter_uppercase(nameparts[2])
end

function p.first_letter_uppercase(frame) return first_letter_uppercase(frame.args[1]) end
function first_letter_uppercase(word)
    local fb = mw.ustring.sub(word, 1, 1)
    if (fb == 'і' or fb == 'І' or fb == 'i' or fb == 'I') then return 'І' end --баг Lua с распознаванием буквы
    local _, _, b = mw.ustring.find(word, '([а-яёѣѵіѳА-ЯЁѢѴІѲѦ])')
    return mw.ustring.upper(b)
end
--]=]

-----------
--[=[
-- Возвращает номер тома. Параметры: номер издания, название в ДО или номер тома.
function p.tom(frame)
	return moduleFunc.tomcalc(frame)
end


-- Возвращает год издания тома Словаря Даля. Входные параметры: номер издания (1—3), том или название в ДО (если отлично от названия статьи) иначе не надо.
function p.god_toma(frame)
	return moduleFunc.god_toma(frame)
end


-- Возвращает ссылку на индекс 1—3-го издания. Параметры: номер издания (1—3), том, nazvanie_DO, страница скана, страницы книги. При неуказанной странице скана вернёт ссылку на индекс тома, при указаной — на страницу в индексе.
function p.indexlink(frame)
	return moduleFunc.indexlink(frame)
end
--]=]

------- Словники

-- Для ссылок на индексы страниц в словниках.
function p.indexlink_slovnik_term(frame) 
	local moduleHeader = require('Module:Header')
	local izdanie, pagename, pagebook = frame.args[1], frame.args[2], frame.args[3]
	local tom = moduleHeader.volume_calc({ args = { 'ТСД'..tostring(izdanie), pagename } })
	-- local tom = data[tonumber(izdanie)]['tom']
	local pagebook = moduleHeader.pagenum({ args = { 'hard', ['phard'] = frame.args[3] }})
	project_abbr = {'ТСД1', 'ТСД2', 'ТСД3'}
	local interleaved
	if izdanie == '1' then project = 'ТСД1' 
	elseif izdanie == '2' then project = 'ТСД2'
	elseif izdanie == '3' then project = 'ТСД3'; interleaved = 1 end
	local pagescan = moduleHeader.pagescan_calc({ args = { project, tom, pagebook}})
	-- return moduleFunc.indexlink({ args = { izdanie, tom, pagescan, pagebook, ['linkonly'] = frame.args['linkonly'] }})
	return indexlink( izdanie, tom, pagescan, pagebook, frame.args['linkonly'] )
end


-- источник для шапки словников. параметры: издание, назв. словника
function p.indexlink_slovnik(frame)	
	local izdanie, nazvslovnika = tonumber(mw.ustring.sub(frame.args[1], 1,1)), frame.args[2]
	local volume = moduleHeader.volume_calc({ args = {'ТСД'..tostring(izdanie), nazvslovnika} })
	-- return moduleFunc.indexlink({ args = { izdanie, volume } })
	return indexlink(izdanie, volume)
end

function first_letter_uppercase(word)
    local fb = mw.ustring.sub(word, 1, 1)
    if (fb == 'і' or fb == 'І' or fb == 'i' or fb == 'I') then return 'І' end --баг Lua с распознаванием буквы
    local _, _, b = mw.ustring.find(word, '([а-яёѣѵіѳА-ЯЁѢѴІѲѦ])')
    return mw.ustring.upper(b)
end
-- Для шапок статей. Возвращает оглавление словника, где каждая буква является вики-ссылкой. Букву статьи выделяет тэгом <big>.
function p.oglavlenie_slovnika()
	local izdanie = data["izdanie"]
	-- local bukva_statyi = ''
	if is(data['title']) then bukva_statyi = first_letter_uppercase(data['title']) end
    -- local bukva_statyi = moduleFunc.first_letter_uppercase({args={data['title']}})
    local str = {}
    for _, bukvi in pairs(bukvi_toma) do
        for _, b in pairs(bukvi) do
        	if b == 'Ъ' then b = 'Ъ-Ы-Ь' end
        	if b ~= 'Ы' and b ~= 'Ь' then 
	        	s = '[[ТСД-словник/'..izdanie..'/'..b..'|'..b..']]'
		        if (bukva_statyi == b) then s = '<big>' .. s .. '</big>' end
		        table.insert(str, s)
	        end
		end
	end
    return table.concat( str, ' ' )
end


-- Название статьи: "Алый" (ДО и СО совпадают) или "Алык [Алыкъ]" (ДО и СО не совпадают)
function p.nazvanie(frame)
	-- local data = mw.loadData('Модуль:ТСД/Данные по странице')
	-- local nazv_do, nazv_so, oldspell = is(frame.args[1]), is(frame.args[2]), is(data['oldspell'])
	
	for i = 3, 1, -1 do
		if is(data[i]['termin_so']) then 
			nazv_so = data[i]['termin_so']
			nazv_do = data[i]['termin_do'] 
			break
			end
	end
	
	if is(data['oldspell']) then
		if nazv_do == nazv_so then return nazv_do		
		elseif not is(nazv_so) and is(nazv_do) then return nazv_do
		elseif is(nazv_so) and not is(nazv_do) then return nazv_so
		else return nazv_do .. ' / ' .. nazv_so
		end
	else
		if nazv_do == nazv_so then return nazv_so
		elseif is(nazv_so) and not is(nazv_do) then return nazv_so
		elseif not is(nazv_so) and is(nazv_do) then return nazv_do
		else return nazv_so .. ' / ' .. nazv_do
		end
	end
end

--[==[
-- Полосы навигации ПРЕДЫДУЩАЯ/СЛЕДУЮЩАЯ статья
-- Отличаются ли предыдущие/следующие статьи в словниках. Если отличаются больше чем в 1 словнике использовать субнавигацию, иначе обычную навигацию
-- Параметры: предыдущий1,следующий1, предыдущий2,следующий2, предыдущий3,следующий3
function nav_from_wordlists(wordlist, pred1, sled1, pred2, sled2, pred3, sled3)
	local d = mw.loadData('Модуль:ТСД/Данные по странице')
	require ('Модуль:Header')
	--wordlist = wordlist()
	--wordlist
	
	--[=[
	local w = {		{pred1, pred2, pred3},  		{sled1, sled2, sled3}		}  -- w[предыдущие, следующие][номер_издания]
	local listname, prev, next, str, safe, empty = '', '', '', '', {args={safe=true}}, {args={}}
	for i = 1, 3 do
		listname = 'ТСД-словник/'..wordlist..'/'..i..'-е изд.'
		if makelink(safe, "title", listname) then
			w[1][i] = makelink(empty, "previous", listname)
			w[2][i] = makelink(empty, "next", listname)
		end
	end 
	--]=]
	
	local nav1, nav2, nav3, p
	--local w = {{pred1, pred2, pred3},  {sled1, sled2, sled3}}  -- sl[предыдущие, следующие][номер_издания]
	for i = 1, 2 do
		if i == 1 then p = 'previous' else p = 'next' end
		
		if is(d[1][i]) and is(d[2][i]) and d[1][i] ~= d[2][i] then 
			nav1, nav2 = true, true  end  -- название страницы различается в словниках 1 и 2
		if is(d[1][i]) and is(d[3][i]) and d[1][i] ~= d[3][i] then 
			nav1, nav3 = true, true  end  -- ......................................... 1 и 3
		if is(d[2][i]) and is(d[3][i]) and d[2][i] ~= d[3][i] then 
			nav2, nav3 = true, true  end  -- ......................................... 2 и 3
	end

	if nav1 then 
		str = str.. mw.getCurrentFrame():expandTemplate {title='sub-nav', args={d[1]['previous'], d[1]['next'], '[['..d[1]['wordlist_str']..'|1 издание]]'}}
		--str = '{{sub-nav|[[ТСД/'..pred1..'|'..pred1anchor..']] | [[ТСД/'..sled1..'|'..sled1anchor..']] | [['..slovnik1..'|1 издан{{и}}е]]}}' 
		end
	if nav2 then 
		str = str.. mw.getCurrentFrame():expandTemplate {title='sub-nav', args={d[2]['previous'], d[2]['next'], '[['..d[2]['wordlist_str']..'|2 издание]]'}}
		-- str = str.. '{{sub-nav|[[ТСД/'..pred2..'|'..pred2anchor..']] | [[ТСД/'..sled2..'|'..sled2anchor..']] | [['..slovnik2..'|2 издан{{и}}е]]}}' 
		end
	if nav3 then
		str = str.. mw.getCurrentFrame():expandTemplate {title='sub-nav', args={d[3]['previous'], d[3]['next'], '[['..d[3]['wordlist_str']..'|3 издание]]'}}
		--str = str.. '{{sub-nav|[[ТСД/'..pred3..'|'..pred3anchor..']] | [[ТСД/'..sled3..'|'..sled3anchor..']] | [['..slovnik3..'|3 издан{{и}}е]]}}' 
		end
	-- else ДЕЛАЕМ ОДНУ НАВИГАЦИЮ посредством "|ПРЕДЫДУЩИЙ/СЛЕДУЮЩИЙ"

	--return nav
	--return prev, next, prev1, prev2, prev3, next1, next2, next3
	--str = d[1]['previous'] .. d[1]['next'] .. '[['..d[1]['wordlist_str']
	return str
end 
function s.nav_from_wordlists(frame) return nav_from_wordlists(frame.args[1], frame.args[2], frame.args[3], frame.args[4], frame.args[5], frame.args[6], frame.args[7]) end
--]==]	

---------- для [[шаблон:тсд страница словника]] --

-- Выбор словника ТСД-2 по номеру страницы скана
function p.SelectSlovnikByPageNumber(frame)
	local pname = mw.title.getCurrentTitle().rootText --имя страницы
	local ps =  mw.title.getCurrentTitle().subpageText -- номер скана
	local _,_, tom = mw.ustring.find(pname, "Том (%d)")
	tom = tonumber(tom)
	local p = pagecalc_scan(ps, tom) -- номер страницы книги
	local bukva, str = '', ''
	
	--Словники: имена и интервалы номеров страниц
	local pintervals = {
		--Все словники-интервалы, для точеченого парсинга. На случай если  парсинг всех словников будет медленным. Но вроде парсинг всего 3-го тома (буква "П") мгновенный.
		{ --том 1
			['А']={1, 32}, ['Б']={32, 87},['Би']={87, 161}, ['В']={161, 221},['Во']={221, 283},['Вы']={283, 347}, ['Г']={348, 422},['Д']= {422, 481},['Дон']= {481, 527}, ['Е']={538, 538},['Ж']={539, 564}, ['З']={564, 613},['Зал']={613, 659},['Заст']={659, 723}
			},
		{ --том 2
			['И']={1, 35}, ['Изу']={35, 67}, ['І']= {67, 68}, ['К']={68, 106}, ['Ки']={107, 162}, ['Кор']={162, 234}, ['Л']={234, 292}, ['М']={293, 382}, ['Н']={383, 429}, ['Нак']={429, 471}, ['Нар']={471, 517}, ['Не']={517, 581}, ['О']={581, 651}, ['Обц']={651, 712}, ['Ор']={712, 768}, ['Ото']={768, 807}, 
			}, 
		{ --том 3
			['П']={1, 60}, ['Перел']={60, 110}, ['Пи']={110, 161}, ['Под']={161, 214}, ['Подт']={214, 244}, ['Пок']={244, 298}, ['Поо']={298, 319}, ['Пор']={319, 362}, ['Пот']={362, 419}, ['Приг']={419, 483}, ['Про']={483, 523}, ['Прор']={523, 575},
			}, 
		{ --том 4
			['Р']={1, 64}, ['Расп']={64, 128}, ['С']={128, 219}, ['Сл']={219, 292}, ['Сп']={292, 393}, ['Т']={394, 468}, ['У']={468, 545}, ['Ф']={546, 556}, ['Х']={556, 586}, ['Ц']={586, 596}, ['Ч']={597, 635}, ['Ш']={636, 671}, ['Щ']={671, 679}, {679, 680, 'Ъ-Ы-Ь'}, ['Ѣ']={680, 682}, ['Э']={683, 687}, ['Ю']={687, 691}, ['Ѧ']={691, 691}, ['Я']={691, 704}, ['Ѳ']={704, 704}, ['Ѵ']={704, 704}
			}
	}
	--[===[
		{ ['А']={1,32},['Б']={32,161},['В']={161,347},['Г']={348,422},['Д']={422,527},['Е']={538,538},['Ж']={539,564},['З']={564,723} },--том 1
		{ ['И']={1,67},['І']={67,68},['К']={68,234},['Л']={234,292},['М']={293,382},['Н']={383,581},['О']={581,807}, }, --том 2
		{ ['П']={1,575}, }, --том 3
		{ ['Р']={1,128},['С']={128,393},['Т']={394,468},['У']={468,545},['Ф']={546,556},['Х']={556,586},['Ц']={586, 596},['Ч']={597,635},['Ш']={636,671},['Щ']={671,679},['Ъ-Ы-Ь']={679,680},['Ѣ']={680,682},['Э']={683,687},['Ю']={687,691},['Ѧ']={691,691},['Я']={691,704},['Ѳ']={704,704},['Ѵ']={704,704} }	--том 4
	}
	for b, pi in pairs(pintervals[tom]) do
		if p >= pi[1] and p <= pi[2]  then 
			bukva = b 
			--bukva2 = next(pintervals[tom], b) -- и след. буква на странице
			break end
	end
	
	--части словников для каждой буквы
	local slovniki = { 
		['А']={'А'}, ['Б']={'Б','Би'}, ['В']={'В','Во','Вы'}, ['Г']={'Г'},
		['Д']={'Д','Дон'}, ['Е']={'Е'}, ['Ж']={'Ж'}, ['З']={'З','Зал','Заст'},
		['И']={'И','Изу'}, ['І']={'І'}, ['К']={'К','Ки','Кор'}, ['Л']={'Л'},
		['М']={'М'}, ['Н']={'Н','Нак','Нар','Не'}, ['О']={'О','Обц','Ор','Ото'},
		['П']={'П','Перел','Пи','Под','Подт','Пок','Поо','Пор','Пот','Приг','Про','Прор'},
		['Р']={'Р','Расп'}, ['С']={'С','Сл','Сп'}, ['Т']={'Т'}, ['У']={'У'},
		['Ф']={'Ф'}, ['Х']={'Х'}, ['Ц']={'Ц'}, ['Ч']={'Ч'}, ['Ш']={'Ш'}, ['Щ']={'Щ'},
		['Ъ-Ы-Ь']={'Ъ-Ы-Ь'}, ['Ѣ']={'Ѣ'}, ['Э']={'Э'}, ['Ю']={'Ю'}, ['Ѧ']={'Ѧ'}, ['Я']={'Я'}, ['Ѳ']={'Ѳ'}, ['Ѵ']={'Ѵ'}
	}
	for _, s in ipairs(slovniki[bukva]) do
		str = str .. frame:callParserFunction('#lst', 'ТСД-словник/'..s..'/2-е изд.', p)
	end

	
	--if bukva2 ~= nil then 
		--str = str .. frame:callParserFunction('#lst', 'ТСД-словник/'..slovniki[bukva2][1]..'/2-е изд.', p)
	--	bukva2 = next(slovniki, bukva)
		-- str = str .. frame:callParserFunction('#lst', 'ТСД-словник/'..slovniki[bukva2][1]..'/2-е изд.', p)
		--end
	--return frame:callParserFunction('#lst', 'ТСД-словник/'..bukva..'/2-е изд.', p)
	-- return str --bukva
	--return bukva2
	--]===]	
	
	for bukva, pi in pairs(pintervals[tom]) do
		if p >= pi[1] and p <= pi[2]  then 
		str = str .. frame:callParserFunction('#lst', 'ТСД-словник/2/'..bukva, p) end
	end
	return str
end



function p.indexlinks_all()
	local indexlinks_all = ''
	for i = 1, 3 do  -- izdanie
		if data[i]['tom'] then
			local indexlink = indexlink(i, data[i]['tom'], data[i]['numpage_scan'], data[i]['numpage_book'])
		    if indexlink then
		    	-- оформление: ' • ' между ссылками
		    	if is(indexlinks_all) then indexlinks_all = indexlinks_all..' • '..indexlink
				else indexlinks_all = indexlink	end
			end
		end
	end
	return indexlinks_all
end


-- Возвращает ссылку на индекс 1—3-го издания. Параметры: номер издания (1—3), том, nazvanie_DO, страница скана, страницы книги. При неуказанной странице скана вернёт ссылку на индекс тома, при указаной — на страницу в индексе.
function p.indexlink(frame) return indexlink(frame.args[1], frame.args[2], frame.args[3], frame.args[4], frame.args['linkonly']) end
function indexlink(izdanie, tom, pagescan, pagebook, linkonly)
    local izdanie, tom = tonumber(izdanie), tostring(tom)
    local god = data['god_toma'][izdanie][tonumber(tom)]
    if not is(god) then return '' end
    if not is(pagescan) then pagescan = nil end

    if (izdanie == 1) then
        if (pagescan ~= nil) then
            if (linkonly == nil) then
                return '[[Страница:Толковый словарь Даля (1-е издание). Часть ' .. tom .. ' (' .. god .. ').pdf/' .. pagescan .. '|ТСД-1 (' .. god .. ') т. ' .. tom .. ', с. ' .. pagebook .. ']]'
            else
                return 'Страница:Толковый словарь Даля (1-е издание). Часть ' .. tom .. ' (' .. god .. ').pdf/' .. pagescan
            end
        else
            if (linkonly == nil) then
                return '[[Индекс:Толковый словарь Даля (1-е издание). Часть ' .. tom .. ' (' .. god .. ').pdf|ТСД-1 (' .. god .. ') т. ' .. tom .. ']]'
            else
                return 'Индекс:Толковый словарь Даля (1-е издание). Часть ' .. tom .. ' (' .. god .. ').pdf'
            end
        end
    elseif (izdanie == 2) then
        if (pagescan ~= nil) then
            if (linkonly == nil) then
                return '[[Страница:Толковый словарь Даля (2-е издание). Том ' .. tom .. ' (' .. god .. ').pdf/' .. pagescan .. '|ТСД-2 (' .. god .. ') т. ' .. tom .. ', с. ' .. pagebook .. ']]'
            else
                return 'Страница:Толковый словарь Даля (2-е издание). Том ' .. tom .. ' (' .. god .. ').pdf/' .. pagescan
            end
        else
            if (linkonly == nil) then
                return '[[Индекс:Толковый словарь Даля (2-е издание). Том ' .. tom .. ' (' .. god .. ').pdf|ТСД-2 (' .. god .. ') т. ' .. tom .. ']]'
            else
                return 'Индекс:Толковый словарь Даля (2-е издание). Том ' .. tom .. ' (' .. god .. ').pdf'
            end
        end
    elseif (izdanie == 3) then
        if (pagescan ~= nil) then
            if (linkonly == nil) then
                return '[[Страница:Толковый словарь. Том ' .. tom .. ' (Даль ' .. god .. ').djvu/' .. pagescan .. '|ТСД-3 (' .. god .. ') т. ' .. tom .. ', с. ' .. pagebook .. ']]'
            else
                return 'Страница:Толковый словарь. Том ' .. tom .. ' (Даль ' .. god .. ').djvu/' .. pagescan
            end
        else
            if (linkonly == nil) then
                return '[[Индекс:Толковый словарь. Том ' .. tom .. ' (Даль ' .. god .. ').djvu|ТСД-3 (' .. god .. ') т. ' .. tom .. ']]'
            else
                return 'Индекс:Толковый словарь. Том ' .. tom .. ' (Даль ' .. god .. ').djvu'
            end
        end
    end
end





return p