Модуль:Ссылки на закон

Материал из Справочника наблюдателя
Перейти к:навигация, поиск

(i)      Описание модуля[]


В дорожных картах и других подобных таблицах, где присутствует множество ссылок на законы, используется сокращенная запись. Сейчас применяется первый из представленных ниже вариантов. Его недостатки: он не так короток, как хотелось бы (основная проблема таблиц — дефицит места), во-первых, и он нелогичен (закон-пункт-статья), во-вторых. Но зато он читается даже непосвященными и содержит минимальное число запятых.

Так какой же вариант лучше?

  • ФЗГ: п. 3, 7, 8 ст. 30, п. 20, 27 ст. 29; ЗМО: ч. 3, 7, 8 ст. 20, ч. 15 ст. 19
  • ФЗГ: ст. 30, п. 3, 7, 8, ст. 29, п. 20, 27; ЗМО: ст. 20, ч. 3, 7, 8, ст. 19, ч. 15
  • ФЗГ: 30:3, 7, 8; 29:20, 27; ЗМО: 20:3, 7, 8; 19:15
  • ФЗГ: 30:3,7,8, 29:20,27; ЗМО: 20:3,7,8, 19:15
  • ФЗГ: 30 (3, 7, 8), 29 (20, 27); ЗМО: 20 (3, 7, 8), 19 (15)

Нотация в примерах 3−4 использует принципы библейских ссылок (см.вп:Сокращения названий книг Библии в Википедии). Конечно, такая запись будет сопровождаться текстом «Ссылка на норму закона (статья : пункт)» в заголовке колонки.


local p={}

-- ФЗГ: п. 3, 7, 8 ст. 30, п. 20, 27 ст. 29; ЗМО: ч. 3, 7, 8 ст. 20, ч. 15 ст. 19
-- ФЗГ: ст. 30, п. 3, 7, 8, ст. 29, п. 20, 27; ЗМО: ст. 20, ч. 3, 7, 8, ст. 19, ч. 15
-- ФЗГ: 30:3, 7, 8; 29:20, 27; ЗМО: 20:3, 7, 8; 19:15
-- ФЗГ: 30:3,7,8, 29:20,27; ЗМО: 20:3,7,8, 19:15

-------------------------------------------------------------------------
-- Функция addBill — формирование ссылки на закон 
-- Параметры:
-- text			— обрабатываемый текст
-- code			— обозначение акта для печатаемого текста (например, «ФЗГ»)
-- addc			— обозначение статей для печатаемого текста (по умолчанию «ст.»)
-- sect			— обозначение след. уровня для печатаемого текста (обычно «п.»)
-- subs			— обозначение след. уровня для печатаемого текста (обычно «п/п»)
-- hyperlink 	— создавать гиперссылку
-- link			— основная часть названия для гиперссылок (например, «НПА:Об основных гарантиях....67−ФЗ)»)
-- addl			— дополнительная часть названия для гиперссылок (например (и по умолчанию), «:Статья »)

-- структуру текста пока полностью сохраняю из нынешних дорожных карт

-- function addBill (view, textPara, code, link, addl, addc, sect, subs)
-- billModule.parseBill (textPara, code, addc, sect, subs, view == 'Экран', link, addl)
function    p.parseBill (text,     code, addc, sect, subs, hyperlink, link, addl, filter)
	if (text or '') == '' then
		return nil
	end
	if not addl then
		addl = ':Статья '
	end
	if not addc then
		addc = 'ст.'
	end
	local testA, testS = mw.ustring.match (text, '^%s*(%d[%d%.%-−]*)%s*:([^,;]+)$')
	if testA then
		text = '<_' .. testA .. ':' .. mw.ustring.gsub (testS, '%+', ', ') .. '_>'
	else
		testA = mw.ustring.match (text, '^%s*(%d[%d%.%-−]*)%s*$')
		if testA then
			text = '<_' .. testA .. '_>'
		end
	end
	if hyperlink then
--		text = mw.ustring.gsub (text , '<_([^#][^:]-)_>', '[[' .. link .. addl .. '%1|' .. addc .. '&nbsp;%1]]')
		text = mw.ustring.gsub (text , '<_([^#][^:_]*)_>', '[[' .. link .. addl .. '%1|' .. addc .. '&nbsp;%1]]')
--		text = mw.ustring.gsub (text, '<_([^#][^:]-):%s*(%d[^:]-)_>', '[[' .. link .. addl .. '%1|' .. sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1]]')
		text = mw.ustring.gsub (text, '<_([^#][^:]*):%s*(%d[^:_]*)_>', '[[' .. link .. addl .. '%1|' .. sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1]]')
--		text = mw.ustring.gsub (text, '<_([^#][^:]-):%s*(%d[^:]-):%s*([^:]-)_>', '[[' .. link .. addl .. '%1|' .. subs .. '&nbsp;%3&nbsp;' .. sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1]]')
		text = mw.ustring.gsub (text, '<_([^#][^:]*):%s*(%d[^:]*):%s*([^:_]+)_>', '[[' .. link .. addl .. '%1|' .. subs .. '&nbsp;%3&nbsp;' .. sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1]]')
--		text = mw.ustring.gsub (text, '<_([^#][^:]-):(.-)_>', '[[' .. link .. addl .. '%1|%2&nbsp;' .. addc .. '&nbsp;%1]]')
		text = mw.ustring.gsub (text, '<_([^#][^:]*):([^_]+)_>', '[[' .. link .. addl .. '%1|%2&nbsp;' .. addc .. '&nbsp;%1]]')
	else	
		text = mw.ustring.gsub (text, '<_([^#][^:]-)_>', addc .. '&nbsp;%1')
		text = mw.ustring.gsub (text, '<_([^#][^:]-):%s*(%d[^:]-)_>', sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1')
		text = mw.ustring.gsub (text, '<_([^#][^:]-):%s*(%d[^:]-):%s*([^:]-)_>', subs .. '&nbsp;%3&nbsp;' .. sect .. '&nbsp;%2&nbsp;' .. addc .. '&nbsp;%1')
		text = mw.ustring.gsub (text, '<_([^#][^:]-):(.-)_>', '%2&nbsp;' .. addc .. '&nbsp;%1')
	end
	return '<b>' .. code .. ':</b>&nbsp;' .. filter(text)
end

return p