Moduł:IPA

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Moduł techniczny wspierający działanie szablonu {{IPA}}.

preprocess[edytuj]

Funkcja dekorująca zapis wymawianych dźwięków na linki do odpowiadających im artykułów. Funkcja pobiera zapis z parametru {{{1}}} przekazanego do szablonu {{IPA}}. Mapa dźwięków i odpowiadających im artykułów znajduje się w module danych Moduł:IPA/data.

Błędy[edytuj]

Błędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.

Zobacz też[edytuj]

return {
	
	preprocess = function (frame)
		local arg = frame:getParent().args[1]
		if not arg  then
			-- missing arguments
			return nil
		end
		
		if #arg == 0 then
			-- empty argument
			return nil
		end
		
		if not mw.ustring.isutf8(arg) then
			-- invalid input is left as is
			return arg
		end
		
		local ipadata = mw.loadData( 'Moduł:IPA/data' )
	 
		local split = function(text)
			local result = {}
			local joined = false
			local current = ""
			for code in mw.ustring.gcodepoint(text) do
				local c = mw.ustring.char(code)
				if ipadata.joining[code] then
					current = current .. c
					joined = true
				elseif joined or ipadata.combining[code] then
					current = current .. c
					joined = false
				else
					if current ~= "" then
						table.insert(result, current)
					end
					current = c
				end
			end
	 
			-- append last part
			if current ~= "" then
				table.insert(result, current)
			end
	 
			return result
		end
	 
		local decorate = function(parts)
			local last = false
			local currentLink = nil
			local result = {}
			local count = #parts
			table.insert(parts,"") -- append empty text to simplify loop below
			local i = 1
			while i <= count do
				local s, n = parts[i]..parts[i+1], 2
				local t = ipadata.sounds[s]
				if not t then
					s, n = parts[i], 1
					t = ipadata.sounds[s]
				end
	 
				local link = nil
				if t then
					t = t.see and ipadata.sounds[t.see] or t
					link = ((t.last and last) and last[t.last] or ("w:"..t.link)) or ipadata.unknownSound
					last = t.last and last or t
				elseif mw.ustring.match(s,"%S") then
					link = ipadata.unknownSound
					last = false
				else
					last = false
				end
	 
				-- append the optional title
				if link ~= currentLink then
					if currentLink then
						table.insert(result,"]]")
						currentLink = nil
					end
					if link then
						table.insert(result,"[[")
						table.insert(result,link)
						table.insert(result,"|")
						currentLink = link
					end
				end
	 
				-- append the sound
				table.insert(result,s)
	 
				-- move to next sound in the input
				i = i + n
			end
	 
			if currentLink then
				table.insert(result, "]]")
			end
	 
			return table.concat(result,"")
		end
	 
		local parts = split(arg)
		local result = decorate(parts)
		return result
	end,

}