<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="id">
	<id>https://wiki.javasatu.com/index.php?action=history&amp;feed=atom&amp;title=Modul%3AIPA</id>
	<title>Modul:IPA - Riwayat revisi</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.javasatu.com/index.php?action=history&amp;feed=atom&amp;title=Modul%3AIPA"/>
	<link rel="alternate" type="text/html" href="https://wiki.javasatu.com/index.php?title=Modul:IPA&amp;action=history"/>
	<updated>2026-04-07T05:16:25Z</updated>
	<subtitle>Riwayat revisi halaman ini di wiki</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.javasatu.com/index.php?title=Modul:IPA&amp;diff=11384&amp;oldid=prev</id>
		<title>Adminjavasatu: 1 revisi diimpor</title>
		<link rel="alternate" type="text/html" href="https://wiki.javasatu.com/index.php?title=Modul:IPA&amp;diff=11384&amp;oldid=prev"/>
		<updated>2023-11-04T02:51:43Z</updated>

		<summary type="html">&lt;p&gt;1 revisi diimpor&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;id&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisi sebelumnya&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisi per 4 November 2023 09.51&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;id&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Tidak ada perbedaan)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Adminjavasatu</name></author>
	</entry>
	<entry>
		<id>https://wiki.javasatu.com/index.php?title=Modul:IPA&amp;diff=11383&amp;oldid=prev</id>
		<title>dw&gt;Nyilvoskt pada 25 September 2023 20.09</title>
		<link rel="alternate" type="text/html" href="https://wiki.javasatu.com/index.php?title=Modul:IPA&amp;diff=11383&amp;oldid=prev"/>
		<updated>2023-09-25T20:09:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Halaman baru&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('strict')&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function multiFind(s, patterns, init)&lt;br /&gt;
	local i, j = mw.ustring.find(s, patterns[1], init)&lt;br /&gt;
	for n = 2, #patterns do&lt;br /&gt;
		local i2, j2 = mw.ustring.find(s, patterns[n], init)&lt;br /&gt;
		if i2 and (not i or i2 &amp;lt; i) then&lt;br /&gt;
			i, j = i2, j2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return i, j&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wrapAtSpaces(s)&lt;br /&gt;
	return mw.ustring.gsub(s, '(%s+)', '&amp;lt;span class=&amp;quot;wrap&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wrapAtSpacesSafely(s)&lt;br /&gt;
	local patterns = {&lt;br /&gt;
		'%[%[[^%]|]-%s[^%]|]-|', -- Piped links&lt;br /&gt;
		'&amp;lt;/?[A-Za-z][^&amp;gt;]-%s[^&amp;gt;]-&amp;gt;' -- HTML tags&lt;br /&gt;
	}&lt;br /&gt;
	s = mw.ustring.gsub(s, '%[%[([^%]|]-%s[^%]|]-)%]%]', '[[%1|%1]]') -- Pipe all links&lt;br /&gt;
	local t = {}&lt;br /&gt;
	local init&lt;br /&gt;
	while true do&lt;br /&gt;
		local i, j = multiFind(s, patterns, init)&lt;br /&gt;
		if not i then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		local pre = wrapAtSpaces(mw.ustring.sub(s, init, i - 1)) -- What precedes the match&lt;br /&gt;
		table.insert(t, pre)&lt;br /&gt;
		table.insert(t, mw.ustring.sub(s, i, j)) -- The match&lt;br /&gt;
		init = j + 1&lt;br /&gt;
	end&lt;br /&gt;
	local post = wrapAtSpaces(mw.ustring.sub(s, init)) -- What follows the last match&lt;br /&gt;
	table.insert(t, post)&lt;br /&gt;
	return table.concat(t)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function checkNamespace(isDebug)&lt;br /&gt;
	return isDebug or require('Module:Category handler').main({ true })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderCats(cats, isDebug)&lt;br /&gt;
	if not cats[1] or not checkNamespace(isDebug) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	local t = {}&lt;br /&gt;
	for _, v in ipairs(cats) do&lt;br /&gt;
		table.insert(t, string.format(&lt;br /&gt;
			'[[%sCategory:%s]]',&lt;br /&gt;
			isDebug and ':' or '',&lt;br /&gt;
			v&lt;br /&gt;
		))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(t)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveSynonym(s)&lt;br /&gt;
	return mw.loadData('Module:Lang/ISO 639 synonyms')[s] or s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLangName(code, link)&lt;br /&gt;
	return require('Module:Lang')._name_from_tag({&lt;br /&gt;
		code,&lt;br /&gt;
		link = link,&lt;br /&gt;
		-- Without linking, &amp;quot;{{IPA}}&amp;quot; gets expanded in some contexts&lt;br /&gt;
		template = '[[Template:IPA|IPA]]'&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function linkLang(name, target, link)&lt;br /&gt;
	return link == 'yes' and string.format(&lt;br /&gt;
		'[[%s|%s]]',&lt;br /&gt;
		target or name .. ' language',&lt;br /&gt;
		name&lt;br /&gt;
	) or name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local ret, cats = {}, {}&lt;br /&gt;
	local isDebug = args.debug == 'yes'&lt;br /&gt;
	local s, fullLangCode&lt;br /&gt;
	&lt;br /&gt;
	-- Guide-linking mode&lt;br /&gt;
	if args[2] and args[2] ~= '' then&lt;br /&gt;
		local data = mw.loadData('Module:IPA/data')&lt;br /&gt;
		local isGeneric = args.generic == 'yes'&lt;br /&gt;
		s = args[2]&lt;br /&gt;
		&lt;br /&gt;
		-- Split tag into language and region codes&lt;br /&gt;
		local langCode = args[1]:gsub('%-.*', ''):lower()&lt;br /&gt;
		langCode = resolveSynonym(langCode)&lt;br /&gt;
		local regionCode = args[1]:match('%-(.+)')&lt;br /&gt;
		if regionCode and regionCode:sub(1, 2) ~= 'x-' then&lt;br /&gt;
			regionCode = regionCode:upper()&lt;br /&gt;
		end&lt;br /&gt;
		local langData = data.langs[langCode] or {}&lt;br /&gt;
		if regionCode then&lt;br /&gt;
			if langData.dialects and langData.dialects[regionCode] then&lt;br /&gt;
				-- Overwrite language data with the dialect's&lt;br /&gt;
				local newLangData = {}&lt;br /&gt;
				for k, v in pairs(langData) do&lt;br /&gt;
					if k ~= 'dialects' then&lt;br /&gt;
						newLangData[k] = v&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				local dialectData = langData.dialects[regionCode]&lt;br /&gt;
				if dialectData.aliasOf then&lt;br /&gt;
					-- Use the canonical region code&lt;br /&gt;
					regionCode = dialectData.aliasOf&lt;br /&gt;
					dialectData = langData.dialects[regionCode]&lt;br /&gt;
				end&lt;br /&gt;
				-- Lowercase IANA variant&lt;br /&gt;
				if dialectData.isVariant then&lt;br /&gt;
					regionCode = regionCode:lower()&lt;br /&gt;
				end&lt;br /&gt;
				for k, v in pairs(dialectData) do&lt;br /&gt;
					newLangData[k] = v&lt;br /&gt;
				end&lt;br /&gt;
				langData = newLangData&lt;br /&gt;
			else&lt;br /&gt;
				isGeneric = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		fullLangCode = regionCode and langCode .. '-' .. regionCode or langCode&lt;br /&gt;
		&lt;br /&gt;
		local langName = langData.name&lt;br /&gt;
			and linkLang(langData.name, langData.link, args.link)&lt;br /&gt;
			or getLangName(fullLangCode, args.link)&lt;br /&gt;
		if langName:sub(1, 5) == '&amp;lt;span' then&lt;br /&gt;
			-- Module:Lang has returned an error&lt;br /&gt;
			return langName .. renderCats({ 'IPA template errors' }, isDebug)&lt;br /&gt;
		end&lt;br /&gt;
		if args.cat ~= 'no' then&lt;br /&gt;
			local catLangName = args.link == 'yes'&lt;br /&gt;
				and mw.ustring.match(langName, '([^%[|%]]+)%]%]$')&lt;br /&gt;
				or langName&lt;br /&gt;
			table.insert(cats, string.format('Halaman dengan teks IPA berbahasa %s', catLangName))&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Label&lt;br /&gt;
		local label = args.label&lt;br /&gt;
		if not label then&lt;br /&gt;
			local labelCode = args[3] and args[3]:lower()&lt;br /&gt;
				or langData.defaultLabelCode&lt;br /&gt;
			if labelCode == '' then&lt;br /&gt;
				label = ''&lt;br /&gt;
			else&lt;br /&gt;
				local langText&lt;br /&gt;
				if langData.text then&lt;br /&gt;
					langText = linkLang(&lt;br /&gt;
						langData.text,&lt;br /&gt;
						mw.ustring.match(langName, '^%[%[([^|%]]+)'),&lt;br /&gt;
						args.link&lt;br /&gt;
					)&lt;br /&gt;
				else&lt;br /&gt;
					langText = mw.ustring.gsub(&lt;br /&gt;
						langName,&lt;br /&gt;
						'^%[%[(([^|]+) languages)%]%]$',&lt;br /&gt;
						'[[%1|%2]]'&lt;br /&gt;
					)&lt;br /&gt;
					langText = mw.ustring.gsub(&lt;br /&gt;
						langText,&lt;br /&gt;
						' languages(%]?%]?)$',&lt;br /&gt;
						'%1'&lt;br /&gt;
					)&lt;br /&gt;
				end&lt;br /&gt;
				if labelCode and data.labels[labelCode] then&lt;br /&gt;
					label = data.labels[labelCode]:format(langText)&lt;br /&gt;
				else&lt;br /&gt;
					label = data.defaultLabel:format(langText)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if label and label ~= '' then&lt;br /&gt;
			local span = mw.html.create('span')&lt;br /&gt;
				:addClass('IPA-label')&lt;br /&gt;
				:wikitext(label)&lt;br /&gt;
			if args.small ~= 'no' then&lt;br /&gt;
				span:addClass('IPA-label-small')&lt;br /&gt;
				table.insert(ret, mw.getCurrentFrame():extensionTag({&lt;br /&gt;
					name = 'templatestyles',&lt;br /&gt;
					args = { src = 'Module:IPA/styles.css' }&lt;br /&gt;
				}))&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(ret, tostring(span) .. ' ')&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Brackets&lt;br /&gt;
		s = (not isGeneric and langData.format or '&amp;amp;#91;%s&amp;amp;#93;'):format(s)&lt;br /&gt;
		&lt;br /&gt;
		-- Link to key&lt;br /&gt;
		local key = not isGeneric and langData.key or data.defaultKey&lt;br /&gt;
		s = string.format('[[%s|%s]]', key, s)&lt;br /&gt;
	else&lt;br /&gt;
		-- Basic mode&lt;br /&gt;
		s = args[1]&lt;br /&gt;
		if args.cat ~= 'no' then&lt;br /&gt;
			table.insert(cats, args.cat or 'Halaman dengan teks IPA polos')&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Transcription&lt;br /&gt;
	do&lt;br /&gt;
		local lang = fullLangCode or args.lang ~= '' and args.lang or 'und'&lt;br /&gt;
		local span = mw.html.create('span')&lt;br /&gt;
			:addClass('IPA')&lt;br /&gt;
			:addClass(args.class)&lt;br /&gt;
			:attr('lang', lang .. '-Latn-fonipa')&lt;br /&gt;
		-- wrap=all: Do nothing&lt;br /&gt;
		-- wrap=none: Never break&lt;br /&gt;
		-- Otherwise: Break at spaces only&lt;br /&gt;
		if args.wrap ~= 'all' then&lt;br /&gt;
			span:addClass('nowrap')&lt;br /&gt;
			if args.wrap ~= 'none' then&lt;br /&gt;
				s = wrapAtSpacesSafely(s)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if (not args[2] or args[2] == '') and args.tooltip ~= '' then&lt;br /&gt;
			local tooltip = args.tooltip or&lt;br /&gt;
				'Representation in the International Phonetic Alphabet (IPA)'&lt;br /&gt;
			span:attr('title', tooltip)&lt;br /&gt;
		end&lt;br /&gt;
		s = tostring(span:wikitext(s))&lt;br /&gt;
		table.insert(ret, s)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Audio&lt;br /&gt;
	local audio = args.audio ~= '' and args.audio or args[4] ~= '' and args[4]&lt;br /&gt;
	if audio then&lt;br /&gt;
		local button = mw.getCurrentFrame():expandTemplate({&lt;br /&gt;
			title = 'Template:Audio',&lt;br /&gt;
			args = { audio, '' }&lt;br /&gt;
		})&lt;br /&gt;
		table.insert(ret, ' ' .. button)&lt;br /&gt;
		table.insert(cats, 'Halaman dengan sampel pelafalan')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Categories&lt;br /&gt;
	table.insert(ret, renderCats(cats, isDebug))&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	if not args[1] then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(args) do&lt;br /&gt;
		args[i] = mw.text.trim(v)&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>dw&gt;Nyilvoskt</name></author>
	</entry>
</feed>