Browse code

advanced

fenris authored on23/04/2016 01:33:44
Showing20 changed files
... ...
@@ -72,10 +72,20 @@ def main():
72 72
 		"build": "build",
73 73
 	}
74 74
 	
75
-	texs = [
75
+	parts_data = [
76
+		os.path.join(dirs["source"],"data","phonology_and_orthography.json"),
77
+		os.path.join(dirs["source"],"data","personal_pronouns.json"),
78
+	]
79
+	
80
+	parts_logic = [
81
+		os.path.join(dirs["source"],"logic","server","data.php"),
76 82
 		os.path.join(dirs["source"],"logic","server","settings.php"),
83
+	]
84
+	
85
+	parts_structure = [
77 86
 		os.path.join(dirs["source"],"structure","draft.html.php"),
78 87
 		os.path.join(dirs["source"],"structure","meta.html.php"),
88
+		os.path.join(dirs["source"],"structure","introduction.html.php"),
79 89
 		os.path.join(dirs["source"],"structure","preface.html.php"),
80 90
 		os.path.join(dirs["source"],"structure","grammar.html.php"),
81 91
 		os.path.join(dirs["source"],"structure","phonology_and_orthography.html.php"),
... ...
@@ -85,6 +95,7 @@ def main():
85 95
 		os.path.join(dirs["source"],"structure","conjugation.html.php"),
86 96
 		os.path.join(dirs["source"],"structure","declension.html.php"),
87 97
 		os.path.join(dirs["source"],"structure","attributes.html.php"),
98
+		os.path.join(dirs["source"],"structure","sentence_structure.html.php"),
88 99
 		os.path.join(dirs["source"],"structure","vocabulary.html.php"),
89 100
 	]
90 101
 	
... ...
@@ -95,6 +106,7 @@ def main():
95 106
 			[
96 107
 				os.path.join(dirs["build"],"draft.html"),
97 108
 				os.path.join(dirs["build"],"draft.css"),
109
+				os.path.join(dirs["build"],"draft.js"),
98 110
 				os.path.join(dirs["build"],"logo.svg"),
99 111
 			],
100 112
 			[],
... ...
@@ -128,7 +140,7 @@ def main():
128 140
 	rules.append(
129 141
 		class_rule(
130 142
 			os.path.join(dirs["build"],"draft.html"),
131
-			texs,
143
+			parts_data + parts_logic + parts_structure,
132 144
 			[
133 145
 				class_command_log({
134 146
 					"message": "compiling document ..."
... ...
@@ -143,6 +155,24 @@ def main():
143 155
 			]
144 156
 		)
145 157
 	)
158
+	rules.append(
159
+		class_rule(
160
+			os.path.join(dirs["build"],"draft.js"),
161
+			[os.path.join(dirs["source"],"logic","client","draft.js")],
162
+			[
163
+				class_command_log({
164
+					"message": "copying client-logic ..."
165
+				}),
166
+				class_command_directory_create({
167
+					"path": dirs["build"],
168
+				}),
169
+				class_command_file_copy({
170
+					"path-from": os.path.join(dirs["source"],"logic","client","draft.js"),
171
+					"path-to": os.path.join(dirs["build"],"draft.js"),
172
+				}),
173
+			]
174
+		)
175
+	)
146 176
 	rules.append(
147 177
 		class_rule(
148 178
 			os.path.join(dirs["build"],"logo.svg"),
... ...
@@ -1,4 +1,4 @@
1
-all: build/draft.html build/draft.css build/logo.svg
1
+all: build/draft.html build/draft.css build/draft.js build/logo.svg
2 2
 .PHONY: all
3 3
 
4 4
 clean: 
... ...
@@ -9,11 +9,16 @@ clear: clean
9 9
 	@ rm --recursive --force build
10 10
 .PHONY: clear
11 11
 
12
-build/draft.html: source/logic/server/settings.php source/structure/draft.html.php source/structure/meta.html.php source/structure/preface.html.php source/structure/grammar.html.php source/structure/phonology_and_orthography.html.php source/structure/pronouns.html.php source/structure/personal_pronouns.html.php source/structure/correlatives.html.php source/structure/conjugation.html.php source/structure/declension.html.php source/structure/attributes.html.php source/structure/vocabulary.html.php
12
+build/draft.html: source/data/phonology_and_orthography.json source/data/personal_pronouns.json source/logic/server/data.php source/logic/server/settings.php source/structure/draft.html.php source/structure/meta.html.php source/structure/introduction.html.php source/structure/preface.html.php source/structure/grammar.html.php source/structure/phonology_and_orthography.html.php source/structure/pronouns.html.php source/structure/personal_pronouns.html.php source/structure/correlatives.html.php source/structure/conjugation.html.php source/structure/declension.html.php source/structure/attributes.html.php source/structure/sentence_structure.html.php source/structure/vocabulary.html.php
13 13
 	@ echo -e '-- compiling document ...'
14 14
 	@ mkdir --parents build
15 15
 	@ php source/structure/draft.html.php > build/draft.html
16 16
 
17
+build/draft.js: source/logic/client/draft.js
18
+	@ echo -e '-- copying client-logic ...'
19
+	@ mkdir --parents build
20
+	@ cp --recursive source/logic/client/draft.js build/draft.js
21
+
17 22
 build/logo.svg: source/media/logo.svg
18 23
 	@ echo -e '-- copying logo ...'
19 24
 	@ mkdir --parents build
20 25
new file mode 100644
... ...
@@ -0,0 +1,80 @@
1
+[
2
+	{
3
+		"numerus": 1,
4
+		"persona": 0,
5
+		"genus": 0,
6
+		"fs": ["man"],
7
+		"en": ["one","you"]
8
+	},
9
+	{
10
+		"numerus": 1,
11
+		"persona": 1,
12
+		"genus": 0,
13
+		"fs": ["ek"],
14
+		"en": ["i"]
15
+	},
16
+	{
17
+		"numerus": 1,
18
+		"persona": 2,
19
+		"genus": 0,
20
+		"fs": ["du"],
21
+		"en": ["you","thou"]
22
+	},
23
+	{
24
+		"numerus": 1,
25
+		"persona": 3,
26
+		"genus": 0,
27
+		"fs": ["han"],
28
+		"en": []
29
+	},
30
+	{
31
+		"numerus": 1,
32
+		"persona": 3,
33
+		"genus": 1,
34
+		"fs": ["hin"],
35
+		"en": ["hi"]
36
+	},
37
+	{
38
+		"numerus": 1,
39
+		"persona": 3,
40
+		"genus": 2,
41
+		"fs": ["hun"],
42
+		"en": ["she"]
43
+	},
44
+	{
45
+		"numerus": 1,
46
+		"persona": 3,
47
+		"genus": 3,
48
+		"fs": ["het"],
49
+		"en": ["it"]
50
+	},
51
+	{
52
+		"numerus": 2,
53
+		"persona": 0,
54
+		"genus": 0,
55
+		"fs": ["man"],
56
+		"en": ["they","you"]
57
+	},
58
+	{
59
+		"numerus": 2,
60
+		"persona": 1,
61
+		"genus": 0,
62
+		"fs": ["vi"],
63
+		"en": ["we"]
64
+	},
65
+	{
66
+		"numerus": 2,
67
+		"persona": 2,
68
+		"genus": 0,
69
+		"fs": ["je"],
70
+		"en": ["you (all)"]
71
+	},
72
+	{
73
+		"numerus": 2,
74
+		"persona": 3,
75
+		"genus": 0,
76
+		"fs": ["di"],
77
+		"en": ["they"]
78
+	}
79
+]
80
+
0 81
new file mode 100644
... ...
@@ -0,0 +1,233 @@
1
+[
2
+	{
3
+		"type": "lateral approximant",
4
+		"ipa": "l",
5
+		"latin": "L/l",
6
+		"runic": "ᛚ",
7
+		"examples": {
8
+			"fs": "_l_eva",
9
+			"en": "_l_ive"
10
+		}
11
+	},
12
+	{
13
+		"type": "nasal",
14
+		"ipa": "m",
15
+		"latin": "M/m",
16
+		"runic": "ᛗ",
17
+		"examples": {
18
+			"fs": "_m_an",
19
+			"en": "_m_an"
20
+		}
21
+	},
22
+	{
23
+		"type": "nasal",
24
+		"ipa": "n",
25
+		"latin": "N/n",
26
+		"runic": "ᚾ",
27
+		"examples": {
28
+			"fs": "_n_it",
29
+			"en": "_n_ot"
30
+		}
31
+	},
32
+	{
33
+		"type": "nasal",
34
+		"ipa": "ŋ",
35
+		"latin": "Ng/ng",
36
+		"runic": "ᛜ",
37
+		"examples": {
38
+			"fs": "ri_ng_",
39
+			"en": "ri_ng_"
40
+		}
41
+	},
42
+	{
43
+		"type": "plosive",
44
+		"ipa": "g",
45
+		"latin": "G/g",
46
+		"runic": "ᚷ",
47
+		"examples": {
48
+			"fs": "_g_oa",
49
+			"en": "_g_o"
50
+		}
51
+	},
52
+	{
53
+		"type": "plosive",
54
+		"ipa": "k",
55
+		"latin": "K/k",
56
+		"runic": "ᚲ",
57
+		"examples": {
58
+			"fs": "bu_k_",
59
+			"en": "boo_k_"
60
+		}
61
+	},
62
+	{
63
+		"type": "plosive",
64
+		"ipa": "b",
65
+		"latin": "B/b",
66
+		"runic": "ᛒ",
67
+		"examples": {
68
+			"fs": "_b_ua",
69
+			"en": "_b_uild"
70
+		}
71
+	},
72
+	{
73
+		"type": "plosive",
74
+		"ipa": "p",
75
+		"latin": "P/p",
76
+		"runic": "ᛈ",
77
+		"examples": {
78
+			"fs": "di_p_",
79
+			"en": "dee_p_"
80
+		}
81
+	},
82
+	{
83
+		"type": "plosive",
84
+		"ipa": "d",
85
+		"latin": "D/d",
86
+		"runic": "ᛞ",
87
+		"examples": {
88
+			"fs": "gu_d_",
89
+			"en": "goo_d_"
90
+		}
91
+	},
92
+	{
93
+		"type": "plosive",
94
+		"ipa": "t",
95
+		"latin": "T/t",
96
+		"runic": "ᛏ",
97
+		"examples": {
98
+			"fs": "_t_id",
99
+			"en": "_t_ime"
100
+		}
101
+	},
102
+	{
103
+		"type": "fricative",
104
+		"ipa": "v",
105
+		"latin": "V/v",
106
+		"runic": "ᚹ",
107
+		"examples": {
108
+			"fs": "gi_v_a",
109
+			"en": "gi_v_e"
110
+		}
111
+	},
112
+	{
113
+		"type": "fricative",
114
+		"ipa": "f",
115
+		"latin": "F/f",
116
+		"runic": "ᚠ",
117
+		"examples": {
118
+			"fs": "_f_ut",
119
+			"en": "_f_oot"
120
+		}
121
+	},
122
+	{
123
+		"type": "fricative",
124
+		"ipa": "s",
125
+		"latin": "S/s",
126
+		"runic": "ᛋ",
127
+		"examples": {
128
+			"fs": "_s_mal",
129
+			"en": "_s_mall"
130
+		}
131
+	},
132
+	{
133
+		"type": "fricative",
134
+		"ipa": "h",
135
+		"latin": "H/h",
136
+		"runic": "ᚺ",
137
+		"examples": {
138
+			"fs": "_h_us",
139
+			"en": "_h_ouse"
140
+		}
141
+	},
142
+	{
143
+		"type": "tap/flap",
144
+		"ipa": "ɾ",
145
+		"latin": "R/r",
146
+		"runic": "ᚱ",
147
+		"examples": {
148
+			"fs": "_r_od",
149
+			"en": null
150
+		}
151
+	},
152
+	{
153
+		"type": "halfvowel",
154
+		"ipa": "j",
155
+		"latin": "J/j",
156
+		"runic": "ᛃ",
157
+		"examples": {
158
+			"fs": "_j_ar",
159
+			"en": "_y_ear"
160
+		}
161
+	},
162
+	{
163
+		"type": "vowel",
164
+		"ipa": "i",
165
+		"latin": "I/i",
166
+		"runic": "ᛁ",
167
+		"examples": {
168
+			"fs": "gr_i_d",
169
+			"en": "gr_ee_dy"
170
+		}
171
+	},
172
+	{
173
+		"type": "vowel",
174
+		"ipa": "e",
175
+		"latin": "E/e",
176
+		"runic": "ᛖ",
177
+		"examples": {
178
+			"fs": "inst_e_d",
179
+			"en": "~ inst_ea_d"
180
+		}
181
+	},
182
+	{
183
+		"type": "vowel",
184
+		"ipa": "a",
185
+		"latin": "A/a",
186
+		"runic": "ᚨ",
187
+		"examples": {
188
+			"fs": "f_a_der",
189
+			"en": "~ f_a_ther"
190
+		}
191
+	},
192
+	{
193
+		"type": "vowel",
194
+		"ipa": "o",
195
+		"latin": "O/o",
196
+		"runic": "ᛟ",
197
+		"examples": {
198
+			"fs": "_o_ld",
199
+			"en": "~ _o_ld"
200
+		}
201
+	},
202
+	{
203
+		"type": "vowel",
204
+		"ipa": "u",
205
+		"latin": "U/u",
206
+		"runic": "ᚢ",
207
+		"examples": {
208
+			"fs": "bl_u_",
209
+			"en": "bl_ue_"
210
+		}
211
+	},
212
+	{
213
+		"type": "vowel",
214
+		"ipa": "ø",
215
+		"latin": "Oy/oy",
216
+		"runic": "ᛟᛇ",
217
+		"examples": {
218
+			"fs": "sk_oy_n",
219
+			"en": null
220
+		}
221
+	},
222
+	{
223
+		"type": "vowel",
224
+		"ipa": "y",
225
+		"latin": "Uy/uy",
226
+		"runic": "ᚢᛇ",
227
+		"examples": {
228
+			"fs": "s_uy_d",
229
+			"en": null
230
+		}
231
+	}
232
+]
233
+
0 234
new file mode 100644
... ...
@@ -0,0 +1,44 @@
1
+"use strict";
2
+
3
+function load_file(url, usage)
4
+{
5
+	let request = new XMLHttpRequest();
6
+	request.open("GET", url, true);
7
+	request.send(null);
8
+	request.onreadystatechange = function ()
9
+	{
10
+		usage(null, request.responseText);
11
+	};
12
+}
13
+
14
+function add_tooltips()
15
+{
16
+	for (let dom_node of document.querySelectorAll(".word_fs"))
17
+	{
18
+		let url = "http://folksprak.org/munin.php?query=translation_fs_" + dom_node.textContent + "_en";
19
+		load_file
20
+		(
21
+			url,
22
+			function (error, content)
23
+			{
24
+				try
25
+				{
26
+					let object = JSON.parse(content);
27
+					dom_node.setAttribute("title", object.map(entry => entry.to.stem).join(", "));
28
+				}
29
+				catch (exception)
30
+				{
31
+					console.warn("couldn't parse ", content);
32
+				}
33
+			}
34
+		)
35
+	}
36
+}
37
+
38
+function main()
39
+{
40
+	// add_tooltips();
41
+}
42
+
43
+document.addEventListener("DOMContentLoaded", function (event) {main();});
44
+
0 45
new file mode 100644
... ...
@@ -0,0 +1,15 @@
1
+<?php
2
+	function read_json($path)
3
+	{
4
+		$content = file_get_contents($path);
5
+		$object = json_decode($content, true);
6
+		if ($object == null)
7
+		{
8
+			throw (new Exception("invalid json-file '" . $path . "'"));
9
+		}
10
+		return $object;
11
+	}
12
+?>
13
+
14
+
15
+
... ...
@@ -1,5 +1,12 @@
1 1
 <?php
2
-	$config = [
2
+	$configuration = [
3 3
 		"target" => "en",
4
+		"languagemap" => [
5
+			"fs" => "Folksprak",
6
+			"en" => "English",
7
+			"de" => "Deutsch",
8
+			"eo" => "Esperanto",
9
+			"nb" => "Norsk (Bokmål)",
10
+		]
4 11
 	];
5 12
 ?>
... ...
@@ -1,23 +1,62 @@
1
+<?php
2
+	global $configuration;
3
+ ?>
1 4
 <section class="section" id="grammar/conjugation">
2 5
 	<header>Conjugation</header>
3 6
 	<section class="subsection" id="conjugation/infinite_verbforms">
4 7
 		<header>Infinite Verbforms</header>
5
-		<p>The <span class="grammarterm">infinitive</span> is formed by appending <span class="word_fs">-a</span> to the verb-stem, e.g. <span class="word_fs">skriva</span> ~ <span class="word_en">to write</span>.</p>
6
-		<p>The <span class="grammarterm">active participle</span> is formed by appending <span class="word_fs">-end</span> to the verb-stem, e.g. <span class="word_fs">skrivend</span> ~ <span class="word_en">writing</span>.</p>
7
-		<p>The <span class="grammarterm">passive participle</span> is formed by appending <span class="word_fs">-et</span> to the verb-stem, e.g. <span class="word_fs">skrivet</span> ~ <span class="word_en">written</span>.</p>
8
-	</section>
9
-	<section class="subsection" id="conjugation/personae_numeri">
10
-		<header>Personae and Numeri</header>
11
-		<p>There is no change in the verb for conjugating according to person and count</p>
12
-		<p>Example: <span class="word_fs">ek skriv</span> ~ <span class="word_en">i write</span>, <span class="word_fs">du skriv</span> ~ <span class="word_en">you write</span>, <span class="word_fs">hin skriv</span> ~ <span class="word_en">he writes</span></p>
8
+		<p>The <span class="grammarterm">infinitive</span> is formed by appending <span class="word_fs">-a</span> to the verb-stem, e.g. <span class="word_fs">skriva</span> ~ <span class="word_otherlanguage">to write</span>.</p>
9
+		<p>The <span class="grammarterm">active participle</span> is formed by appending <span class="word_fs">-end</span> to the verb-stem, e.g. <span class="word_fs">skrivend</span> ~ <span class="word_otherlanguage">writing</span>.</p>
10
+		<p>The <span class="grammarterm">passive participle</span> is formed by appending <span class="word_fs">-et</span> to the verb-stem, e.g. <span class="word_fs">skrivet</span> ~ <span class="word_otherlanguage">written</span>. If speakable the <span class="word_fs">e</span> in the ending can be elluded, e.g. <span class="word_fs">skrivt</span>.</p>
13 11
 	</section>
14 12
 	<section class="subsection" id="conjugation/tempora">
15
-		<header>Tempora</header>
16
-		<span class="todo">all</span>
13
+		<header>Tempora and Modi</header>
14
+		<p>The following table lists the timeforms found in Folksprak and how they are built in the indicative-mode.</p>
15
+		<table>
16
+			<thead>
17
+				<tr>
18
+					<th>Name</th>
19
+					<th>Building Scheme (indicative)</th>
20
+					<th>Example</th>
21
+					<th><?php echo($configuration["languagemap"][$configuration["target"]]); ?> Translation</th>
22
+				</tr>
23
+			</thead>
24
+			<tbody>
25
+				<tr>
26
+					<td>Present</td>
27
+					<td>[verb:stem]</td>
28
+					<td><span class="sentence_fs">ek skriv</span></td>
29
+					<td><span class="sentence_otherlanguage">i write</span></td>
30
+				</tr>
31
+				<tr>
32
+					<td>Perfect</td>
33
+					<td>[flected <span class="word_fs">hav</span>] + [verb:passive participle]</td>
34
+					<td><span class="sentence_fs">ek hav skrivt</span></td>
35
+					<td><span class="sentence_otherlanguage">i have written</span></td>
36
+				</tr>
37
+				<tr>
38
+					<td>Future</td>
39
+					<td>[flected <span class="word_fs">skal</span>/<span class="word_fs">vil</span>/<span class="word_fs">kom</span>] + [verb:infinitive]</td>
40
+					<td><span class="sentence_fs">ek skal skriva</span></td>
41
+					<td><span class="sentence_otherlanguage">i will write</span></td>
42
+				</tr>
43
+				<!--
44
+				<tr>
45
+					<td>Explicite Future</td>
46
+					<td>[flected <span class="word_fs">verd</span>] + [verb:active participle]</td>
47
+					<td><span class="sentence_fs">ek verd skrivend</span></td>
48
+					<td><span class="sentence_otherlanguage">i will write.</span> (literally: <span class="sentence_otherlanguage">i become writing.</span>)</td>
49
+				</tr>
50
+				  -->
51
+			</tbody>
52
+		</table>
53
+		<p>The <span class="grammarterm">imperative</span> only exists in the present tense for the 2nd person singular and plural. It is formed by using the bare stem of the verb, optionally followed by the personal pronoun (i.e. either <span class="word_fs">du</span> or <span class="word_fs">je</span>) in order to specify or emphasize the numerus. Examples: <span class="sentence_fs">skriv!</span>, <span class="sentence_fs">skriv, je!</span>.</p>
54
+		<span class="todo">conjunctive</span>
17 55
 	</section>
18
-	<section class="subsection" id="conjugation/modi">
19
-		<header>Modi</header>
20
-		<span class="todo">all</span>
56
+	<section class="subsection" id="conjugation/personae_numeri">
57
+		<header>Personae and Numeri</header>
58
+		<p>There is no change in the verb for conjugating according to person and count.</p>
59
+		<p>Examples: <span class="sentence_fs">ek skriv</span> ~ <span class="sentence_otherlanguage">i write</span>, <span class="sentence_fs">du skriv</span> ~ <span class="sentence_otherlanguage">you write</span>, <span class="sentence_fs">hin skriv</span> ~ <span class="sentence_otherlanguage">he writes</span>, <span class="sentence_fs">vi skriv</span> ~ <span class="sentence_otherlanguage">we write</span></p>
21 60
 	</section>
22 61
 </section>
23 62
 
... ...
@@ -1,10 +1,11 @@
1
-<?php include("source/logic/server/settings.php"); ?>
2 1
 <!DOCTYPE HTML>
2
+<?php include_once("source/logic/server/settings.php"); ?>
3 3
 <html>
4 4
 	<head>
5 5
 		<meta charset="utf-8"/>
6 6
 		<?php include("source/structure/meta.html.php"); ?>
7 7
 		<link rel="stylesheet" type="text/css" href="draft.css"/>
8
+		<script type="text/javascript" src="draft.js"></script>
8 9
 	</head>
9 10
 	<body>
10 11
 		<div id="mid">
... ...
@@ -17,7 +18,7 @@
17 18
 			<!--
18 19
 			titlepage
19 20
 			  -->
20
-			<?php include("source/structure/preface.html.php"); ?>
21
+			<?php include("source/structure/introduction.html.php"); ?>
21 22
 			<!--
22 23
 			toc
23 24
 			  -->
... ...
@@ -1,9 +1,20 @@
1 1
 <section class="chapter" id="grammar">
2 2
 	<header>Grammar</header>
3
-	<?php include("source/structure/phonology_and_orthography.html.php"); ?>
4
-	<?php include("source/structure/pronouns.html.php"); ?>
5
-	<?php include("source/structure/conjugation.html.php"); ?>
6
-	<?php include("source/structure/declension.html.php"); ?>
7
-	<?php include("source/structure/attributes.html.php"); ?>
3
+<?php
4
+	array_map(
5
+		function ($name)
6
+		{
7
+			include("source/structure/" . $name . ".html.php");
8
+		},
9
+		[
10
+			"phonology_and_orthography",
11
+			"pronouns",
12
+			"conjugation",
13
+			"declension",
14
+			"attributes",
15
+			"sentence_structure",
16
+		]
17
+	);
18
+ ?>
8 19
 </section>
9 20
 
10 21
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+<section class="chapter pseudo" id="introduction">
2
+	<header>Introduction</header>
3
+	<?php include("source/structure/preface.html.php"); ?>
4
+</section>
5
+
... ...
@@ -1,3 +1,3 @@
1
-<title>Folksprak</title>
2
-<meta author="Christian Fraß"/>
1
+<title>Folksprak -- Draft</title>
2
+
3 3
 
... ...
@@ -1,83 +1,6 @@
1 1
 <?php
2
-$data = [
3
-	[
4
-		"numerus" => 1,
5
-		"persona" => 0,
6
-		"genus" => 0,
7
-		"fs" => ["man"],
8
-		"en" => ["one","you"],
9
-	],
10
-	[
11
-		"numerus" => 1,
12
-		"persona" => 1,
13
-		"genus" => 0,
14
-		"fs" => ["ek"],
15
-		"en" => ["i"],
16
-	],
17
-	[
18
-		"numerus" => 1,
19
-		"persona" => 2,
20
-		"genus" => 0,
21
-		"fs" => ["du"],
22
-		"en" => ["you","thou"],
23
-	],
24
-	[
25
-		"numerus" => 1,
26
-		"persona" => 3,
27
-		"genus" => 0,
28
-		"fs" => ["han"],
29
-		"en" => [],
30
-	],
31
-	[
32
-		"numerus" => 1,
33
-		"persona" => 3,
34
-		"genus" => 1,
35
-		"fs" => ["hin"],
36
-		"en" => ["hi"],
37
-	],
38
-	[
39
-		"numerus" => 1,
40
-		"persona" => 3,
41
-		"genus" => 2,
42
-		"fs" => ["hun"],
43
-		"en" => ["she"],
44
-	],
45
-	[
46
-		"numerus" => 1,
47
-		"persona" => 3,
48
-		"genus" => 3,
49
-		"fs" => ["het"],
50
-		"en" => ["it"],
51
-	],
52
-	[
53
-		"numerus" => 2,
54
-		"persona" => 0,
55
-		"genus" => 0,
56
-		"fs" => ["man"],
57
-		"en" => ["they","you"],
58
-	],
59
-	[
60
-		"numerus" => 2,
61
-		"persona" => 1,
62
-		"genus" => 0,
63
-		"fs" => ["vi"],
64
-		"en" => ["we"],
65
-	],
66
-	[
67
-		"numerus" => 2,
68
-		"persona" => 2,
69
-		"genus" => 0,
70
-		"fs" => ["je"],
71
-		"en" => ["you (all)"],
72
-	],
73
-	[
74
-		"numerus" => 2,
75
-		"persona" => 3,
76
-		"genus" => 0,
77
-		"fs" => ["di"],
78
-		"en" => ["they"],
79
-	],
80
-];
2
+global $configuration;
3
+include_once("source/logic/server/data.php");
81 4
 
82 5
 function convert_numerus($numerus)
83 6
 {
... ...
@@ -169,7 +92,6 @@ function convert_genus($genus)
169 92
 		}
170 93
 	}
171 94
 }
172
-
173 95
  ?>
174 96
 <section class="subsection" id="grammar/pronouns/personal_pronouns">
175 97
 	<header>Personal Pronouns</header>
... ...
@@ -177,13 +99,14 @@ function convert_genus($genus)
177 99
 		<thead>
178 100
 			<tr>
179 101
 				<th>Case</th>
180
-				<th>Folksprak</th>
181
-				<th>English</th>
102
+				<th><?php echo($configuration["languagemap"]["fs"]); ?></th>
103
+				<th><?php echo($configuration["languagemap"][$configuration["target"]]); ?></th>
182 104
 			</tr>
183 105
 		</thead>
184 106
 		<tbody>
185 107
 <?php
186
-	foreach ($data as $entry)
108
+	$data_personal_pronouns = read_json("source/data/personal_pronouns.json");
109
+	foreach ($data_personal_pronouns as $entry)
187 110
 	{
188 111
 		$entry_desc = implode(
189 112
 			" / ",
... ...
@@ -194,7 +117,7 @@ function convert_genus($genus)
194 117
 			]
195 118
 		);
196 119
 		$entry_fs = implode(", ", array_map(function ($word) {return ('<span class="word_fs">' . $word . '</span>');}, $entry["fs"]));
197
-		$entry_en = implode(", ", array_map(function ($word) {return ('<span class="word_en">' . $word . '</span>');}, $entry["en"]));
120
+		$entry_en = implode(", ", array_map(function ($word) {return ('<span class="word_otherlanguage">' . $word . '</span>');}, $entry["en"]));
198 121
  ?>
199 122
 			<tr>
200 123
 				<td><?php echo($entry_desc); ?></td>
... ...
@@ -206,5 +129,6 @@ function convert_genus($genus)
206 129
  ?>
207 130
 		</tbody>
208 131
 	</table>
132
+	<p>For the flected and otherwise related forms of the personal pronouns see the section <a href="#grammar/declension">Declension</a></p>
209 133
 </section>
210 134
 
... ...
@@ -1,248 +1,11 @@
1 1
 <?php
2
-	$groups = [
3
-		[
4
-			"name" => "Lateral Approximants",
5
-			"members" => [
6
-				[
7
-					"ipa" => "l",
8
-					"latin" => "L/l",
9
-					"runic" => "ᛚ",
10
-					"examples" => [
11
-						"fs" => "_l_eva",
12
-						"en" => "_l_ive",
13
-					],
14
-				]
15
-			],
16
-		],
17
-		[
18
-			"name" => "Nasals",
19
-			"members" => [
20
-				[
21
-					"ipa" => "m",
22
-					"latin" => "M/m",
23
-					"runic" => "ᛗ",
24
-					"examples" => [
25
-						"fs" => "_m_an",
26
-						"en" => "_m_an",
27
-					],
28
-				],
29
-				[
30
-					"ipa" => "n",
31
-					"latin" => "N/n",
32
-					"runic" => "ᚾ",
33
-					"examples" => [
34
-						"fs" => "_n_it",
35
-						"en" => "_n_ot",
36
-					],
37
-				],
38
-				[
39
-					"ipa" => "ŋ",
40
-					"latin" => "Ng/ng",
41
-					"runic" => "ᛜ",
42
-					"examples" => [
43
-						"fs" => "ri_ng_",
44
-						"en" => "ri_ng_",
45
-					],
46
-				],
47
-			],
48
-		],
49
-		[
50
-			"name" => "Plosives",
51
-			"members" => [
52
-				[
53
-					"ipa" => "g",
54
-					"latin" => "G/g",
55
-					"runic" => "ᚷ",
56
-					"examples" => [
57
-						"fs" => "_g_oa",
58
-						"en" => "_g_o",
59
-					],
60
-				],
61
-				[
62
-					"ipa" => "k",
63
-					"latin" => "K/k",
64
-					"runic" => "ᚲ",
65
-					"examples" => [
66
-						"fs" => "bu_k_",
67
-						"en" => "boo_k_",
68
-					],
69
-				],
70
-				[
71
-					"ipa" => "b",
72
-					"latin" => "B/b",
73
-					"runic" => "ᛒ",
74
-					"examples" => [
75
-						"fs" => "_b_ua",
76
-						"en" => "_b_uild",
77
-					],
78
-				],
79
-				[
80
-					"ipa" => "p",
81
-					"latin" => "P/p",
82
-					"runic" => "ᛈ",
83
-					"examples" => [
84
-						"fs" => "di_p_",
85
-						"en" => "dee_p_",
86
-					],
87
-				],
88
-				[
89
-					"ipa" => "d",
90
-					"latin" => "D/d",
91
-					"runic" => "ᛞ",
92
-					"examples" => [
93
-						"fs" => "gu_d_",
94
-						"en" => "goo_d_",
95
-					],
96
-				],
97
-				[
98
-					"ipa" => "t",
99
-					"latin" => "T/t",
100
-					"runic" => "ᛏ",
101
-					"examples" => [
102
-						"fs" => "_t_id",
103
-						"en" => "_t_ime",
104
-					],
105
-				],
106
-			],
107
-		],
108
-		[
109
-			"name" => "Fricatives",
110
-			"members" => [
111
-				[
112
-					"ipa" => "v",
113
-					"latin" => "V/v",
114
-					"runic" => "ᚹ",
115
-					"examples" => [
116
-						"fs" => "gi_v_a",
117
-						"en" => "gi_v_e",
118
-					],
119
-				],
120
-				[
121
-					"ipa" => "f",
122
-					"latin" => "F/f",
123
-					"runic" => "ᚠ",
124
-					"examples" => [
125
-						"fs" => "_f_rend",
126
-						"en" => "_f_riend",
127
-					],
128
-				],
129
-				[
130
-					"ipa" => "s",
131
-					"latin" => "S/s",
132
-					"runic" => "ᛋ",
133
-					"examples" => [
134
-						"fs" => "_s_mal",
135
-						"en" => "_s_mall",
136
-					],
137
-				],
138
-				[
139
-					"ipa" => "h",
140
-					"latin" => "H/h",
141
-					"runic" => "ᚺ",
142
-					"examples" => [
143
-						"fs" => "_h_us",
144
-						"en" => "_h_ouse",
145
-					],
146
-				],
147
-			],
148
-		],
149
-		[
150
-			"name" => "Vibrants/Taps/Flaps",
151
-			"members" => [
152
-				[
153
-					"ipa" => "ɾ",
154
-					"latin" => "R/r",
155
-					"runic" => "ᚱ",
156
-					"examples" => [
157
-						"fs" => "_r_od",
158
-						"en" => NULL,
159
-					],
160
-				],
161
-			],
162
-		],
163
-		[
164
-			"name" => "Halfvowels",
165
-			"members" => [
166
-				[
167
-					"ipa" => "j",
168
-					"latin" => "J/j",
169
-					"runic" => "ᛃ",
170
-					"examples" => [
171
-						"fs" => "_j_ar",
172
-						"en" => "_y_ear",
173
-					],
174
-				],
175
-			],
176
-		],
177
-		[
178
-			"name" => "Vowels",
179
-			"members" => [
180
-				[
181
-					"ipa" => "i",
182
-					"latin" => "I/i",
183
-					"runic" => "ᛁ",
184
-					"examples" => [
185
-						"fs" => "gr_i_d",
186
-						"en" => "gr_ee_dy",
187
-					],
188
-				],
189
-				[
190
-					"ipa" => "e",
191
-					"latin" => "E/e",
192
-					"runic" => "ᛖ",
193
-					"examples" => [
194
-						"fs" => "inst_e_d",
195
-						"en" => "~ inst_ea_d",
196
-					],
197
-				],
198
-				[
199
-					"ipa" => "a",
200
-					"latin" => "A/a",
201
-					"runic" => "ᚨ",
202
-					"examples" => [
203
-						"fs" => "f_a_der",
204
-						"en" => "~ f_a_ther",
205
-					],
206
-				],
207
-				[
208
-					"ipa" => "o",
209
-					"latin" => "O/o",
210
-					"runic" => "ᛟ",
211
-					"examples" => [
212
-						"fs" => "_o_ld",
213
-						"en" => "~ _o_ld",
214
-					],
215
-				],
216
-				[
217
-					"ipa" => "u",
218
-					"latin" => "U/u",
219
-					"runic" => "ᚢ",
220
-					"examples" => [
221
-						"fs" => "bl_u_",
222
-						"en" => "bl_ue_",
223
-					],
224
-				],
225
-				[
226
-					"ipa" => "ø",
227
-					"latin" => "Oy/oy",
228
-					"runic" => "ᛟᛇ",
229
-					"examples" => [
230
-						"fs" => "sk_oy_n",
231
-						"en" => NULL,
232
-					],
233
-				],
234
-				[
235
-					"ipa" => "y",
236
-					"latin" => "Uy/uy",
237
-					"runic" => "ᚢᛇ",
238
-					"examples" => [
239
-						"fs" => "s_uy_d",
240
-						"en" => NULL,
241
-					],
242
-				],
243
-			],
244
-		],
245
-	];
2
+	global $configuration;
3
+	include_once("source/logic/server/data.php");
4
+	
5
+	function format($string)
6
+	{
7
+		return (($string == NULL) ? "--" : preg_replace("/_([^_]*)_/", "<u>$1</u>", $string));
8
+	}
246 9
  ?>
247 10
 <section class="section" id="grammar/phonology_and_orthography">
248 11
 	<header>Phonology and Orthography</header>
... ...
@@ -252,52 +15,33 @@
252 15
 	<table>
253 16
 		<thead>
254 17
 			<tr>
255
-				<th>Group</th>
256 18
 				<th>IPA-sound</th>
19
+				<th>Type</th>
257 20
 				<th>Latin letter Representation</th>
258 21
 				<th>Runic Representation</th>
259
-				<th>Folksprak Example</th>
260
-				<th>English Example</th>
22
+				<th><?php echo($configuration["languagemap"]["fs"]); ?> Example</th>
23
+				<th><?php echo($configuration["languagemap"][$configuration["target"]]); ?> Example</th>
261 24
 			</tr>
262 25
 		</thead>
263 26
 		<tbody>
264 27
 <?php
265
-	function format($string)
266
-	{
267
-		return (($string == NULL) ? "--" : preg_replace("/_([^_]*)_/", "<u>$1</u>", $string));
268
-	}
269
-	
270
-	foreach ($groups as $group)
28
+	$data_phonology_and_orthography = read_json("source/data/phonology_and_orthography.json");
29
+	foreach ($data_phonology_and_orthography as $entry)
271 30
 	{
272 31
  ?>
273
-<?php
274
-		$first = true;
275
-		foreach ($group["members"] as $member)
276
-		{
277
- ?>
278
-		<tr>
279
-<?php
280
-			if ($first)
281
-			{
282
- ?>
283
-				<td rowspan="<?php echo(sizeof($group["members"])); ?>"><?php echo($group["name"]); ?></td>
284
-<?php
285
-				$first = false;
286
-			}
287
- ?>
288
-			<td><span class="ipa"><?php echo($member["ipa"]); ?></span></td>
289
-			<td><span class="word_fs"><?php echo($member["latin"]); ?></span></td>
290
-			<td><span class="word_fs"><?php echo($member["runic"]); ?></span></td>
291
-			<td><span class="word_fs"><?php echo(format($member["examples"]["fs"])); ?></span></td>
292
-			<td><span class="word_en"><?php echo(format($member["examples"]["en"])); ?></span></td>
293
-		</tr>
294
-<?php
295
-		}
296
- ?>
32
+	<tr>
33
+		<td><span class="ipa"><?php echo($entry["ipa"]); ?></span></td>
34
+		<td><?php echo($entry["type"]); ?></td>
35
+		<td><span class="word_fs"><?php echo($entry["latin"]); ?></span></td>
36
+		<td><span class="word_fs runic"><?php echo($entry["runic"]); ?></span></td>
37
+		<td><span class="word_fs"><?php echo(format($entry["examples"]["fs"])); ?></span></td>
38
+		<td><span class="word_otherlanguage"><?php echo(format($entry["examples"][$configuration["target"]])); ?></span></td>
39
+	</tr>
297 40
 <?php
298 41
 	}
299 42
  ?>
300 43
 		</tbody>
301 44
 	</table>
45
+	<span class="note_warning">The runic writing is not meant to be used in regular texts. Use it only for purposes like art, etc.!</span>
302 46
 </section>
303 47
 
... ...
@@ -1,12 +1,10 @@
1
-<section class="chapter pseudo" id="intro">
2
-	<section class="section pseudo" id="intro/preface">
3
-		<header>Preface</header>
4
-		<section class="subsection pseudo" id="intro/preface/what_is_it_about">
5
-			<header>What is it about?</header>
6
-			<p>Folksprak is the name of a project that aims to construct an inter-Germanic zonal auxiliary language, which means a language that can be easily understood by any speaker of a Germanic language (a group numbering over 465 million native speakers with an additional 300 to 900 million speaking English as a second language) without ever having learned it.</p>
7
-			<p>Folksprak is not meant to be designed by any one individual, but rather a collective work created by all interested parties; so you're welcome to participate.</p>
8
-			<p>The content of this document is the result of a collaboration between people from different parts on earth, connected by the internet. Its not a final specification for Folksprak, but a draft as a base to work on. Please let us know what you think about it and how you would improve it! You can find us in the IRC-Channel <code>##folksprak</code> on <a href="irc://irc.freenode.net">irc.freenode.net</a>. You can also write an E-Mail to <a href="mailto:admin@folksprak.org">admin@folksprak.org</a>.</p>
9
-		</section>
1
+<section class="section pseudo" id="intro/preface">
2
+	<header>Preface</header>
3
+	<section class="subsection pseudo" id="introduction/preface/what_is_it_about">
4
+		<header>What is it about?</header>
5
+		<p>Folksprak is the name of a project that aims to construct an inter-Germanic zonal auxiliary language, which means a language that can be easily understood by any speaker of a Germanic language (a group numbering over 465 million native speakers with an additional 300 to 900 million speaking English as a second language) without ever having learned it.</p>
6
+		<p>Folksprak is not meant to be designed by any one individual, but rather a collective work created by all interested parties; so you're welcome to participate.</p>
7
+		<p>The content of this document is the result of a collaboration between people from different parts on earth, connected by the internet. Its not a final specification for Folksprak, but a draft as a base to work on. Please let us know what you think about it and how you would improve it! You can find us in the IRC-Channel <span class="code">##folksprak</span> on <a href="irc://irc.freenode.net">irc.freenode.net</a>. You can also write an E-Mail to <a href="mailto:admin@folksprak.org">admin@folksprak.org</a>.</p>
10 8
 	</section>
11 9
 </section>
12 10
 
13 11
new file mode 100644
... ...
@@ -0,0 +1,5 @@
1
+<section class="section" id="grammar/sentence_structure">
2
+	<header>Sentence Structure</header>
3
+	<span class="todo">all</span>
4
+</section>
5
+
... ...
@@ -1,4 +1,4 @@
1
-<section class="cheptar" id="vocabulary">
1
+<section class="chapter" id="vocabulary">
2 2
 	<header>Vocabulary</header>
3 3
 	See <a href="http://folksprak.org/?target=dictionary">Munin-Dictionary</a>
4 4
 </section>
... ...
@@ -1,10 +1,43 @@
1
+.node
2
+{
3
+	padding: 16px;
4
+	margin: 8px;
5
+	border-radius: 4px;
6
+	box-shadow: 4px 4px 4px hsv(0, 0%, 0%);
7
+	color: black;
8
+}
9
+
10
+.note_information
11
+{
12
+	&:extend(.node);
13
+	background-color: hsv(120, 20%, 100%);
14
+	&:before {font-weight: bold; content: "[i] ";}
15
+}
16
+
17
+.note_warning
18
+{
19
+	/*
20
+	&:extend(.node);
21
+	background-color: hsv( 60, 20%, 100%);
22
+	&:before {font-weight: bold; content: "[!] ";}
23
+	 */
24
+	&:before {font-weight: bold; content: "Note: ";}
25
+}
26
+
27
+.note_error
28
+{
29
+	&:extend(.node);
30
+	background-color: hsv(  0, 20%, 100%);
31
+	&:before {font-weight: bold; content: "[x] ";}
32
+}
33
+
1 34
 .ipa
2 35
 {
3 36
 	&:before
4 37
 	{
5 38
 		content: "/";
6 39
 	}
7
-	
40
+
8 41
 	&:after
9 42
 	{
10 43
 		content: "/";
... ...
@@ -13,7 +46,15 @@
13 46
 
14 47
 .grammarterm
15 48
 {
49
+	/*
16 50
 	text-decoration: underline;
51
+	 */
52
+	font-style: italic;
53
+}
54
+
55
+.runic
56
+{
57
+	font-weight: bold;
17 58
 }
18 59
 
19 60
 .word_fs
... ...
@@ -21,9 +62,23 @@
21 62
 	font-weight: bold;
22 63
 }
23 64
 
24
-.word_en
65
+.word_otherlanguage
66
+{
67
+	font-style: italic;
68
+}
69
+
70
+.sentence_fs
71
+{
72
+	font-weight: bold;
73
+	&:before {content: "\"";}
74
+	&:after {content: "\"";}
75
+}
76
+
77
+.sentence_otherlanguage
25 78
 {
26 79
 	font-style: italic;
80
+	&:before {content: "\"";}
81
+	&:after {content: "\"";}
27 82
 }
28 83
 
29 84
 .todo
... ...
@@ -33,12 +88,18 @@
33 88
 		content: "[ToDo] ";
34 89
 	}
35 90
 	
91
+	margin: 4px;
36 92
 	padding: 4px;
37
-	background-color: red;
93
+	background-color: hsv(  0,60%,80%);
38 94
 	color: white;
39 95
 	font-weight: bold;
40 96
 }
41 97
 
98
+.code
99
+{
100
+	font-family: monospace;
101
+}
102
+
42 103
 section
43 104
 {
44 105
 	&.chapter
... ...
@@ -130,6 +191,9 @@ a
130 191
 {
131 192
 	color: hsv(120, 50%, 50%);
132 193
 	text-decoration: none;
194
+	font-weight: bold;
195
+	/*
133 196
 	font-family: monospace;
197
+	 */
134 198
 }
135 199
 
... ...
@@ -1,3 +1,8 @@
1
+*
2
+{
3
+	font-family: sans-serif;
4
+}
5
+
1 6
 body
2 7
 {
3 8
 	background-color: hsv(0,0%,80%);
4 9
deleted file mode 100644
... ...
@@ -1,117 +0,0 @@
1
-.ipa
2
-{
3
-	&:before
4
-	{
5
-		content: "/";
6
-	}
7
-	
8
-	&:after
9
-	{
10
-		content: "/";
11
-	}
12
-}
13
-
14
-.word_fs
15
-{
16
-	font-weight: bold;
17
-}
18
-
19
-.todo
20
-{
21
-	&:before
22
-	{
23
-		content: "[ToDo] ";
24
-	}
25
-	
26
-	padding: 4px;
27
-	background-color: red;
28
-	color: white;
29
-	font-weight: bold;
30
-}
31
-
32
-section
33
-{
34
-	&.chapter
35
-	{
36
-		margin-bottom: 16px;
37
-		
38
-		& > header
39
-		{
40
-			font-size: 1.6em;
41
-			margin-bottom: 6px;
42
-		}
43
-		
44
-		& > *
45
-		{
46
-			margin-left: 12px;
47
-		}
48
-	}
49
-	
50
-	&.section
51
-	{
52
-		margin-bottom: 14px;
53
-		
54
-		& > header
55
-		{
56
-			font-size: 1.4em;
57
-			margin-bottom: 4px;
58
-		}
59
-		
60
-		& > *
61
-		{
62
-			margin-left: 8px;
63
-		}
64
-	}
65
-	
66
-	
67
-	&.subsection
68
-	{
69
-		margin-bottom: 12px;
70
-		
71
-		& > header
72
-		{
73
-			font-size: 1.2em;
74
-			margin-bottom: 2px;
75
-		}
76
-		
77
-		& > *
78
-		{
79
-			margin-left: 4px;
80
-		}
81
-	}
82
-	
83
-	&.pseudo
84
-	{
85
-		& > header
86
-		{
87
-			font-style: italic;
88
-		}
89
-	}
90
-}
91
-
92
-table
93
-{
94
-	border-collapse: collapse;
95
-}
96
-
97
-th,td
98
-{
99
-	border: 1px solid black;
100
-	font-size: 0.8em;
101
-	padding: 4px;
102
-}
103
-
104
-body
105
-{
106
-	background-color: hsv(0,0%,80%);
107
-}
108
-
109
-#mid
110
-{
111
-	background-color: hsv(0,0%,100%);
112
-	box-shadow: 2px 2px 2px hsv(0,0%,50%);
113
-	padding: 80px 40px;
114
-	max-width: 1000px;
115
-	margin: auto;
116
-}
117
-