annotate mod_xmllang_check/xmpplang.lib.lua @ 6513:5fb466693e85

mod_storage_xmlarchive: Ensure list index files are removed using os.remove() on the list files leaves the new index files behind since util.datamanager does not know they are removed. Thanks Link Mauve
author Kim Alvefur <zash@zash.se>
date Tue, 07 Apr 2026 21:10:54 +0200
parents de3dc4297035
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6401
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
1
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
2
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
3 local irregular = {
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
4 "en-GB-oed", "i-ami", "i-bnn", "i-default", "i-enochian", "i-hak", "i-klingon", "i-lux", "i-mingo", "i-navajo", "i-pwn", "i-tao", "i-tay", "i-tsu", "sgn-BE-FR", "sgn-BE-NL", "sgn-CH-DE"
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
5 };
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
6 local regular = {
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
7 "art-lojban", "cel-gaulish", "no-bok", "no-nyn", "zh-guoyu", "zh-hakka", "zh-min", "zh-min-nan", "zh-xiang"
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
8 };
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
9 local grandfathered = {};
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
10 for _, tag in ipairs(irregular) do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
11 grandfathered[tag:lower()] = true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
12 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
13 for _, tag in ipairs(regular) do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
14 grandfathered[tag:lower()] = true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
15 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
16
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
17 local function split_subtags(lower_s)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
18 local subtags = {};
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
19 for subtag in lower_s:gmatch("[^%-]+") do -- split on hyphens
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
20 table.insert(subtags, subtag);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
21 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
22 return subtags;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
23 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
24
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
25 local function is_privateuse(lower_s)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
26 if lower_s:sub(1, 2) ~= "x-" then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
27 -- print("privateuse: " .. lower_s .. " does not start with x-");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
28 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
29 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
30
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
31 -- only allow alphanum and hyphens from here on out
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
32 if lower_s:match("[^a-z0-9%-]") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
33 -- print("privateuse: " .. lower_s .. " contains non-alphanum or hyphen");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
34 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
35 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
36 -- lets not allow any zero-len subtags
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
37 if lower_s:match("^%-") or lower_s:match("%-$") or lower_s:match("%-%-") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
38 -- print("privateuse: " .. lower_s .. " contains zero-len subtags");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
39 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
40 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
41
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
42 local subtags = split_subtags(lower_s);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
43 -- print("privateuse subtags: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
44 if #subtags < 2 then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
45 for i = 1, #subtags do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
46 if #subtags[i] < 1 or #subtags[i] > 8 or not subtags[i]:match("^[a-z0-9]+$") then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
47 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
48 -- print("privateuse: " .. lower_s .. " is valid");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
49 return true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
50 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
51
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
52 local function is_langtag(lower_s)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
53 -- print("is_langtag: " .. lower_s);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
54 -- print(" lower_s:sub(-5): ".. lower_s:sub(-5))
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
55 -- Remove the optional .utf8 suffix if it exists
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
56 if lower_s:sub(-6) == ".utf-8" then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
57 -- print("removing .utf-8 suffix");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
58 lower_s = lower_s:sub(1, -7);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
59 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
60
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
61 -- at this point we have a hyphen-separated string of subtags, where subtags are alphanumeric
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
62
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
63 -- only allow alphanum and hyphens from here on out
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
64 if lower_s:match("[^a-z0-9%-]") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
65 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
66 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
67 -- lets not allow any zero-len subtags
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
68 if lower_s:match("^%-") or lower_s:match("%-$") or lower_s:match("%-%-") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
69 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
70 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
71
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
72 -- let's split on hyphens
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
73 local subtags = split_subtags(lower_s);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
74
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
75 -- we are now dealing with this pattern: language ( "-" script )? ( "-" region )? ( "-" variant )* ( "-" extension )*
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
76 -- we'll now process in order
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
77
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
78 -- Let's process "language"
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
79 -- print("processing language: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
80 local subtag = table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
81 if not subtag or not subtag:match("^[a-z]+$") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
82 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
83 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
84 if #subtag == 2 or #subtag == 3 then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
85 -- we want to check for 0-3 instances of three-letter tags
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
86 for i = 1, 3 do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
87 local subtag = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
88 if subtag and #subtag == 3 and subtag:match("^[a-z]+$") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
89 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
90 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
91 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
92 elseif #subtag >= 4 and #subtag <= 8 then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
93 -- passthrough
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
94 else
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
95 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
96 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
97
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
98 -- Let's process optional: script = ALPHA{4};
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
99 -- print("processing script: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
100 subtag = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
101 if subtag and #subtag == 4 and subtag:match("^[a-z]+$") then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
102 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
103 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
104
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
105 -- Let's process optional: region = ALPHA{2} | DIGIT{3};
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
106 -- print("processing region: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
107 subtag = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
108 if subtag and ((#subtag == 2 and subtag:match("^[a-z][a-z]$")) or (#subtag == 3 and subtag:match("^[0-9][0-9][0-9]$"))) then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
109 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
110 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
111
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
112 -- Let's process zero or more: variant = alphanum{5,8} | ( DIGIT alphanum{3} );
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
113 while true do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
114 local variant = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
115 if not variant or (#variant < 4 or #variant > 8) then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
116 break;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
117 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
118 if #variant == 4 and not variant:match("^[0-9]") then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
119 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
120 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
121
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
122 -- print("processing extensions: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
123 -- Let's process zero or more: extension = singleton ( "-" alphanum{2,8} )+;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
124 while true do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
125 local extension = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
126 if not extension or extension == "x" then break; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
127 if #extension ~= 1 then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
128 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
129
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
130 local part = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
131 if not part or (#part < 2 or #part > 8) then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
132 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
133
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
134 while true do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
135 part = subtags[1];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
136 if not part or (#part < 2 or #part > 8) then break; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
137 table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
138 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
139 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
140
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
141 -- print("processing privateuse: " .. table.concat(subtags, "|"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
142 -- Let's process optional: privateuse = "x"i ( "-" alphanum{1,8} )+;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
143 local privateuse = table.remove(subtags, 1);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
144 -- print("privateuse: " .. privateuse);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
145 if privateuse then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
146 if privateuse ~= "x" or #subtags < 1 then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
147 for i = 1, #subtags do
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
148 local part = subtags[i];
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
149 if #part < 1 or #part > 8 then return false; end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
150 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
151 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
152
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
153 return true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
154 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
155
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
156 local function is_xmpplang(s)
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
157 local lower_s = s:lower();
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
158 if grandfathered[lower_s] then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
159 return true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
160 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
161 -- print("checking privateuse: " .. lower_s);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
162 if is_privateuse(lower_s) then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
163 -- print("privateuse: " .. lower_s .. " is valid");
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
164 return true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
165 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
166 -- print("checking langtag: " .. lower_s);
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
167 if is_langtag(lower_s) then
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
168 return true;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
169 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
170 return false;
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
171 end
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
172
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
173 -- print("=== x-abc-def")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
174 -- print(is_xmpplang("x-abc-def"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
175 -- print("=== x-a-b-c-d-e")
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
176 -- print(is_xmpplang("x-a-b-c-d-e"));
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
177
de3dc4297035 mod_xmllang_check: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
178 return is_xmpplang;