UWAGA
Strona jest ponownie oddana do uzytku po zabiegach konfiguracyjnych. Jeśli zobaczą Państwo na niej jakieś błedy techniczne, prosimy o ich zgłoszenie.

Większość artykułów w portalu to nasze własne teksty z kluczowych dziedzin związanych z naszą misją. Spora część materiałów pochodzi też z polskiej wersji Wikipedii, gdzie były odrzucone ze względu na politykę redaktorów (przeczytaj o krytyce Wikipedii). Są też i takie, które zostały przeniesione na nasze strony, gdyż stanowią istotne uzupełnienie merytorycznej treści naszego serwisu. Wszystkie artykuły podlegają edycji przez naszych Użytkowników, dlatego ich wersje mogą się różnić od prezentowanych na innych witrynach.

Moduł:IPA

Z Wedapedia
Przejdź do nawigacji Przejdź do wyszukiwania

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:IPA/opis

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
			local unknown = false
			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 t.link) or ipadata.unknownSound
					last = t.last and last or t
				elseif mw.ustring.match(s,"[^%s']") then
					unknown = true
					s = mw.text.nowiki(s)
					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
	 
			if unknown
			and (mw.title.getCurrentTitle().namespace == 0)
			then
				table.insert(result,ipadata.checkCat)
			end
			
			return table.concat(result,"")
		end
	 
		local parts = split(arg)
		local result = decorate(parts)
		return result
	end,

}