1 <!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
6 <meta http-equiv=
"content-type" content=
"text/html;charset=iso-8859-1">
7 <meta name=
"generator" content=
"Adobe GoLive 6">
8 <title>Tekumel - Tsolyani Word Generator
</title>
9 <script type=
"text/javascript" language=
"javascript">
12 // based on the article in the Stategic Review
13 // Version 6 browsers only.
15 var tooFew = "Enter a numeric value for 'number of words' (1 - 100)";
16 var tooMany = "Too many words! Enter a value (1 - 100)";
17 var notNum = "Enter numberic digits only (1 - 100)"
19 function tryAgain(msg,oNum){
24 function cmdNumWords_onclick() {
25 var oNum = document.getElementById('txtNumWords');
26 var oTxt = document.getElementById('txtWords');
27 var oChk = document.getElementById('chkCapitalised');
29 var n=parseInt(oNum.value);
32 tryAgain(notNum, oNum)
34 tryAgain(tooFew, oNum)
36 tryAgain(tooMany, oNum)
38 for (var j=1; j<=n; j++)
39 wl += ((oChk.checked) ? toUpper(Word()) : Word()) + '\n';
45 function UnNumbered(ary){
46 var position = d(ary.length)-1;
47 var arow = ary[position].split('|');
48 return arow[0].toString()
51 function getAssocA(ary, r) {
61 return (w.charAt(0).toUpperCase() + w.substring(1))
65 return Math.floor((X * Math.random() + 1))
68 function cmdCopyToClip_click(oName){
69 var oTxt = document.getElementById(oName)
71 return copy_clip(oTxt.value)
74 function copy_clip(txt){
75 if (window.clipboardData)
77 window.clipboardData.setData("Text", txt);
79 else if (window.netscape)
81 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
82 var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
85 var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
88 trans.addDataFlavor('text/unicode');
89 var str = new Object();
90 var len = new Object();
91 var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
94 trans.setTransferData("text/unicode",str,copytext.length*2);
95 var clipid=Components.interfaces.nsIClipboard;
98 clip.setData(trans,null,clipid.kGlobalClipboard);
103 //Tsolyani Word Generator
105 var vowel1, vowelAlt, diphthongA, cons, conInit3, conInit2, consFin
107 vowel1 = ['i','a','o','u','ü','e','au','ai','oi'];
108 vowelAlt = ['ai','au','ua','ue','ae'];
109 diphthongA = ['i','a','o','u','ü','e'];
111 // GROUP I : 2 - 20; GROUP II : 22 - 40; GROUP III : 42 - 60;
112 cons = {2:"p",4:"b",6:"m",8:"f",10:"v",12:"w",14:"t",16:"d",18:"n",20:"th",22:"dh",24:"ch",26:"l",28:"y",30:"k",32:"g",34:"kh",36:"gh",37:"'",38:"q",40:"h",42:"w",44:"ts",46:"tl",48:"s",50:"sh",52:"z",54:"zh",55:"ss",56:"r",58:"l",60:"hl"};
113 conInit3 = ['mr','ms','dl','tr','nj'];
114 conInit2 = {2:'m',4:'n',6:'ng',8:'r',10:'l',12:'y',14:'s',16:'sh',18:'ss',19:'j'};
115 consFin = {2:'m',4:'n',6:'ng',8:'r',10:'l',12:'kh',14:'k',16:'s',18:'hl',19:'tl',20:'sh'};
120 pname = vowel() + con() + vowel()
122 pname = vowel() + con() + vowel() + conFinal()
124 pname = vowel() + con() + vowel() + con() + vowel()
126 pname = con('i') + vowel() + conFinal()
128 pname = con('i') + vowel() + con() + vowel()
130 pname = con('i') + vowel() + con() + vowel() + conFinal()
132 pname = con('i') + vowel() + con() + vowel() + con() + vowel()
134 pname = con('i') + vowel() + con() + vowel() + con() + vowel() + conFinal();
141 return consonant(typ)
143 return consonant2(typ)
145 return consonant3(typ)
148 function consonant2(typ) {
150 return consonant()+conInitial2()
152 return consonant()+consonant()
155 function consonant3(typ) {
159 return consonant()+consonant()+conInitial2()
162 function vowelOther() {
164 return diphthong()+diphthong()
166 return UnNumbered(vowelAlt)
173 return UnNumbered(vowel1)
176 function diphthong() {
177 return UnNumbered(diphthongA)
180 function consonant() {
181 return getAssocA(cons, 60)
184 function conFinal() {
185 return getAssocA(consFin, 20)
188 function conInitial2(){
191 // specified as 'or other' in the article
192 // I didn't know what to do so I used a consonant (Groups I, II or III)
193 return getAssocA(cons, 60)
196 return getAssocA(conInit2, 19)
199 function conInitial3(){
200 return UnNumbered(conInit3)
202 // End word generator
208 <h1>Tsolyani random word generator
</h1>
209 <p>For Tekumel. Based on the article
"Tsolyani Names Without Tears
", by M. A. R. Barker, from
"The Strategic Review
", (Vol.
1, #
4,
Winter
1975)
</p>
210 <table border=
"1" cellspacing=
"1" cellpadding=
"0">
212 <td>Enter
<b>number of words
</b> required:
</td>
213 <td><input id=
"txtNumWords" name=
"txtNumWords" value=
"10" size=
"4"></td>
214 <td rowspan=
"4"><textarea id=
"txtWords" name=
"txtWords" rows=
"12" cols=
"30"></textarea></td>
217 <td>Capitalised?
</td>
218 <td><input id=
"chkCapitalised" type=
"checkbox" name=
"chkCapitalised" checked
></td>
221 <td colspan=
"2"><input type=
"button" id=
"cmdNumWords" onclick=
"return cmdNumWords_onclick()" name=
"cmdNumWords" value=
"Make Words"></td>
224 <td colspan=
"2"><input type=
"button" id=
"cmdCopyToClip" onclick=
"return cmdCopyToClip_click('txtWords')" name=
"cmdCopyToClip" value=
"Copy to clip-board"></td>
227 <p>Based on the following groups of letters (see the article). Randomly generated words tend to have too many multiple adjacent consonants, which result in ugly unpronounceable words. Remove the ugly words and just keep the ones you like. Hey, it's easier than rolling dice and takes less thought than actually making up words from your imagination.
</p>
228 <table border=
"1" cellspacing=
"1" cellpadding=
"0">
231 <td>i, a, o, u,
ü, e, au, ai, oi
</td>
234 <td>vowel (alternative)
</td>
235 <td>ai, au, ua, ue, ae
</td>
239 <td>i, a, o, u,
ü, e
</td>
242 <td>consonant Group I
</td>
243 <td>p, b, m, f, v, w, t, d, n, th
</td>
246 <td>consonant Group II
</td>
247 <td>dh, ch, l, y, k, g, kh, gh, ', q, h
</td>
250 <td>consonant Group III
</td>
251 <td>w, ts, tl, s, sh, z, zh, ss, r, l, hl
</td>
254 <td>consonant Initial
3</td>
255 <td>mr, ms, dl, tr, nj
</td>
258 <td>consonant
Initial
2</td>
259 <td>m, n, ng, r, l, y, s, sh, ss, j
</td>
262 <td>consonant
Final
</td>
263 <td>m, n, ng, r, l, kh, k, s, hl, tl, sh
</td>