<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Ahe-translit%2Fold</id>
	<title>Module:he-translit/old - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Ahe-translit%2Fold"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:he-translit/old&amp;action=history"/>
	<updated>2026-05-18T23:58:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:he-translit/old&amp;diff=495557&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:he-translit/old&amp;diff=495557&amp;oldid=prev"/>
		<updated>2026-04-21T12:44:14Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&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;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:44, 21 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:he-translit/old&amp;diff=495556&amp;oldid=prev</id>
		<title>wikt&gt;Theknightwho: Use faster implementation of mw.ustring.char.</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:he-translit/old&amp;diff=495556&amp;oldid=prev"/>
		<updated>2024-04-05T03:06:37Z</updated>

		<summary type="html">&lt;p&gt;Use faster implementation of mw.ustring.char.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
local U = require(&amp;quot;Module:string/char&amp;quot;)&lt;br /&gt;
local gsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Uncomment this to redefine gsub so that it prints to the Lua log&lt;br /&gt;
-- the names of the code points in the replacements it&amp;#039;s making.&lt;br /&gt;
local function print_code_point_names(text)&lt;br /&gt;
	if not text then return &amp;quot;&amp;quot; end&lt;br /&gt;
	local names = require &amp;quot;Module:array&amp;quot;()&lt;br /&gt;
	for cp in mw.ustring.gcodepoint(text) do&lt;br /&gt;
		names:insert(require &amp;quot;Module:Unicode data&amp;quot;.lookup_name(cp))&lt;br /&gt;
	end&lt;br /&gt;
	return names:concat &amp;quot;, &amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local actual_gsub = mw.ustring.gsub&lt;br /&gt;
local gsub = function(...)&lt;br /&gt;
	local old, pattern, repl = ...&lt;br /&gt;
	local new, count = actual_gsub(...)&lt;br /&gt;
	if old ~= new then&lt;br /&gt;
		mw.log(table.concat({&lt;br /&gt;
			print_code_point_names(old),&lt;br /&gt;
			print_code_point_names(new),&lt;br /&gt;
			pattern,&lt;br /&gt;
			tostring(repl)&lt;br /&gt;
		}, &amp;quot;\n&amp;quot;) .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return new, count&lt;br /&gt;
end&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local sheva = U(0x05B0)&lt;br /&gt;
local hataf_segol = U(0x05B1)&lt;br /&gt;
local hataf_patah = U(0x05B2)&lt;br /&gt;
local hataf_qamats = U(0x05B3)&lt;br /&gt;
local hiriq = U(0x05B4)&lt;br /&gt;
local tsere = U(0x05B5)&lt;br /&gt;
local segol = U(0x05B6)&lt;br /&gt;
local patah = U(0x05B7)&lt;br /&gt;
local qamats = U(0x05B8)&lt;br /&gt;
local qamats_qatan = U(0x05C7)&lt;br /&gt;
local holam = U(0x05B9)&lt;br /&gt;
local holam_haser_for_waw = U(0x05BA)&lt;br /&gt;
local qubuts = U(0x05BB)&lt;br /&gt;
local dagesh_mappiq = U(0x05BC)&lt;br /&gt;
local shin_dot = U(0x05C1)&lt;br /&gt;
local sin_dot = U(0x05C2)&lt;br /&gt;
&lt;br /&gt;
local macron_above = U(0x0304)&lt;br /&gt;
local macron_below = U(0x0331)&lt;br /&gt;
local macron = &amp;quot;[&amp;quot; .. macron_above .. macron_below .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local alef = &amp;quot;א&amp;quot;&lt;br /&gt;
local he = &amp;quot;ה&amp;quot;&lt;br /&gt;
local waw = &amp;quot;ו&amp;quot;&lt;br /&gt;
local yod = &amp;quot;י&amp;quot;&lt;br /&gt;
local vowel_letters = alef .. he .. waw .. yod&lt;br /&gt;
local vowel_letter = &amp;quot;[&amp;quot; .. vowel_letters .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- &amp;#039;0&amp;#039; represents silent sheva&lt;br /&gt;
local vowel_points = (&lt;br /&gt;
	sheva .. hataf_segol .. hataf_patah .. hataf_qamats .. hiriq .. tsere ..&lt;br /&gt;
	segol .. patah .. qamats .. qamats_qatan .. holam .. qubuts .. &amp;#039;0&amp;#039; ..&lt;br /&gt;
	holam_haser_for_waw&lt;br /&gt;
)&lt;br /&gt;
local vowel_point = &amp;quot;[&amp;quot; .. vowel_points .. &amp;quot;]&amp;quot;&lt;br /&gt;
local short_vowels = segol .. patah .. hiriq .. qubuts .. qamats_qatan&lt;br /&gt;
local short_vowel = &amp;quot;[&amp;quot; .. short_vowels .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local shuruq = waw .. dagesh_mappiq&lt;br /&gt;
local holam_male = waw .. holam&lt;br /&gt;
&lt;br /&gt;
-- use dummies characters that do not match as punctuation&lt;br /&gt;
-- the dummy letter stands in for final silent alef or he, or for the hiatus before a furtive patah,&lt;br /&gt;
-- or comes before a pre-transliterated waw to aid in matching&lt;br /&gt;
local dummy_letter = U(0x0627) -- ARABIC LETTER ALEF&lt;br /&gt;
local dummy_geresh = U(0x064E) -- ARABIC FATHA&lt;br /&gt;
local dummy_gershayim = U(0x064B) -- ARABIC FATHATAN&lt;br /&gt;
local real_geresh = &amp;#039;׳&amp;#039;&lt;br /&gt;
local real_gershayim = &amp;#039;״&amp;#039;&lt;br /&gt;
local letter_modifier = &amp;quot;[&amp;quot; .. shin_dot .. sin_dot .. &amp;quot;]?[&amp;quot; .. dummy_geresh .. dummy_gershayim .. &amp;quot;]?&amp;quot;&lt;br /&gt;
local letters = &amp;quot;אבגדהוזחטיכךלמםנןסעפףצץקרשת&amp;quot;&lt;br /&gt;
local letter = &amp;quot;[&amp;quot; .. letters .. dummy_letter .. &amp;quot;]&amp;quot; .. letter_modifier&lt;br /&gt;
local letter_not_waw = &amp;quot;[אבגדהזחטיכךלמםנןסעפףצץקרשת&amp;quot; .. dummy_letter .. &amp;quot;]&amp;quot; .. letter_modifier&lt;br /&gt;
local gutturals = &amp;quot;אהחע&amp;quot;&lt;br /&gt;
local guttural = &amp;quot;[&amp;quot; .. gutturals .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local vowel_letter_or_geresh = &amp;quot;[&amp;quot; .. vowel_letters .. dummy_geresh .. dummy_gershayim .. &amp;quot;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- note, the geresh and gershayim are included in this, which is why dummies are used in their place&lt;br /&gt;
local word_break_chars = &amp;quot;%s%p&amp;quot;&lt;br /&gt;
local word_break = &amp;quot;[&amp;quot; .. word_break_chars .. &amp;quot;]&amp;quot;&lt;br /&gt;
local word_start = &amp;quot;%f[^&amp;quot; .. word_break_chars .. &amp;quot;]&amp;quot; -- matches the boundary but not the actual word break characters&lt;br /&gt;
local word_end = &amp;quot;%f[&amp;quot; .. word_break_chars .. &amp;quot;]&amp;quot; -- matches the boundary but not the actual word break characters&lt;br /&gt;
&lt;br /&gt;
local tr_vowels = &amp;quot;aeiouāēīōūəăĕŏ0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local biblical_to_modern = {&lt;br /&gt;
	[&amp;#039;ʾ&amp;#039;] = &amp;#039;\&amp;#039;&amp;#039;,&lt;br /&gt;
	[&amp;#039;b&amp;#039; .. macron_below] = &amp;#039;v&amp;#039;,&lt;br /&gt;
	[&amp;#039;g&amp;#039; .. macron_above] = &amp;#039;g&amp;#039;,&lt;br /&gt;
	[&amp;#039;d&amp;#039; .. macron_below] = &amp;#039;d&amp;#039;,&lt;br /&gt;
	[&amp;#039;w&amp;#039;] = &amp;#039;v&amp;#039;,&lt;br /&gt;
	[&amp;#039;ž&amp;#039;] = &amp;#039;zh&amp;#039;,&lt;br /&gt;
	[&amp;#039;ḥ&amp;#039;] = &amp;#039;kh&amp;#039;,&lt;br /&gt;
	[&amp;#039;ṭ&amp;#039;] = &amp;#039;t&amp;#039;,&lt;br /&gt;
	[&amp;#039;k&amp;#039; .. macron_below] = &amp;#039;kh&amp;#039;,&lt;br /&gt;
	[&amp;#039;ʿ&amp;#039;] = &amp;#039;\&amp;#039;&amp;#039;,&lt;br /&gt;
	[&amp;#039;p&amp;#039; .. macron_above] = &amp;#039;f&amp;#039;,&lt;br /&gt;
	[&amp;#039;ṣ&amp;#039;] = &amp;#039;ts&amp;#039;,&lt;br /&gt;
	[&amp;#039;č&amp;#039;] = &amp;#039;ch&amp;#039;,&lt;br /&gt;
	[&amp;#039;q&amp;#039;] = &amp;#039;k&amp;#039;,&lt;br /&gt;
	[&amp;#039;š&amp;#039;] = &amp;#039;sh&amp;#039;,&lt;br /&gt;
	[&amp;#039;ś&amp;#039;] = &amp;#039;s&amp;#039;,&lt;br /&gt;
	[&amp;#039;t&amp;#039; .. macron_below] = &amp;#039;t&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
	[&amp;#039;ə&amp;#039;] = &amp;#039;\&amp;#039;&amp;#039;,&lt;br /&gt;
	[&amp;#039;ĕ&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
	[&amp;#039;ă&amp;#039;] = &amp;#039;a&amp;#039;,&lt;br /&gt;
	[&amp;#039;ŏ&amp;#039;] = &amp;#039;o&amp;#039;,&lt;br /&gt;
	[&amp;#039;ī&amp;#039;] = &amp;#039;i&amp;#039;,&lt;br /&gt;
	[&amp;#039;ē&amp;#039;] = &amp;#039;e&amp;#039;,&lt;br /&gt;
	[&amp;#039;ā&amp;#039;] = &amp;#039;a&amp;#039;,&lt;br /&gt;
	[&amp;#039;ō&amp;#039;] = &amp;#039;o&amp;#039;,&lt;br /&gt;
	[&amp;#039;ū&amp;#039;] = &amp;#039;u&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- helper function to remove vowel letters but keep gereshes&lt;br /&gt;
local function gereshes(str)&lt;br /&gt;
	return gsub(str, vowel_letter, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local biblical = {&lt;br /&gt;
	{&lt;br /&gt;
		-- replace geresh and gershayim with their dummy equivalents so that they won&amp;#039;t match as word boundaries&lt;br /&gt;
		[real_geresh] = dummy_geresh,&lt;br /&gt;
		[real_gershayim] = dummy_gershayim,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- The default order is: consonant, vowel point, dagesh or mappiq, shin or sin dot.&lt;br /&gt;
		-- The desired order is: consonant, shin or sin dot, dagesh or mappiq, vowel point.&lt;br /&gt;
		-- Also, move geresh and gershayim closer to the letter for easier handling (will be moved back later if not actually a modifier)&lt;br /&gt;
		[&amp;quot;([&amp;quot; .. letters .. &amp;quot;])(&amp;quot; .. vowel_point .. &amp;quot;*)(&amp;quot; .. dagesh_mappiq .. &amp;quot;*)([&amp;quot; .. shin_dot .. sin_dot .. &amp;quot;]*)([&amp;quot; .. dummy_geresh .. dummy_gershayim .. &amp;quot;]*)&amp;quot;] = &amp;quot;%1%4%5%3%2&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- special case: change qamats in כל to qamats qatan&lt;br /&gt;
		-- the problem is that כל might be preceded by prefixed clitics, which maybe be chained indefinitely,&lt;br /&gt;
		-- while other unrelated words might happen to end in כל with a qamats gadol; therefore, match either&lt;br /&gt;
		-- the entire word or only when preceded by a precisely recognized prefix&lt;br /&gt;
		[word_start .. &amp;quot;(כ&amp;quot; .. dagesh_mappiq .. &amp;quot;?)&amp;quot; .. qamats .. &amp;quot;(ל)&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. qamats_qatan .. &amp;quot;%2&amp;quot;,&lt;br /&gt;
		[&amp;quot;([הבכל]&amp;quot; .. dagesh_mappiq .. &amp;quot;?&amp;quot; .. patah .. &amp;quot;כ&amp;quot; .. dagesh_mappiq .. &amp;quot;)&amp;quot; .. qamats .. &amp;quot;(ל)&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. qamats_qatan .. &amp;quot;%2&amp;quot;,&lt;br /&gt;
		[&amp;quot;(מ&amp;quot; .. dagesh_mappiq .. &amp;quot;?&amp;quot; .. hiriq .. &amp;quot;כ&amp;quot; .. dagesh_mappiq .. &amp;quot;)&amp;quot; .. qamats .. &amp;quot;(ל)&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. qamats_qatan .. &amp;quot;%2&amp;quot;,&lt;br /&gt;
		[&amp;quot;(ש&amp;quot; .. shin_dot .. dagesh_mappiq .. &amp;quot;?[&amp;quot; .. segol .. patah .. &amp;quot;]כ&amp;quot; .. dagesh_mappiq .. &amp;quot;)&amp;quot; .. qamats .. &amp;quot;(ל)&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. qamats_qatan .. &amp;quot;%2&amp;quot;, -- patah is very archaic&lt;br /&gt;
		[&amp;quot;([ובכלד]&amp;quot; .. dagesh_mappiq .. &amp;quot;?&amp;quot; .. sheva .. &amp;quot;כ)&amp;quot; .. qamats .. &amp;quot;(ל)&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. qamats_qatan .. &amp;quot;%2&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- remove final alef and he, but only when preceded by a vowel&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. vowel_letter_or_geresh .. &amp;quot;*)[&amp;quot; .. alef .. he .. &amp;quot;]&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. dummy_letter,&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. shuruq .. vowel_letter_or_geresh .. &amp;quot;*)[&amp;quot; .. alef .. he .. &amp;quot;]&amp;quot; .. word_end] = &amp;quot;%1&amp;quot; .. dummy_letter,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- these are the cases, other than the above, where a final letter should be ignored&lt;br /&gt;
		[hiriq .. vowel_letter_or_geresh .. &amp;quot;-[&amp;quot; .. yod .. dummy_letter .. &amp;quot;]&amp;quot; .. word_end] = &amp;quot;ī&amp;quot;,&lt;br /&gt;
		[&amp;quot;([&amp;quot; .. tsere .. segol .. &amp;quot;])&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;-[&amp;quot; .. yod .. &amp;quot;]&amp;quot; .. word_end] = &amp;quot;%1&amp;quot;,&lt;br /&gt;
		[&amp;quot;([&amp;quot; .. holam .. qubuts .. &amp;quot;])&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;-[&amp;quot; .. waw .. &amp;quot;]&amp;quot; .. word_end] = &amp;quot;%1&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[sheva .. &amp;quot;(&amp;quot; .. letter .. &amp;quot;)&amp;quot; .. sheva] = &amp;quot;0%1&amp;quot; .. sheva, -- two shevas in a row&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. short_vowel .. letter .. &amp;quot;)&amp;quot; .. sheva] = &amp;quot;%10&amp;quot;, -- after a short vowel, assume(!) a silent sheva&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. guttural .. &amp;quot;)&amp;quot; .. sheva] = &amp;quot;%10&amp;quot;, -- gutturals cannot have a vocal sheva&lt;br /&gt;
&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. &amp;quot;)&amp;quot; .. shuruq] = &amp;quot;%1&amp;quot; .. dummy_letter .. &amp;quot;ww&amp;quot;, -- when waw + dagesh is not a shuruq&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. vowel_letter_or_geresh .. &amp;quot;-)&amp;quot; .. shuruq .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;-&amp;quot; .. vowel_point .. &amp;quot;)&amp;quot;] = &amp;quot;%1&amp;quot; .. dummy_letter .. &amp;quot;ww%2&amp;quot;, -- when waw + dagesh is not a shuruq&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. &amp;quot;)&amp;quot; .. holam_male] = &amp;quot;%1&amp;quot; .. dummy_letter .. &amp;quot;w&amp;quot; .. holam, -- when waw + holam is not a holam male&lt;br /&gt;
&lt;br /&gt;
		[&amp;quot;([&amp;quot; .. alef .. he .. &amp;quot;])&amp;quot; .. dagesh_mappiq] = &amp;quot;%1&amp;quot;, -- handle mappiq (very rarely occurs on an alef)&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[shuruq .. shuruq] = shuruq .. &amp;quot;ww&amp;quot;, -- another potential case when waw + dagesh is not a shuruq&lt;br /&gt;
		[shuruq .. holam_male] = shuruq .. &amp;quot;w&amp;quot; .. holam, -- another potential case when waw + holam is not a holam male&lt;br /&gt;
&lt;br /&gt;
		-- tentatively lengthen hiriqs with vowel letters&lt;br /&gt;
		[hiriq .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)(&amp;quot; .. letter .. &amp;quot;)&amp;quot;] = function(vlg, l) return &amp;quot;ī&amp;quot; .. gereshes(vlg) .. l end,&lt;br /&gt;
&lt;br /&gt;
		-- rearrange furtive patach (mappiq should already have been removed, but handle it just in case)&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. guttural .. dagesh_mappiq .. &amp;quot;?)&amp;quot; .. patah .. word_end] = dummy_letter .. &amp;quot;a%1&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- remove vowel letters&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. letter .. &amp;quot;)(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)&amp;quot; .. shuruq] = function(l, vlg) return l .. gereshes(vlg) .. shuruq end,&lt;br /&gt;
		[shuruq .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)&amp;quot; .. &amp;quot;(&amp;quot; .. letter_not_waw .. &amp;quot;)&amp;quot;] = function(vlg, l) return shuruq .. gereshes(vlg) .. l end,&lt;br /&gt;
		[shuruq .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)&amp;quot; .. &amp;quot;(&amp;quot; .. waw .. &amp;quot;[^&amp;quot; .. holam .. dagesh_mappiq .. &amp;quot;])&amp;quot;] = function(vlg, l) return shuruq .. gereshes(vlg) .. l end,&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. &amp;quot;)&amp;quot; .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)&amp;quot; .. &amp;quot;(&amp;quot; .. letter_not_waw .. &amp;quot;)&amp;quot;] = function(vp, vlg, l) return vp .. gereshes(vlg) .. l end,&lt;br /&gt;
		[&amp;quot;(&amp;quot; .. vowel_point .. &amp;quot;)&amp;quot; .. &amp;quot;(&amp;quot; .. vowel_letter_or_geresh .. &amp;quot;+)&amp;quot; .. &amp;quot;(&amp;quot; .. waw .. &amp;quot;[^&amp;quot; .. holam .. dagesh_mappiq .. &amp;quot;])&amp;quot;] = function(vp, vlg, l) return vp .. gereshes(vlg) .. l end,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- handle two-character combinations first&lt;br /&gt;
		[&amp;#039;ג&amp;#039; .. dummy_geresh] = &amp;#039;j&amp;#039;,&lt;br /&gt;
		[&amp;#039;ז&amp;#039; .. dummy_geresh] = &amp;#039;ž&amp;#039;,&lt;br /&gt;
		[&amp;#039;[צץ]&amp;#039; .. dummy_geresh] = &amp;#039;č&amp;#039;,&lt;br /&gt;
		[&amp;#039;ש&amp;#039; .. shin_dot] = &amp;#039;š&amp;#039;,&lt;br /&gt;
		[&amp;#039;ש&amp;#039; .. sin_dot] = &amp;#039;ś&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;#039;א&amp;#039;] = &amp;#039;ʾ&amp;#039;,&lt;br /&gt;
		[&amp;#039;ב&amp;#039;] = &amp;#039;b&amp;#039; .. macron_below,&lt;br /&gt;
		[&amp;#039;ג&amp;#039;] = &amp;#039;g&amp;#039; .. macron_above,&lt;br /&gt;
		[&amp;#039;ד&amp;#039;] = &amp;#039;d&amp;#039; .. macron_below,&lt;br /&gt;
		[&amp;#039;ה&amp;#039;] = &amp;#039;h&amp;#039;,&lt;br /&gt;
		[&amp;#039;ז&amp;#039;] = &amp;#039;z&amp;#039;,&lt;br /&gt;
		[&amp;#039;ח&amp;#039;] = &amp;#039;ḥ&amp;#039;,&lt;br /&gt;
		[&amp;#039;ט&amp;#039;] = &amp;#039;ṭ&amp;#039;,&lt;br /&gt;
		[&amp;#039;י&amp;#039;] = &amp;#039;y&amp;#039;,&lt;br /&gt;
		[&amp;#039;[כך]&amp;#039;] = &amp;#039;k&amp;#039; .. macron_below,&lt;br /&gt;
		[&amp;#039;ל&amp;#039;] = &amp;#039;l&amp;#039;,&lt;br /&gt;
		[&amp;#039;[מם]&amp;#039;] = &amp;#039;m&amp;#039;,&lt;br /&gt;
		[&amp;#039;[נן]&amp;#039;] = &amp;#039;n&amp;#039;,&lt;br /&gt;
		[&amp;#039;ס&amp;#039;] = &amp;#039;s&amp;#039;,&lt;br /&gt;
		[&amp;#039;ע&amp;#039;] = &amp;#039;ʿ&amp;#039;,&lt;br /&gt;
		[&amp;#039;[פף]&amp;#039;] = &amp;#039;p&amp;#039; .. macron_above,&lt;br /&gt;
		[&amp;#039;[צץ]&amp;#039;] = &amp;#039;ṣ&amp;#039;,&lt;br /&gt;
		[&amp;#039;ק&amp;#039;] = &amp;#039;q&amp;#039;,&lt;br /&gt;
		[&amp;#039;ר&amp;#039;] = &amp;#039;r&amp;#039;,&lt;br /&gt;
		[&amp;#039;ת&amp;#039;] = &amp;#039;t&amp;#039; .. macron_below,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[word_start .. &amp;#039;([bgdkptj])&amp;#039; .. macron .. &amp;#039;?&amp;#039; .. dagesh_mappiq] = &amp;#039;%1&amp;#039;, -- assume(!) dagesh qal at the beginning of a word&lt;br /&gt;
		[&amp;#039;[0&amp;#039; .. sheva .. &amp;#039;]([bgdkptj])&amp;#039; .. macron .. &amp;#039;?&amp;#039; .. dagesh_mappiq] = &amp;#039;0%1&amp;#039;, -- dagesh qal after sheva, and assume(!) silent sheva&lt;br /&gt;
		[&amp;#039;(%l)0%1&amp;#039;] = &amp;#039;%1&amp;#039; .. sheva .. &amp;#039;%1&amp;#039;, -- vocal sheva between identical consonants&lt;br /&gt;
		[shuruq] = &amp;#039;ū&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- restore geresh and gershayim order&lt;br /&gt;
		[&amp;quot;([&amp;quot; .. dummy_geresh .. dummy_gershayim .. &amp;quot;])(&amp;quot; .. dagesh_mappiq .. &amp;quot;*)(&amp;quot; .. vowel_point .. &amp;quot;*)&amp;quot;] = &amp;quot;%2%3%1&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- handle ירושלם&lt;br /&gt;
		[hiriq .. patah] = &amp;quot;ayi&amp;quot;, -- in this case, the vowels are reversed by Unicode normalization rules&lt;br /&gt;
		[patah .. hiriq] = &amp;quot;ayi&amp;quot;, -- just in case they&amp;#039;re in the correct order&lt;br /&gt;
		[hiriq .. qamats] = &amp;quot;āyi&amp;quot;, -- pausal form of above&lt;br /&gt;
		[qamats .. hiriq] = &amp;quot;āyi&amp;quot;, -- as above&lt;br /&gt;
		-- handle ירושלמה&lt;br /&gt;
		[&amp;quot;[0&amp;quot; .. sheva .. &amp;quot;]&amp;quot; .. patah] = &amp;quot;ay&amp;quot;, -- in this case, the vowels are reversed by Unicode normalization rules&lt;br /&gt;
		[patah .. &amp;quot;[0&amp;quot; .. sheva .. &amp;quot;]&amp;quot;] = &amp;quot;ay&amp;quot;, -- just in case they&amp;#039;re in the correct order&lt;br /&gt;
		[&amp;quot;[0&amp;quot; .. sheva .. &amp;quot;]&amp;quot; .. qamats] = &amp;quot;āy&amp;quot;, -- pausal form of above&lt;br /&gt;
		[qamats .. &amp;quot;[0&amp;quot; .. sheva .. &amp;quot;]&amp;quot;] = &amp;quot;āy&amp;quot;, -- as above&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[sheva] = &amp;#039;ə&amp;#039;,&lt;br /&gt;
		[hataf_segol] = &amp;#039;ĕ&amp;#039;,&lt;br /&gt;
		[hataf_patah] = &amp;#039;ă&amp;#039;,&lt;br /&gt;
		[hataf_qamats] = &amp;#039;ŏ&amp;#039;,&lt;br /&gt;
		[hiriq] = &amp;#039;i&amp;#039;,&lt;br /&gt;
		[tsere] = &amp;#039;ē&amp;#039;,&lt;br /&gt;
		[segol] = &amp;#039;e&amp;#039;,&lt;br /&gt;
		[patah] = &amp;#039;a&amp;#039;,&lt;br /&gt;
		[qamats] = &amp;#039;ā&amp;#039;,&lt;br /&gt;
		[qamats_qatan] = &amp;#039;o&amp;#039;,&lt;br /&gt;
		[qubuts] = &amp;#039;u&amp;#039;,&lt;br /&gt;
		[shin_dot] = &amp;#039;&amp;#039;,&lt;br /&gt;
		[sin_dot] = &amp;#039;&amp;#039;,&lt;br /&gt;
		[holam_male] = &amp;#039;ō&amp;#039;,&lt;br /&gt;
		[waw .. holam_haser_for_waw] = &amp;#039;wō&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;#039;(.)&amp;#039; .. macron .. &amp;#039;?&amp;#039; .. dagesh_mappiq] = &amp;#039;%1%1&amp;#039;, -- gemination&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;#039;(śśā)[שś](k&amp;#039; .. macron_below .. &amp;#039;)&amp;#039;] = &amp;#039;%1%2&amp;#039;, -- special case for יששכר&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;#039;ā(%l&amp;#039; .. macron .. &amp;#039;?0)&amp;#039;] = &amp;#039;o%1&amp;#039;, -- assume(!) qamats qatan before silent sheva&lt;br /&gt;
&lt;br /&gt;
		[holam] = &amp;#039;ō&amp;#039;,&lt;br /&gt;
		[&amp;#039;ו&amp;#039;] = &amp;#039;w&amp;#039;,&lt;br /&gt;
		[&amp;#039;ש&amp;#039;] = &amp;#039;š&amp;#039;, -- assume(!) shin if no shin or sin dot&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		-- handle bgdkpt letters in unvocalized words (such as acronyms)&lt;br /&gt;
		[word_start .. &amp;quot;([^&amp;quot; .. tr_vowels .. &amp;quot;]-[bgdkpt]&amp;quot; .. macron .. &amp;quot;[^&amp;quot; .. tr_vowels .. &amp;quot;]-)&amp;quot; .. word_end] = function(w) return gsub(w, &amp;quot;([bgdkpt])&amp;quot; .. macron, &amp;quot;%1&amp;quot;) end&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;quot;[0&amp;quot; .. dummy_letter .. &amp;quot;]&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		-- short vowels in non-final closed syllables (this rule should be expanded)&lt;br /&gt;
		[&amp;quot;ū(%l)%1&amp;quot;] = &amp;quot;u%1%1&amp;quot;,&lt;br /&gt;
		[&amp;quot;ī(%l)%1&amp;quot;] = &amp;quot;i%1%1&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	{&lt;br /&gt;
		[&amp;#039;ə&amp;#039; .. word_end] = &amp;quot;&amp;quot;, -- final sheva is always silent&lt;br /&gt;
&lt;br /&gt;
		[dummy_geresh] = &amp;#039;′&amp;#039;,&lt;br /&gt;
		[dummy_gershayim] = &amp;#039;″&amp;#039;,&lt;br /&gt;
		[&amp;#039;׃&amp;#039;] = &amp;#039;.&amp;#039;, -- sof pasuq&lt;br /&gt;
		[&amp;#039;־&amp;#039;] = &amp;#039;-&amp;#039;, -- maqaf&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function export.tr(text, lang, sc)&lt;br /&gt;
	-- default to modern for Hebrew, but not for other languages, such as Aramaic&lt;br /&gt;
	local modern = lang == &amp;quot;he&amp;quot;&lt;br /&gt;
	return export.biblical(text, modern)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.biblical(text, modern)&lt;br /&gt;
	-- decompose&lt;br /&gt;
	text = mw.ustring.toNFD(text)&lt;br /&gt;
&lt;br /&gt;
	-- wrap with spaces to make initial and final replacements easier&lt;br /&gt;
	text = &amp;#039; &amp;#039; .. text .. &amp;#039; &amp;#039;&lt;br /&gt;
&lt;br /&gt;
	for _, replacements in ipairs(biblical) do&lt;br /&gt;
		for regex, replacement in pairs(replacements) do&lt;br /&gt;
			text = gsub(text, regex, replacement)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- unwrap spaces&lt;br /&gt;
	text = mw.ustring.match(text, &amp;quot;^ (.*) $&amp;quot;)&lt;br /&gt;
	if text == nil then error(&amp;quot;Something went wrong, wrapped spaces were deleted.&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
	-- must happen before recomposition&lt;br /&gt;
	if modern then&lt;br /&gt;
		text = gsub(text, &amp;quot;([%lʾʿ])%1&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		text = gsub(text, &amp;quot;[%lʾʿ]&amp;quot; .. macron .. &amp;quot;?&amp;quot;, function(x) return biblical_to_modern[x] or x end)&lt;br /&gt;
		text = gsub(text, &amp;quot;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;#039;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- recompose&lt;br /&gt;
	text = mw.ustring.toNFC(text)&lt;br /&gt;
&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>wikt&gt;Theknightwho</name></author>
	</entry>
</feed>