annotate mod_xmllang_check/xmpplang.lib.lua @ 6546:8a4e6421fd24

mod_storage_xmlarchive: Remove unnecessary percent-encoding of paths Paths from lfs.dir() are already in the percent-encoded form. Probably confusion left over since before 1b081c8fc1d9
author Kim Alvefur <zash@zash.se>
date Sun, 24 May 2026 19:17:22 +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;