fenris commited on 2016-04-24 18:00:07
Zeige 28 geänderte Dateien mit 1448 Einfügungen und 253 Löschungen.
... | ... |
@@ -75,11 +75,15 @@ def main(): |
75 | 75 |
parts_data = [ |
76 | 76 |
os.path.join(dirs["source"],"data","phonology_and_orthography.json"), |
77 | 77 |
os.path.join(dirs["source"],"data","personal_pronouns.json"), |
78 |
+ os.path.join(dirs["source"],"data","word_functions.json"), |
|
79 |
+ os.path.join(dirs["source"],"data","timeforms.json"), |
|
78 | 80 |
] |
79 | 81 |
|
80 | 82 |
parts_logic = [ |
83 |
+ os.path.join(dirs["source"],"logic","server","misc.php"), |
|
81 | 84 |
os.path.join(dirs["source"],"logic","server","data.php"), |
82 | 85 |
os.path.join(dirs["source"],"logic","server","settings.php"), |
86 |
+ os.path.join(dirs["source"],"logic","server","table.php"), |
|
83 | 87 |
] |
84 | 88 |
|
85 | 89 |
parts_structure = [ |
... | ... |
@@ -87,6 +91,8 @@ def main(): |
87 | 91 |
os.path.join(dirs["source"],"structure","meta.html.php"), |
88 | 92 |
os.path.join(dirs["source"],"structure","introduction.html.php"), |
89 | 93 |
os.path.join(dirs["source"],"structure","preface.html.php"), |
94 |
+ os.path.join(dirs["source"],"structure","key_parameters.html.php"), |
|
95 |
+ os.path.join(dirs["source"],"structure","toc.html.php"), |
|
90 | 96 |
os.path.join(dirs["source"],"structure","grammar.html.php"), |
91 | 97 |
os.path.join(dirs["source"],"structure","phonology_and_orthography.html.php"), |
92 | 98 |
os.path.join(dirs["source"],"structure","pronouns.html.php"), |
... | ... |
@@ -96,6 +102,7 @@ def main(): |
96 | 102 |
os.path.join(dirs["source"],"structure","declension.html.php"), |
97 | 103 |
os.path.join(dirs["source"],"structure","attributes.html.php"), |
98 | 104 |
os.path.join(dirs["source"],"structure","sentence_structure.html.php"), |
105 |
+ os.path.join(dirs["source"],"structure","word_functions.html.php"), |
|
99 | 106 |
os.path.join(dirs["source"],"structure","vocabulary.html.php"), |
100 | 107 |
] |
101 | 108 |
|
... | ... |
@@ -108,6 +115,7 @@ def main(): |
108 | 115 |
os.path.join(dirs["build"],"draft.css"), |
109 | 116 |
os.path.join(dirs["build"],"draft.js"), |
110 | 117 |
os.path.join(dirs["build"],"logo.svg"), |
118 |
+ os.path.join(dirs["build"],"favicon.png"), |
|
111 | 119 |
], |
112 | 120 |
[], |
113 | 121 |
True |
... | ... |
@@ -191,6 +199,24 @@ def main(): |
191 | 199 |
] |
192 | 200 |
) |
193 | 201 |
) |
202 |
+ rules.append( |
|
203 |
+ class_rule( |
|
204 |
+ os.path.join(dirs["build"],"favicon.png"), |
|
205 |
+ [os.path.join(dirs["source"],"media","folksprak_16x16.png")], |
|
206 |
+ [ |
|
207 |
+ class_command_log({ |
|
208 |
+ "message": "copying favicon ..." |
|
209 |
+ }), |
|
210 |
+ class_command_directory_create({ |
|
211 |
+ "path": dirs["build"], |
|
212 |
+ }), |
|
213 |
+ class_command_file_copy({ |
|
214 |
+ "path-from": os.path.join(dirs["source"],"media","folksprak_16x16.png"), |
|
215 |
+ "path-to": os.path.join(dirs["build"],"favicon.png"), |
|
216 |
+ }), |
|
217 |
+ ] |
|
218 |
+ ) |
|
219 |
+ ) |
|
194 | 220 |
rules.append( |
195 | 221 |
class_rule( |
196 | 222 |
os.path.join(dirs["build"],"draft.css"), |
... | ... |
@@ -1,4 +1,4 @@ |
1 |
-all: build/draft.html build/draft.css build/draft.js build/logo.svg |
|
1 |
+all: build/draft.html build/draft.css build/draft.js build/logo.svg build/favicon.png |
|
2 | 2 |
.PHONY: all |
3 | 3 |
|
4 | 4 |
clean: |
... | ... |
@@ -9,7 +9,7 @@ clear: clean |
9 | 9 |
@ rm --recursive --force build |
10 | 10 |
.PHONY: clear |
11 | 11 |
|
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 |
|
12 |
+build/draft.html: source/data/phonology_and_orthography.json source/data/personal_pronouns.json source/data/word_functions.json source/data/timeforms.json source/logic/server/misc.php source/logic/server/data.php source/logic/server/settings.php source/logic/server/table.php source/structure/draft.html.php source/structure/meta.html.php source/structure/introduction.html.php source/structure/preface.html.php source/structure/key_parameters.html.php source/structure/toc.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/word_functions.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 |
... | ... |
@@ -24,6 +24,11 @@ build/logo.svg: source/media/logo.svg |
24 | 24 |
@ mkdir --parents build |
25 | 25 |
@ cp --recursive source/media/logo.svg build/logo.svg |
26 | 26 |
|
27 |
+build/favicon.png: source/media/folksprak_16x16.png |
|
28 |
+ @ echo -e '-- copying favicon ...' |
|
29 |
+ @ mkdir --parents build |
|
30 |
+ @ cp --recursive source/media/folksprak_16x16.png build/favicon.png |
|
31 |
+ |
|
27 | 32 |
build/draft.css: source/style/common.less source/style/concrete.less |
28 | 33 |
@ echo -e '-- compiling style ...' |
29 | 34 |
@ mkdir --parents temp |
... | ... |
@@ -0,0 +1,113 @@ |
1 |
+[ |
|
2 |
+ { |
|
3 |
+ "domain": "Concrete", |
|
4 |
+ "interrogative": ["vilk"], |
|
5 |
+ "relative": ["vilk"], |
|
6 |
+ "demonstrative_far": ["jen"], |
|
7 |
+ "demonstrative_near": ["dis"], |
|
8 |
+ "universal": ["al"], |
|
9 |
+ "undefined": ["et"], |
|
10 |
+ "negative": ["ing"] |
|
11 |
+ }, |
|
12 |
+ { |
|
13 |
+ "domain": "Person", |
|
14 |
+ "interrogative": ["vilk man", "ve"], |
|
15 |
+ "relative": ["vilk man", "ve"], |
|
16 |
+ "demonstrative_far": ["jen man"], |
|
17 |
+ "demonstrative_near": ["dis man"], |
|
18 |
+ "universal": ["al man", "alve"], |
|
19 |
+ "undefined": ["et man", "etve"], |
|
20 |
+ "negative": ["ing man", "ingve"] |
|
21 |
+ }, |
|
22 |
+ { |
|
23 |
+ "domain": "Thing", |
|
24 |
+ "interrogative": ["vilk ding", "vat"], |
|
25 |
+ "relative": ["vilk ding", "vat"], |
|
26 |
+ "demonstrative_far": ["jen ding", "dat"], |
|
27 |
+ "demonstrative_near": ["dis ding"], |
|
28 |
+ "universal": ["al ding", "alvat"], |
|
29 |
+ "undefined": ["et ding", "etvat"], |
|
30 |
+ "negative": ["ing ding", "ingvat"] |
|
31 |
+ }, |
|
32 |
+ { |
|
33 |
+ "domain": "Posession", |
|
34 |
+ "interrogative": ["av vilk man", "ves"], |
|
35 |
+ "relative": ["av vilk man", "ves"], |
|
36 |
+ "demonstrative_far": ["av jen man"], |
|
37 |
+ "demonstrative_near": ["av dis man"], |
|
38 |
+ "universal": ["av al man", "alves"], |
|
39 |
+ "undefined": ["av et man", "etves"], |
|
40 |
+ "negative": ["av ing man", "ingves"] |
|
41 |
+ }, |
|
42 |
+ { |
|
43 |
+ "domain": "Time", |
|
44 |
+ "interrogative": ["vilk tid", "van"], |
|
45 |
+ "relative": ["vilk tid", "van"], |
|
46 |
+ "demonstrative_far": ["jen tid", "dan"], |
|
47 |
+ "demonstrative_near": ["dis tid", "no"], |
|
48 |
+ "universal": ["al tid", "alvan"], |
|
49 |
+ "undefined": ["et tid", "etvan"], |
|
50 |
+ "negative": ["ing tid", "ingvan"] |
|
51 |
+ }, |
|
52 |
+ { |
|
53 |
+ "domain": "Location", |
|
54 |
+ "interrogative": ["vilk sted", "var"], |
|
55 |
+ "relative": ["vilk sted", "var"], |
|
56 |
+ "demonstrative_far": ["jen sted", "dar"], |
|
57 |
+ "demonstrative_near": ["dis sted", "har"], |
|
58 |
+ "universal": ["al sted", "alvar"], |
|
59 |
+ "undefined": ["et sted", "etvar"], |
|
60 |
+ "negative": ["ing sted", "ingvar"] |
|
61 |
+ }, |
|
62 |
+ { |
|
63 |
+ "domain": "Direction", |
|
64 |
+ "interrogative": ["to vilk sted", "varto"], |
|
65 |
+ "relative": ["to vilk sted", "varto"], |
|
66 |
+ "demonstrative_far": ["to jen sted", "darto"], |
|
67 |
+ "demonstrative_near": ["to dis sted", "harto"], |
|
68 |
+ "universal": ["to al sted", "alto"], |
|
69 |
+ "undefined": ["to et sted", "etto"], |
|
70 |
+ "negative": ["to ing sted", "ingto"] |
|
71 |
+ }, |
|
72 |
+ { |
|
73 |
+ "domain": "Cause", |
|
74 |
+ "interrogative": ["fur vilk grund", "varfur"], |
|
75 |
+ "relative": ["fur vilk grund", "varfur"], |
|
76 |
+ "demonstrative_far": ["fur jen grund", "darfur"], |
|
77 |
+ "demonstrative_near": ["fur dis grund", "harfur"], |
|
78 |
+ "universal": ["fur al grund", "alfur"], |
|
79 |
+ "undefined": ["fur et grund", "etfur"], |
|
80 |
+ "negative": ["fur ing grund", "ingfur"] |
|
81 |
+ }, |
|
82 |
+ { |
|
83 |
+ "domain": "Manner", |
|
84 |
+ "interrogative": ["vilk mot", "hur"], |
|
85 |
+ "relative": ["vilk mot", "hur"], |
|
86 |
+ "demonstrative_far": ["jen mot", "so"], |
|
87 |
+ "demonstrative_near": ["dis mot", "so"], |
|
88 |
+ "universal": ["al mot"], |
|
89 |
+ "undefined": ["et mot"], |
|
90 |
+ "negative": ["ing mot"] |
|
91 |
+ }, |
|
92 |
+ { |
|
93 |
+ "domain": "Type", |
|
94 |
+ "interrogative": ["vilk slag"], |
|
95 |
+ "relative": ["vilk slag"], |
|
96 |
+ "demonstrative_far": ["jen slag", "solk"], |
|
97 |
+ "demonstrative_near": ["dis slag"], |
|
98 |
+ "universal": ["al slag"], |
|
99 |
+ "undefined": ["et slag"], |
|
100 |
+ "negative": ["ing slag"] |
|
101 |
+ }, |
|
102 |
+ { |
|
103 |
+ "domain": "Ammount", |
|
104 |
+ "interrogative": ["vilk mang"], |
|
105 |
+ "relative": ["vilk mang"], |
|
106 |
+ "demonstrative_far": ["jen mang"], |
|
107 |
+ "demonstrative_near": ["dis mang"], |
|
108 |
+ "universal": ["al mang"], |
|
109 |
+ "undefined": ["et mang"], |
|
110 |
+ "negative": ["ing mang"] |
|
111 |
+ } |
|
112 |
+] |
|
113 |
+ |
... | ... |
@@ -4,6 +4,7 @@ |
4 | 4 |
"ipa": "l", |
5 | 5 |
"latin": "L/l", |
6 | 6 |
"runic": "ᛚ", |
7 |
+ "remark": null, |
|
7 | 8 |
"examples": { |
8 | 9 |
"fs": "_l_eva", |
9 | 10 |
"en": "_l_ive" |
... | ... |
@@ -14,6 +15,7 @@ |
14 | 15 |
"ipa": "m", |
15 | 16 |
"latin": "M/m", |
16 | 17 |
"runic": "ᛗ", |
18 |
+ "remark": null, |
|
17 | 19 |
"examples": { |
18 | 20 |
"fs": "_m_an", |
19 | 21 |
"en": "_m_an" |
... | ... |
@@ -24,6 +26,7 @@ |
24 | 26 |
"ipa": "n", |
25 | 27 |
"latin": "N/n", |
26 | 28 |
"runic": "ᚾ", |
29 |
+ "remark": null, |
|
27 | 30 |
"examples": { |
28 | 31 |
"fs": "_n_it", |
29 | 32 |
"en": "_n_ot" |
... | ... |
@@ -34,6 +37,7 @@ |
34 | 37 |
"ipa": "ŋ", |
35 | 38 |
"latin": "Ng/ng", |
36 | 39 |
"runic": "ᛜ", |
40 |
+ "remark": null, |
|
37 | 41 |
"examples": { |
38 | 42 |
"fs": "ri_ng_", |
39 | 43 |
"en": "ri_ng_" |
... | ... |
@@ -44,6 +48,7 @@ |
44 | 48 |
"ipa": "g", |
45 | 49 |
"latin": "G/g", |
46 | 50 |
"runic": "ᚷ", |
51 |
+ "remark": null, |
|
47 | 52 |
"examples": { |
48 | 53 |
"fs": "_g_oa", |
49 | 54 |
"en": "_g_o" |
... | ... |
@@ -54,6 +59,7 @@ |
54 | 59 |
"ipa": "k", |
55 | 60 |
"latin": "K/k", |
56 | 61 |
"runic": "ᚲ", |
62 |
+ "remark": null, |
|
57 | 63 |
"examples": { |
58 | 64 |
"fs": "bu_k_", |
59 | 65 |
"en": "boo_k_" |
... | ... |
@@ -64,6 +70,7 @@ |
64 | 70 |
"ipa": "b", |
65 | 71 |
"latin": "B/b", |
66 | 72 |
"runic": "ᛒ", |
73 |
+ "remark": null, |
|
67 | 74 |
"examples": { |
68 | 75 |
"fs": "_b_ua", |
69 | 76 |
"en": "_b_uild" |
... | ... |
@@ -74,6 +81,7 @@ |
74 | 81 |
"ipa": "p", |
75 | 82 |
"latin": "P/p", |
76 | 83 |
"runic": "ᛈ", |
84 |
+ "remark": null, |
|
77 | 85 |
"examples": { |
78 | 86 |
"fs": "di_p_", |
79 | 87 |
"en": "dee_p_" |
... | ... |
@@ -84,6 +92,7 @@ |
84 | 92 |
"ipa": "d", |
85 | 93 |
"latin": "D/d", |
86 | 94 |
"runic": "ᛞ", |
95 |
+ "remark": null, |
|
87 | 96 |
"examples": { |
88 | 97 |
"fs": "gu_d_", |
89 | 98 |
"en": "goo_d_" |
... | ... |
@@ -94,6 +103,7 @@ |
94 | 103 |
"ipa": "t", |
95 | 104 |
"latin": "T/t", |
96 | 105 |
"runic": "ᛏ", |
106 |
+ "remark": null, |
|
97 | 107 |
"examples": { |
98 | 108 |
"fs": "_t_id", |
99 | 109 |
"en": "_t_ime" |
... | ... |
@@ -104,6 +114,7 @@ |
104 | 114 |
"ipa": "v", |
105 | 115 |
"latin": "V/v", |
106 | 116 |
"runic": "ᚹ", |
117 |
+ "remark": null, |
|
107 | 118 |
"examples": { |
108 | 119 |
"fs": "gi_v_a", |
109 | 120 |
"en": "gi_v_e" |
... | ... |
@@ -114,6 +125,7 @@ |
114 | 125 |
"ipa": "f", |
115 | 126 |
"latin": "F/f", |
116 | 127 |
"runic": "ᚠ", |
128 |
+ "remark": null, |
|
117 | 129 |
"examples": { |
118 | 130 |
"fs": "_f_ut", |
119 | 131 |
"en": "_f_oot" |
... | ... |
@@ -124,6 +136,7 @@ |
124 | 136 |
"ipa": "s", |
125 | 137 |
"latin": "S/s", |
126 | 138 |
"runic": "ᛋ", |
139 |
+ "remark": null, |
|
127 | 140 |
"examples": { |
128 | 141 |
"fs": "_s_mal", |
129 | 142 |
"en": "_s_mall" |
... | ... |
@@ -134,6 +147,7 @@ |
134 | 147 |
"ipa": "h", |
135 | 148 |
"latin": "H/h", |
136 | 149 |
"runic": "ᚺ", |
150 |
+ "remark": null, |
|
137 | 151 |
"examples": { |
138 | 152 |
"fs": "_h_us", |
139 | 153 |
"en": "_h_ouse" |
... | ... |
@@ -144,6 +158,7 @@ |
144 | 158 |
"ipa": "ɾ", |
145 | 159 |
"latin": "R/r", |
146 | 160 |
"runic": "ᚱ", |
161 |
+ "remark": null, |
|
147 | 162 |
"examples": { |
148 | 163 |
"fs": "_r_od", |
149 | 164 |
"en": null |
... | ... |
@@ -154,6 +169,7 @@ |
154 | 169 |
"ipa": "j", |
155 | 170 |
"latin": "J/j", |
156 | 171 |
"runic": "ᛃ", |
172 |
+ "remark": null, |
|
157 | 173 |
"examples": { |
158 | 174 |
"fs": "_j_ar", |
159 | 175 |
"en": "_y_ear" |
... | ... |
@@ -164,6 +180,7 @@ |
164 | 180 |
"ipa": "i", |
165 | 181 |
"latin": "I/i", |
166 | 182 |
"runic": "ᛁ", |
183 |
+ "remark": null, |
|
167 | 184 |
"examples": { |
168 | 185 |
"fs": "gr_i_d", |
169 | 186 |
"en": "gr_ee_dy" |
... | ... |
@@ -174,6 +191,7 @@ |
174 | 191 |
"ipa": "e", |
175 | 192 |
"latin": "E/e", |
176 | 193 |
"runic": "ᛖ", |
194 |
+ "remark": "only a few variations of English have that sound; it is somehow similar to the vowel in 'air'", |
|
177 | 195 |
"examples": { |
178 | 196 |
"fs": "inst_e_d", |
179 | 197 |
"en": "~ inst_ea_d" |
... | ... |
@@ -184,6 +202,7 @@ |
184 | 202 |
"ipa": "a", |
185 | 203 |
"latin": "A/a", |
186 | 204 |
"runic": "ᚨ", |
205 |
+ "remark": null, |
|
187 | 206 |
"examples": { |
188 | 207 |
"fs": "f_a_der", |
189 | 208 |
"en": "~ f_a_ther" |
... | ... |
@@ -194,6 +213,7 @@ |
194 | 213 |
"ipa": "o", |
195 | 214 |
"latin": "O/o", |
196 | 215 |
"runic": "ᛟ", |
216 |
+ "remark": null, |
|
197 | 217 |
"examples": { |
198 | 218 |
"fs": "_o_ld", |
199 | 219 |
"en": "~ _o_ld" |
... | ... |
@@ -204,6 +224,7 @@ |
204 | 224 |
"ipa": "u", |
205 | 225 |
"latin": "U/u", |
206 | 226 |
"runic": "ᚢ", |
227 |
+ "remark": null, |
|
207 | 228 |
"examples": { |
208 | 229 |
"fs": "bl_u_", |
209 | 230 |
"en": "bl_ue_" |
... | ... |
@@ -214,6 +235,7 @@ |
214 | 235 |
"ipa": "ø", |
215 | 236 |
"latin": "Oy/oy", |
216 | 237 |
"runic": "ᛟᛇ", |
238 |
+ "remark": "similar to vowels used in words like 'earl', 'worry', 'hurt'", |
|
217 | 239 |
"examples": { |
218 | 240 |
"fs": "sk_oy_n", |
219 | 241 |
"en": null |
... | ... |
@@ -224,6 +246,7 @@ |
224 | 246 |
"ipa": "y", |
225 | 247 |
"latin": "Uy/uy", |
226 | 248 |
"runic": "ᚢᛇ", |
249 |
+ "remark": "hardly any variation of English has that sound, but it can be learned easily by interpolating between /u/ and /i/", |
|
227 | 250 |
"examples": { |
228 | 251 |
"fs": "s_uy_d", |
229 | 252 |
"en": null |
... | ... |
@@ -0,0 +1,63 @@ |
1 |
+[ |
|
2 |
+ { |
|
3 |
+ "name": "Notid", |
|
4 |
+ "name_en": "Present", |
|
5 |
+ "scheme": "[mainverb:stem]", |
|
6 |
+ "description": "For expressing an action in the present", |
|
7 |
+ "remark": null, |
|
8 |
+ "example": { |
|
9 |
+ "original": "Ek skriv.", |
|
10 |
+ "translations": { |
|
11 |
+ "en": ["I write."], |
|
12 |
+ "de": ["Ich schreibe."], |
|
13 |
+ "nb": ["Jeg skriver."] |
|
14 |
+ } |
|
15 |
+ } |
|
16 |
+ }, |
|
17 |
+ { |
|
18 |
+ "name": "Fortid", |
|
19 |
+ "name_en": "Perfect", |
|
20 |
+ "scheme": "['hav':flected] + [mainverb:passive participle]", |
|
21 |
+ "description": "For expressing an action in the past", |
|
22 |
+ "remark": null, |
|
23 |
+ "example": { |
|
24 |
+ "original": "Ek hav skrivt.", |
|
25 |
+ "translations": { |
|
26 |
+ "en": ["I have written.", "I wrote."], |
|
27 |
+ "de": ["Ich habe geschrieben.", "Ich schrieb."], |
|
28 |
+ "nb": ["Jeg skrev.", "Jeg har skrevet."] |
|
29 |
+ } |
|
30 |
+ } |
|
31 |
+ }, |
|
32 |
+ { |
|
33 |
+ "name": "Eftertid", |
|
34 |
+ "name_en": "Future", |
|
35 |
+ "scheme": "['skal'/'vil'/'kom':flected] + [mainverb:infinitive]", |
|
36 |
+ "description": "For expressing an action in the future", |
|
37 |
+ "remark": "implicit", |
|
38 |
+ "example": { |
|
39 |
+ "original": "Ek skal skriva.", |
|
40 |
+ "translations": { |
|
41 |
+ "en": ["I will write.", "I am going to write."], |
|
42 |
+ "de": ["Ich werde schreiben."], |
|
43 |
+ "nb": ["Jeg skal skrive.", "Jeg vil skrive."] |
|
44 |
+ } |
|
45 |
+ } |
|
46 |
+ }, |
|
47 |
+ { |
|
48 |
+ "name": "Eftertid", |
|
49 |
+ "name_en": "Future", |
|
50 |
+ "scheme": "['verd':flected] + [mainverb:active participle]", |
|
51 |
+ "description": "For expressing an action in the future", |
|
52 |
+ "remark": "explicit", |
|
53 |
+ "example": { |
|
54 |
+ "original": "Ek verd skrivend.", |
|
55 |
+ "translations": { |
|
56 |
+ "en": ["I will write.", "I am going to write."], |
|
57 |
+ "de": ["Ich werde schreiben."], |
|
58 |
+ "nb": ["Jeg skal skrive.", "Jeg vil skrive."] |
|
59 |
+ } |
|
60 |
+ } |
|
61 |
+ } |
|
62 |
+] |
|
63 |
+ |
... | ... |
@@ -0,0 +1,300 @@ |
1 |
+[ |
|
2 |
+ { |
|
3 |
+ "affix": "-ar", |
|
4 |
+ "type_from": ["verb"], |
|
5 |
+ "type_to": ["noun"], |
|
6 |
+ "name": null, |
|
7 |
+ "description": "A person, that does what is described in the referred verb", |
|
8 |
+ "cognates": [ |
|
9 |
+ { |
|
10 |
+ "language": "en", |
|
11 |
+ "affix": "-er" |
|
12 |
+ }, |
|
13 |
+ { |
|
14 |
+ "language": "nn", |
|
15 |
+ "affix": "-ar" |
|
16 |
+ }, |
|
17 |
+ { |
|
18 |
+ "language": "sv", |
|
19 |
+ "affix": "-ar" |
|
20 |
+ }, |
|
21 |
+ { |
|
22 |
+ "language": "de", |
|
23 |
+ "affix": "-er" |
|
24 |
+ } |
|
25 |
+ ], |
|
26 |
+ "example": { |
|
27 |
+ "word": "sprekar", |
|
28 |
+ "translations": { |
|
29 |
+ "en": ["speaker"] |
|
30 |
+ } |
|
31 |
+ } |
|
32 |
+ }, |
|
33 |
+ { |
|
34 |
+ "affix": "-ung", |
|
35 |
+ "type_from": ["verb"], |
|
36 |
+ "type_to": ["noun"], |
|
37 |
+ "name": null, |
|
38 |
+ "description": "Something that arises from the referred verb", |
|
39 |
+ "cognates": [ |
|
40 |
+ { |
|
41 |
+ "language": "en", |
|
42 |
+ "affix": "-ing" |
|
43 |
+ }, |
|
44 |
+ { |
|
45 |
+ "language": "nb", |
|
46 |
+ "affix": "-ing" |
|
47 |
+ }, |
|
48 |
+ { |
|
49 |
+ "language": "de", |
|
50 |
+ "affix": "-ing" |
|
51 |
+ } |
|
52 |
+ ], |
|
53 |
+ "example": { |
|
54 |
+ "word": "givung", |
|
55 |
+ "translations": { |
|
56 |
+ "en": ["gift"] |
|
57 |
+ } |
|
58 |
+ } |
|
59 |
+ }, |
|
60 |
+ { |
|
61 |
+ "affix": "-rid", |
|
62 |
+ "type_from": ["verb"], |
|
63 |
+ "type_to": ["noun"], |
|
64 |
+ "name": "Durative", |
|
65 |
+ "description": "The act described by the referred verb", |
|
66 |
+ "cognates": [ |
|
67 |
+ { |
|
68 |
+ "language": "en", |
|
69 |
+ "affix": "-red" |
|
70 |
+ }, |
|
71 |
+ { |
|
72 |
+ "language": "is", |
|
73 |
+ "affix": "-ri" |
|
74 |
+ } |
|
75 |
+ ], |
|
76 |
+ "example": { |
|
77 |
+ "word": "hatrid", |
|
78 |
+ "translations": { |
|
79 |
+ "en": ["hatred", "hating"] |
|
80 |
+ } |
|
81 |
+ } |
|
82 |
+ }, |
|
83 |
+ { |
|
84 |
+ "affix": "-(e)t", |
|
85 |
+ "type_from": ["verb"], |
|
86 |
+ "type_to": ["attribute"], |
|
87 |
+ "name": "Passive participle", |
|
88 |
+ "description": "The attribute to have done a certain action", |
|
89 |
+ "cognates": [ |
|
90 |
+ { |
|
91 |
+ "language": "en", |
|
92 |
+ "affix": "-d" |
|
93 |
+ }, |
|
94 |
+ { |
|
95 |
+ "language": "de", |
|
96 |
+ "affix": "-t" |
|
97 |
+ } |
|
98 |
+ ], |
|
99 |
+ "example": { |
|
100 |
+ "word": "hoyrt", |
|
101 |
+ "translations": { |
|
102 |
+ "en": ["heard"] |
|
103 |
+ } |
|
104 |
+ } |
|
105 |
+ }, |
|
106 |
+ { |
|
107 |
+ "affix": "-end", |
|
108 |
+ "type_from": ["verb"], |
|
109 |
+ "type_to": ["attribute"], |
|
110 |
+ "name": "Active participle", |
|
111 |
+ "description": "The attribute to be doing a certain action", |
|
112 |
+ "cognates": [ |
|
113 |
+ { |
|
114 |
+ "language": "de", |
|
115 |
+ "affix": "-end" |
|
116 |
+ } |
|
117 |
+ ], |
|
118 |
+ "example": { |
|
119 |
+ "word": "singend", |
|
120 |
+ "translations": { |
|
121 |
+ "en": ["singing"] |
|
122 |
+ } |
|
123 |
+ } |
|
124 |
+ }, |
|
125 |
+ { |
|
126 |
+ "affix": "-ber", |
|
127 |
+ "type_from": ["verb"], |
|
128 |
+ "type_to": ["attribute"], |
|
129 |
+ "name": null, |
|
130 |
+ "description": "The possibility to do, what the referred verb describes", |
|
131 |
+ "cognates": [ |
|
132 |
+ { |
|
133 |
+ "language": "de", |
|
134 |
+ "affix": "-bar" |
|
135 |
+ }, |
|
136 |
+ { |
|
137 |
+ "language": "nb", |
|
138 |
+ "affix": "-bar" |
|
139 |
+ } |
|
140 |
+ ], |
|
141 |
+ "example": { |
|
142 |
+ "word": "denkber", |
|
143 |
+ "translations": { |
|
144 |
+ "en": ["thinkable"] |
|
145 |
+ } |
|
146 |
+ } |
|
147 |
+ }, |
|
148 |
+ { |
|
149 |
+ "affix": "-isk", |
|
150 |
+ "type_from": ["noun"], |
|
151 |
+ "type_to": ["attribute"], |
|
152 |
+ "name": null, |
|
153 |
+ "description": "Belonging to the referred object", |
|
154 |
+ "cognates": [ |
|
155 |
+ { |
|
156 |
+ "language": "en", |
|
157 |
+ "affix": "-ish" |
|
158 |
+ }, |
|
159 |
+ { |
|
160 |
+ "language": "de", |
|
161 |
+ "affix": "-isch" |
|
162 |
+ }, |
|
163 |
+ { |
|
164 |
+ "language": "nb", |
|
165 |
+ "affix": "-isk" |
|
166 |
+ } |
|
167 |
+ ], |
|
168 |
+ "example": { |
|
169 |
+ "word": "svedisk", |
|
170 |
+ "translations": { |
|
171 |
+ "en": ["swedish"] |
|
172 |
+ } |
|
173 |
+ } |
|
174 |
+ }, |
|
175 |
+ { |
|
176 |
+ "affix": "-ig", |
|
177 |
+ "type_from": ["noun"], |
|
178 |
+ "type_to": ["attribute"], |
|
179 |
+ "name": null, |
|
180 |
+ "description": "With the referred object", |
|
181 |
+ "cognates": [ |
|
182 |
+ { |
|
183 |
+ "language": "en", |
|
184 |
+ "affix": "-y" |
|
185 |
+ }, |
|
186 |
+ { |
|
187 |
+ "language": "de", |
|
188 |
+ "affix": "-ig" |
|
189 |
+ } |
|
190 |
+ ], |
|
191 |
+ "example": { |
|
192 |
+ "word": "bludig", |
|
193 |
+ "translations": { |
|
194 |
+ "en": ["bloody"] |
|
195 |
+ } |
|
196 |
+ } |
|
197 |
+ }, |
|
198 |
+ { |
|
199 |
+ "affix": "-lik", |
|
200 |
+ "type_from": ["noun"], |
|
201 |
+ "type_to": ["attribute"], |
|
202 |
+ "name": null, |
|
203 |
+ "description": "Having the abilities of the referred object", |
|
204 |
+ "cognates": [ |
|
205 |
+ { |
|
206 |
+ "language": "en", |
|
207 |
+ "affix": "-ly" |
|
208 |
+ }, |
|
209 |
+ { |
|
210 |
+ "language": "de", |
|
211 |
+ "affix": "-lich" |
|
212 |
+ }, |
|
213 |
+ { |
|
214 |
+ "language": "nb", |
|
215 |
+ "affix": "-lig" |
|
216 |
+ } |
|
217 |
+ ], |
|
218 |
+ "example": { |
|
219 |
+ "word": "bruderlik", |
|
220 |
+ "translations": { |
|
221 |
+ "en": ["brotherly"] |
|
222 |
+ } |
|
223 |
+ } |
|
224 |
+ }, |
|
225 |
+ { |
|
226 |
+ "affix": "-en", |
|
227 |
+ "type_from": ["attribute"], |
|
228 |
+ "type_to": ["verb"], |
|
229 |
+ "name": null, |
|
230 |
+ "description": "To make something have the referred ability", |
|
231 |
+ "cognates": [ |
|
232 |
+ { |
|
233 |
+ "language": "en", |
|
234 |
+ "affix": "-en" |
|
235 |
+ }, |
|
236 |
+ { |
|
237 |
+ "language": "de", |
|
238 |
+ "affix": "-en" |
|
239 |
+ } |
|
240 |
+ ], |
|
241 |
+ "example": { |
|
242 |
+ "word": "harden", |
|
243 |
+ "translations": { |
|
244 |
+ "en": ["harden", "make hard"] |
|
245 |
+ } |
|
246 |
+ } |
|
247 |
+ }, |
|
248 |
+ { |
|
249 |
+ "affix": "-hed", |
|
250 |
+ "type_from": ["attribute"], |
|
251 |
+ "type_to": ["noun"], |
|
252 |
+ "name": null, |
|
253 |
+ "description": "The abstract attribute described by the referred property", |
|
254 |
+ "cognates": [ |
|
255 |
+ { |
|
256 |
+ "language": "de", |
|
257 |
+ "affix": "-heit" |
|
258 |
+ }, |
|
259 |
+ { |
|
260 |
+ "language": "nb", |
|
261 |
+ "affix": "-het" |
|
262 |
+ } |
|
263 |
+ ], |
|
264 |
+ "example": { |
|
265 |
+ "word": "frihed", |
|
266 |
+ "translations": { |
|
267 |
+ "en": ["freedom"] |
|
268 |
+ } |
|
269 |
+ } |
|
270 |
+ }, |
|
271 |
+ { |
|
272 |
+ "affix": "un-", |
|
273 |
+ "type_from": ["attribute"], |
|
274 |
+ "type_to": ["attribute"], |
|
275 |
+ "name": null, |
|
276 |
+ "description": "Negation of the referred attribute", |
|
277 |
+ "cognates": [ |
|
278 |
+ { |
|
279 |
+ "language": "en", |
|
280 |
+ "affix": "un-" |
|
281 |
+ }, |
|
282 |
+ { |
|
283 |
+ "language": "de", |
|
284 |
+ "affix": "un-" |
|
285 |
+ }, |
|
286 |
+ { |
|
287 |
+ "language": "nb", |
|
288 |
+ "affix": "u-" |
|
289 |
+ } |
|
290 |
+ ], |
|
291 |
+ "example": { |
|
292 |
+ "word": "unfri", |
|
293 |
+ "translations": { |
|
294 |
+ "en": ["unfree"] |
|
295 |
+ } |
|
296 |
+ } |
|
297 |
+ } |
|
298 |
+] |
|
299 |
+ |
|
300 |
+ |
... | ... |
@@ -35,8 +35,84 @@ function add_tooltips() |
35 | 35 |
} |
36 | 36 |
} |
37 | 37 |
|
38 |
+function convert_to_list(structure) |
|
39 |
+{ |
|
40 |
+ let list = []; |
|
41 |
+ for (let index = 0; index < structure.length; index += 1) list.push(structure[index]); |
|
42 |
+ return list; |
|
43 |
+} |
|
44 |
+ |
|
45 |
+class class_contentnode |
|
46 |
+{ |
|
47 |
+ constructor(id, title, children) |
|
48 |
+ { |
|
49 |
+ this.id = id; |
|
50 |
+ this.title = title; |
|
51 |
+ this.children = children; |
|
52 |
+ } |
|
53 |
+ |
|
54 |
+ generate(path = []) |
|
55 |
+ { |
|
56 |
+ let that = this; |
|
57 |
+ let dom_fragment = document.createDocumentFragment(); |
|
58 |
+ { |
|
59 |
+ if (this.title != null) |
|
60 |
+ { |
|
61 |
+ let dom_link = document.createElement("a"); |
|
62 |
+ dom_link.setAttribute("href", "#" + that.id); |
|
63 |
+ dom_link.textContent = path.map(x => (x+1).toString()).join(".") + " " + this.title; |
|
64 |
+ dom_fragment.appendChild(dom_link); |
|
65 |
+ } |
|
66 |
+ } |
|
67 |
+ { |
|
68 |
+ let dom_list = document.createElement("ul"); |
|
69 |
+ this.children.forEach |
|
70 |
+ ( |
|
71 |
+ function (child, index) |
|
72 |
+ { |
|
73 |
+ if (child != null) |
|
74 |
+ { |
|
75 |
+ let dom_element = document.createElement("li"); |
|
76 |
+ dom_element.appendChild(child.generate(path.concat(index))); |
|
77 |
+ dom_list.appendChild(dom_element); |
|
78 |
+ } |
|
79 |
+ } |
|
80 |
+ ); |
|
81 |
+ dom_fragment.appendChild(dom_list); |
|
82 |
+ } |
|
83 |
+ return dom_fragment; |
|
84 |
+ } |
|
85 |
+ |
|
86 |
+ static read(dom_context = document, classes = ["chapter","section","subsection"], id = null, title = null) |
|
87 |
+ { |
|
88 |
+ return ( |
|
89 |
+ new class_contentnode |
|
90 |
+ ( |
|
91 |
+ id, |
|
92 |
+ title, |
|
93 |
+ (classes.length == 0) ? [] : convert_to_list(dom_context.querySelectorAll("section" + ("." + classes[0]) + ":not(.pseudo)")).map |
|
94 |
+ ( |
|
95 |
+ function (dom_context_) |
|
96 |
+ { |
|
97 |
+ return ( |
|
98 |
+ class_contentnode.read |
|
99 |
+ ( |
|
100 |
+ dom_context_, |
|
101 |
+ classes.slice(1), |
|
102 |
+ dom_context_.getAttribute("id"), |
|
103 |
+ dom_context_.querySelector("header").textContent |
|
104 |
+ ) |
|
105 |
+ ); |
|
106 |
+ } |
|
107 |
+ ) |
|
108 |
+ ) |
|
109 |
+ ); |
|
110 |
+ } |
|
111 |
+} |
|
112 |
+ |
|
38 | 113 |
function main() |
39 | 114 |
{ |
115 |
+ document.querySelector("#toc").appendChild(class_contentnode.read().generate()); |
|
40 | 116 |
// add_tooltips(); |
41 | 117 |
} |
42 | 118 |
|
... | ... |
@@ -0,0 +1,79 @@ |
1 |
+"use strict"; |
|
2 |
+ |
|
3 |
+class class_format |
|
4 |
+{ |
|
5 |
+ constructor(title, extract, format = function (x) {return x;}) |
|
6 |
+ { |
|
7 |
+ this.title = title; |
|
8 |
+ this.extract = extract; |
|
9 |
+ this.format = tormat; |
|
10 |
+ } |
|
11 |
+} |
|
12 |
+ |
|
13 |
+class class_table |
|
14 |
+{ |
|
15 |
+ constructor(columns, rows = []) |
|
16 |
+ { |
|
17 |
+ this.columns = columns; |
|
18 |
+ this.rows = rows; |
|
19 |
+ } |
|
20 |
+ |
|
21 |
+ add(row) |
|
22 |
+ { |
|
23 |
+ this.rows.push(row); |
|
24 |
+ } |
|
25 |
+ |
|
26 |
+ fill(rows) |
|
27 |
+ { |
|
28 |
+ rows.forEach(row => this.add(row)); |
|
29 |
+ } |
|
30 |
+ |
|
31 |
+ generate() |
|
32 |
+ { |
|
33 |
+ let dom_table = document.createElement("table"); |
|
34 |
+ { |
|
35 |
+ let dom_thead = document.createElement("thead"); |
|
36 |
+ [null].forEach |
|
37 |
+ ( |
|
38 |
+ function (dummy) |
|
39 |
+ { |
|
40 |
+ let dom_row = document.createElement("tr"); |
|
41 |
+ this.columns.forEach |
|
42 |
+ ( |
|
43 |
+ function (column) |
|
44 |
+ { |
|
45 |
+ let dom_cell = document.createElement("th"); |
|
46 |
+ dom_cell.textContent = column.title; |
|
47 |
+ dom_row.appendChild(dom_cell); |
|
48 |
+ } |
|
49 |
+ ); |
|
50 |
+ dom_thead.appendChild(dom_row); |
|
51 |
+ } |
|
52 |
+ ); |
|
53 |
+ dom_table.appendChild(dom_thead); |
|
54 |
+ } |
|
55 |
+ { |
|
56 |
+ let dom_thead = document.createElement("tbody"); |
|
57 |
+ this.rows.forEach |
|
58 |
+ ( |
|
59 |
+ function (row) |
|
60 |
+ { |
|
61 |
+ let dom_row = document.createElement("tr"); |
|
62 |
+ this.columns.forEach |
|
63 |
+ ( |
|
64 |
+ function (column) |
|
65 |
+ { |
|
66 |
+ let dom_cell = document.createElement("td"); |
|
67 |
+ dom_cell.textContent = column.format(column.extract(row)); |
|
68 |
+ dom_row.appendChild(dom_cell); |
|
69 |
+ } |
|
70 |
+ ); |
|
71 |
+ dom_thead.appendChild(dom_row); |
|
72 |
+ } |
|
73 |
+ ); |
|
74 |
+ dom_table.appendChild(dom_tbody); |
|
75 |
+ } |
|
76 |
+ return dom_table; |
|
77 |
+ } |
|
78 |
+} |
|
79 |
+ |
... | ... |
@@ -0,0 +1,22 @@ |
1 |
+<?php |
|
2 |
+ function mark($core, $classes) |
|
3 |
+ { |
|
4 |
+ return ('<span class="' . implode(" ", $classes) . '">' . $core . '</span>'); |
|
5 |
+ } |
|
6 |
+ |
|
7 |
+ function format($string, $classes = ["word", "lang_fs"]) |
|
8 |
+ { |
|
9 |
+ if ($string == NULL) |
|
10 |
+ { |
|
11 |
+ $string = "--"; |
|
12 |
+ } |
|
13 |
+ else |
|
14 |
+ { |
|
15 |
+ $string = preg_replace("/\/([^\/]*)\//", mark("$1", ["ipa"]), $string); |
|
16 |
+ $string = preg_replace("/_([^_]*)_/", "<u>$1</u>", $string); |
|
17 |
+ $string = preg_replace("/\'([^\']*)\'/", mark("$1", $classes), $string); |
|
18 |
+ } |
|
19 |
+ return $string; |
|
20 |
+ } |
|
21 |
+ ?> |
|
22 |
+ |
... | ... |
@@ -0,0 +1,118 @@ |
1 |
+<?php |
|
2 |
+class class_column |
|
3 |
+{ |
|
4 |
+ public $title; |
|
5 |
+ |
|
6 |
+ public $extract_; |
|
7 |
+ |
|
8 |
+ public $format_; |
|
9 |
+ |
|
10 |
+ public function __construct($title, $extract_, $format_ = null) |
|
11 |
+ { |
|
12 |
+ if ($format_ == null) $format_ = function ($x) {return $x;}; |
|
13 |
+ $this->title = $title; |
|
14 |
+ $this->extract_ = $extract_; |
|
15 |
+ $this->format_ = $format_; |
|
16 |
+ } |
|
17 |
+ |
|
18 |
+ public function extract($row) |
|
19 |
+ { |
|
20 |
+ return call_user_func($this->extract_, $row); |
|
21 |
+ // return $this->extract_($row); |
|
22 |
+ } |
|
23 |
+ |
|
24 |
+ public function format($value) |
|
25 |
+ { |
|
26 |
+ return call_user_func($this->format_, $value); |
|
27 |
+ // return $this->format_($value); |
|
28 |
+ } |
|
29 |
+} |
|
30 |
+ |
|
31 |
+class class_table |
|
32 |
+{ |
|
33 |
+ private $columns; |
|
34 |
+ |
|
35 |
+ private $rows; |
|
36 |
+ |
|
37 |
+ public function __construct($columns, $rows = []) |
|
38 |
+ { |
|
39 |
+ $this->columns = $columns; |
|
40 |
+ $this->rows = []; |
|
41 |
+ $this->fill($rows); |
|
42 |
+ } |
|
43 |
+ |
|
44 |
+ private function add($row) |
|
45 |
+ { |
|
46 |
+ array_push($this->rows, $row); |
|
47 |
+ } |
|
48 |
+ |
|
49 |
+ private function fill($rows) |
|
50 |
+ { |
|
51 |
+ array_map |
|
52 |
+ ( |
|
53 |
+ function ($row) {$this->add($row);}, |
|
54 |
+ $rows |
|
55 |
+ ); |
|
56 |
+ } |
|
57 |
+ |
|
58 |
+ public function generate() |
|
59 |
+ { |
|
60 |
+ ?> |
|
61 |
+<table> |
|
62 |
+ <thead> |
|
63 |
+ <tr> |
|
64 |
+<?php |
|
65 |
+ array_map |
|
66 |
+ ( |
|
67 |
+ function ($column) |
|
68 |
+ { |
|
69 |
+ ?> |
|
70 |
+ <th> |
|
71 |
+<?php |
|
72 |
+ echo($column->title); |
|
73 |
+ ?> |
|
74 |
+ </th> |
|
75 |
+<?php |
|
76 |
+ }, |
|
77 |
+ $this->columns |
|
78 |
+ ); |
|
79 |
+ ?> |
|
80 |
+ </tr> |
|
81 |
+ </thead> |
|
82 |
+ <tbody> |
|
83 |
+<?php |
|
84 |
+ array_map |
|
85 |
+ ( |
|
86 |
+ function ($row) |
|
87 |
+ { |
|
88 |
+ ?> |
|
89 |
+ <tr> |
|
90 |
+<?php |
|
91 |
+ array_map |
|
92 |
+ ( |
|
93 |
+ function ($column) use (&$row) |
|
94 |
+ { |
|
95 |
+ ?> |
|
96 |
+ <td> |
|
97 |
+<?php |
|
98 |
+ echo($column->format($column->extract($row))); |
|
99 |
+ ?> |
|
100 |
+ </td> |
|
101 |
+<?php |
|
102 |
+ }, |
|
103 |
+ $this->columns |
|
104 |
+ ); |
|
105 |
+ ?> |
|
106 |
+ </tr> |
|
107 |
+<?php |
|
108 |
+ }, |
|
109 |
+ $this->rows |
|
110 |
+ ); |
|
111 |
+ ?> |
|
112 |
+ </tbody> |
|
113 |
+</table> |
|
114 |
+<?php |
|
115 |
+ } |
|
116 |
+} |
|
117 |
+ ?> |
|
118 |
+ |
... | ... |
@@ -1,17 +1,22 @@ |
1 | 1 |
<?php |
2 | 2 |
global $configuration; |
3 |
+ include_once("source/logic/server/table.php"); |
|
4 |
+ include_once("source/logic/server/data.php"); |
|
5 |
+ include_once("source/logic/server/misc.php"); |
|
3 | 6 |
?> |
4 | 7 |
<section class="section" id="grammar/conjugation"> |
5 |
- <header>Conjugation</header> |
|
8 |
+ <header>Verbs</header> |
|
9 |
+ <p>In Folksprak verbs are not conjugated for different <span class="grammarterm">personae</span> (participants), <span class="grammarterm">numeri</span> (number of actors) or <span class="grammarterm">genera</span> (grammatical genders).</p> |
|
6 | 10 |
<section class="subsection" id="conjugation/infinite_verbforms"> |
7 | 11 |
<header>Infinite Verbforms</header> |
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> |
|
12 |
+ <p>The <span class="grammarterm">infinitive</span> is formed by appending <span class="word lang_fs">-a</span> to the verb stem, e.g. <span class="word lang_fs">skriva</span> ~ <span class="word lang_en">to write</span>.</p> |
|
13 |
+ <p>The <span class="grammarterm">active participle</span> is formed by appending <span class="word lang_fs">-end</span> to the verb stem, e.g. <span class="word lang_fs">skrivend</span> ~ <span class="word lang_en">writing</span>.</p> |
|
14 |
+ <p>The <span class="grammarterm">passive participle</span> is formed by appending <span class="word lang_fs">-et</span> to the verb stem, e.g. <span class="word lang_fs">skrivet</span> ~ <span class="word lang_en">written</span>. If speakable the <span class="word lang_fs">e</span> in the ending can be omitted, e.g. <span class="word lang_fs">skrivt</span>.</p> |
|
11 | 15 |
</section> |
12 | 16 |
<section class="subsection" id="conjugation/tempora"> |
13 | 17 |
<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> |
|
18 |
+ <p>The following table lists the timeforms found in Folksprak and how they are built in the indicative mode.</p> |
|
19 |
+ <!-- |
|
15 | 20 |
<table> |
16 | 21 |
<thead> |
17 | 22 |
<tr> |
... | ... |
@@ -25,38 +30,108 @@ |
25 | 30 |
<tr> |
26 | 31 |
<td>Present</td> |
27 | 32 |
<td>[verb:stem]</td> |
28 |
- <td><span class="sentence_fs">ek skriv</span></td> |
|
29 |
- <td><span class="sentence_otherlanguage">i write</span></td> |
|
33 |
+ <td><span class="sentence lang_fs">ek skriv</span></td> |
|
34 |
+ <td><span class="sentence lang_en">i write</span></td> |
|
30 | 35 |
</tr> |
31 | 36 |
<tr> |
32 | 37 |
<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> |
|
38 |
+ <td>[flected <span class="word lang_fs">hav</span>] + [verb:passive participle]</td> |
|
39 |
+ <td><span class="sentence lang_fs">ek hav skrivt</span></td> |
|
40 |
+ <td><span class="sentence lang_en">i have written</span></td> |
|
36 | 41 |
</tr> |
37 | 42 |
<tr> |
38 | 43 |
<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> |
|
44 |
+ <td>[flected <span class="word lang_fs">skal</span>/<span class="word lang_fs">vil</span>/<span class="word lang_fs">kom</span>] + [verb:infinitive]</td> |
|
45 |
+ <td><span class="sentence lang_fs">ek skal skriva</span></td> |
|
46 |
+ <td><span class="sentence lang_en">i will write</span></td> |
|
42 | 47 |
</tr> |
43 |
- <!-- |
|
44 | 48 |
<tr> |
45 | 49 |
<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> |
|
50 |
+ <td>[flected <span class="word lang_fs">verd</span>] + [verb:active participle]</td> |
|
51 |
+ <td><span class="sentence lang_fs">ek verd skrivend</span></td> |
|
52 |
+ <td><span class="sentence lang_en">i will write.</span> (literally: <span class="sentence lang_en">i become writing.</span>)</td> |
|
49 | 53 |
</tr> |
50 |
- --> |
|
51 | 54 |
</tbody> |
52 | 55 |
</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> |
|
56 |
+ --> |
|
57 |
+<?php |
|
58 |
+ $table = new class_table |
|
59 |
+ ( |
|
60 |
+ [ |
|
61 |
+ new class_column |
|
62 |
+ ( |
|
63 |
+ "Name", |
|
64 |
+ function ($row) |
|
65 |
+ { |
|
66 |
+ return ["name" => $row["name"], "remark" => $row["remark"]]; |
|
67 |
+ }, |
|
68 |
+ function ($value) |
|
69 |
+ { |
|
70 |
+ $output = $value["name"]; |
|
71 |
+ if ($value["remark"] != null) |
|
72 |
+ { |
|
73 |
+ $output .= (" " . "(" . $value["remark"] . ")"); |
|
74 |
+ } |
|
75 |
+ return $output; |
|
76 |
+ } |
|
77 |
+ ), |
|
78 |
+ new class_column |
|
79 |
+ ( |
|
80 |
+ "Description", |
|
81 |
+ function ($row) |
|
82 |
+ { |
|
83 |
+ return $row["description"]; |
|
84 |
+ } |
|
85 |
+ ), |
|
86 |
+ new class_column |
|
87 |
+ ( |
|
88 |
+ "Scheme", |
|
89 |
+ function ($row) |
|
90 |
+ { |
|
91 |
+ return $row["scheme"]; |
|
92 |
+ }, |
|
93 |
+ function ($value) |
|
94 |
+ { |
|
95 |
+ return format($value, ["word", "lang_fs"]); |
|
96 |
+ } |
|
97 |
+ ), |
|
98 |
+ new class_column |
|
99 |
+ ( |
|
100 |
+ "Example", |
|
101 |
+ function ($row) |
|
102 |
+ { |
|
103 |
+ global $configuration; |
|
104 |
+ return ["original" => $row["example"]["original"], "translated" => $row["example"]["translations"][$configuration["target"]]]; |
|
105 |
+ }, |
|
106 |
+ function ($value) |
|
107 |
+ { |
|
108 |
+ $output = ""; |
|
109 |
+ $output .= mark($value["original"], ["sentence", "lang_fs"]); |
|
110 |
+ $output .= " ~ "; |
|
111 |
+ $output .= implode |
|
112 |
+ ( |
|
113 |
+ ", ", |
|
114 |
+ array_map |
|
115 |
+ ( |
|
116 |
+ function ($word) |
|
117 |
+ { |
|
118 |
+ global $configuration; |
|
119 |
+ return mark($word, ["sentence", "lang_" . $configuration["target"]]); |
|
120 |
+ }, |
|
121 |
+ $value["translated"] |
|
122 |
+ ) |
|
123 |
+ ); |
|
124 |
+ return $output; |
|
125 |
+ } |
|
126 |
+ ), |
|
127 |
+ ], |
|
128 |
+ read_json("source/data/timeforms.json") |
|
129 |
+ ); |
|
130 |
+ $table->generate(); |
|
131 |
+ ?> |
|
132 |
+ <p>Since these forms are built with auxiliary verbs, they can be combined straight forward to form complex expressions. For example <span class="sentence lang_fs">ek skal hava skrivt.</span> means <span class="sentence lang_en">i will have written.</span> and <span class="sentence lang_fs">ek hav skalt skriva.</span> means sth. like <span class="sentence lang_en">i was going to write.</span>.</p> |
|
133 |
+ <p>The <span class="grammarterm">imperative</span> only exists in the present (with future meaning) 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 lang_fs">du</span> or <span class="word lang_fs">je</span>) in order to specify or emphasize the numerus. Examples: <span class="sentence lang_fs">skriv!</span>, <span class="sentence lang_fs">skriv, je!</span>.</p> |
|
54 | 134 |
<span class="todo">conjunctive</span> |
55 | 135 |
</section> |
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> |
|
60 |
- </section> |
|
61 | 136 |
</section> |
62 | 137 |
|
... | ... |
@@ -1,5 +1,112 @@ |
1 |
+<?php |
|
2 |
+ include_once("source/logic/server/data.php"); |
|
3 |
+ include_once("source/logic/server/table.php"); |
|
4 |
+ ?> |
|
1 | 5 |
<section class="subsection" id="grammar/pronouns/correlatives"> |
2 | 6 |
<header>Correlatives</header> |
3 |
- <span class="todo">all</span> |
|
7 |
+<?php |
|
8 |
+ $table = new class_table |
|
9 |
+ ( |
|
10 |
+ [ |
|
11 |
+ new class_column |
|
12 |
+ ( |
|
13 |
+ "Domain", |
|
14 |
+ function ($row) |
|
15 |
+ { |
|
16 |
+ return $row["domain"]; |
|
17 |
+ } |
|
18 |
+ ), |
|
19 |
+ new class_column |
|
20 |
+ ( |
|
21 |
+ "Interrogative/Relative", |
|
22 |
+ function ($row) |
|
23 |
+ { |
|
24 |
+ return $row["interrogative"]; |
|
25 |
+ }, |
|
26 |
+ function ($value) |
|
27 |
+ { |
|
28 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
29 |
+ } |
|
30 |
+ ), |
|
31 |
+ /* |
|
32 |
+ new class_column |
|
33 |
+ ( |
|
34 |
+ "Relative", |
|
35 |
+ function ($row) |
|
36 |
+ { |
|
37 |
+ return $row["relative"]; |
|
38 |
+ }, |
|
39 |
+ function ($value) |
|
40 |
+ { |
|
41 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
42 |
+ } |
|
43 |
+ ), |
|
44 |
+ */ |
|
45 |
+ new class_column |
|
46 |
+ ( |
|
47 |
+ "Demonstrative far", |
|
48 |
+ function ($row) |
|
49 |
+ { |
|
50 |
+ return $row["demonstrative_far"]; |
|
51 |
+ }, |
|
52 |
+ function ($value) |
|
53 |
+ { |
|
54 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
55 |
+ } |
|
56 |
+ ), |
|
57 |
+ new class_column |
|
58 |
+ ( |
|
59 |
+ "Demonstrative near", |
|
60 |
+ function ($row) |
|
61 |
+ { |
|
62 |
+ return $row["demonstrative_near"]; |
|
63 |
+ }, |
|
64 |
+ function ($value) |
|
65 |
+ { |
|
66 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
67 |
+ } |
|
68 |
+ ), |
|
69 |
+ new class_column |
|
70 |
+ ( |
|
71 |
+ "Universal", |
|
72 |
+ function ($row) |
|
73 |
+ { |
|
74 |
+ return $row["universal"]; |
|
75 |
+ }, |
|
76 |
+ function ($value) |
|
77 |
+ { |
|
78 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
79 |
+ } |
|
80 |
+ ), |
|
81 |
+ new class_column |
|
82 |
+ ( |
|
83 |
+ "Undefined", |
|
84 |
+ function ($row) |
|
85 |
+ { |
|
86 |
+ return $row["undefined"]; |
|
87 |
+ }, |
|
88 |
+ function ($value) |
|
89 |
+ { |
|
90 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
91 |
+ } |
|
92 |
+ ), |
|
93 |
+ new class_column |
|
94 |
+ ( |
|
95 |
+ "Negative", |
|
96 |
+ function ($row) |
|
97 |
+ { |
|
98 |
+ return $row["negative"]; |
|
99 |
+ }, |
|
100 |
+ function ($value) |
|
101 |
+ { |
|
102 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
103 |
+ } |
|
104 |
+ ), |
|
105 |
+ ], |
|
106 |
+ read_json("source/data/correlatives.json") |
|
107 |
+ ); |
|
108 |
+ $table->generate(); |
|
109 |
+ ?> |
|
110 |
+<div class="note_information">Some of these words are very unlikely to ever get used (e.g. <span class="word lang_fs">ing slag</span>). Nevertheless they exist and are listed for completeness.</div> |
|
4 | 111 |
</section> |
5 | 112 |
|
... | ... |
@@ -2,8 +2,9 @@ |
2 | 2 |
<?php include_once("source/logic/server/settings.php"); ?> |
3 | 3 |
<html> |
4 | 4 |
<head> |
5 |
- <meta charset="utf-8"/> |
|
5 |
+ <title>Folksprak -- Draft</title> |
|
6 | 6 |
<?php include("source/structure/meta.html.php"); ?> |
7 |
+ <link rel="shortcut icon" type="image/png" href="favicon.png"/> |
|
7 | 8 |
<link rel="stylesheet" type="text/css" href="draft.css"/> |
8 | 9 |
<script type="text/javascript" src="draft.js"></script> |
9 | 10 |
</head> |
... | ... |
@@ -19,9 +20,6 @@ |
19 | 20 |
titlepage |
20 | 21 |
--> |
21 | 22 |
<?php include("source/structure/introduction.html.php"); ?> |
22 |
- <!-- |
|
23 |
- toc |
|
24 |
- --> |
|
25 | 23 |
<?php include("source/structure/grammar.html.php"); ?> |
26 | 24 |
<?php include("source/structure/vocabulary.html.php"); ?> |
27 | 25 |
</div> |
... | ... |
@@ -1,5 +1,7 @@ |
1 |
-<section class="chapter pseudo" id="introduction"> |
|
1 |
+<section class="chapter pseudo hidden" id="introduction"> |
|
2 | 2 |
<header>Introduction</header> |
3 | 3 |
<?php include("source/structure/preface.html.php"); ?> |
4 |
+ <?php include("source/structure/key_parameters.html.php"); ?> |
|
5 |
+ <?php include("source/structure/toc.html.php"); ?> |
|
4 | 6 |
</section> |
5 | 7 |
|
... | ... |
@@ -0,0 +1,13 @@ |
1 |
+<section class="section pseudo" id="introduction/key_parameters"> |
|
2 |
+ <header>Basic Points</header> |
|
3 |
+ <p>Folksprak shall be constructed as a language that is:</p> |
|
4 |
+ <ol> |
|
5 |
+ <li>Intelligible with little or no training to Germanic speakers</li> |
|
6 |
+ <li>Simple enough for ease of learning to write or speak about normal topics</li> |
|
7 |
+ <li>Precise enough to deal with more complex topics (e.g. science, maybe philosophy)</li> |
|
8 |
+ </ol> |
|
9 |
+ <p>where the importance descends from first to last.</p> |
|
10 |
+ <p>During the attempt to find solutions for different grammar features such that they fulfil these goals, often the solution seemed to be what is called <span class="buzzword">KISS</span> in software technology (however orignally coined by the U.S. Navy), short for <span class="slogan">"keep it simple, stupid!"</span>, i.e. to desist from complexity unless it is truly necessary. Therefore many of the grammar features specified in this draft appear to be shaped more plainly than in most of the natural Germanic languages. For example the grammatical genders are planned to emerge only rudimentary in Folksprak, since they don't implement a crucial purpose in any natural Germanic language. The comparison between existing languages (not only Germanic ones) can reveal easy ways to solve certain issues, which seem to be problematic at first sight, but occasionally turn out to be a non-issue at second sight. However the opposite case does not occur seldomly. That's why for certain questions pleasing answers are yet to be found.</p> |
|
11 |
+ <p>The language specified in the draft at hand can be classified as language with a half isolating and half agglutinating morphology. It has a <span class="buzzword">a-posteriori</span> vocabulary (with some minor exceptions), i.e. its words are taken/derived from existing languages, vid. mainly the natural Germanic ones.</p> |
|
12 |
+</section> |
|
13 |
+ |
... | ... |
@@ -1,3 +1,6 @@ |
1 |
-<title>Folksprak -- Draft</title> |
|
2 |
- |
|
1 |
+<meta charset="utf-8"/> |
|
2 |
+<meta name="author" content="Fenris Wolf"/> |
|
3 |
+<meta name="description" content="draft for the constructed germanic zonal auxlang 'Folksprak'"/> |
|
4 |
+<meta name="language" content="english"/> |
|
5 |
+<meta name="keywords" content="language,germanic,constructed"/> |
|
3 | 6 |
|
... | ... |
@@ -1,134 +1,66 @@ |
1 | 1 |
<?php |
2 | 2 |
global $configuration; |
3 | 3 |
include_once("source/logic/server/data.php"); |
4 |
+include_once("source/logic/server/table.php"); |
|
4 | 5 |
|
5 |
-function convert_numerus($numerus) |
|
6 |
-{ |
|
7 |
- switch ($numerus) |
|
8 |
- { |
|
9 |
- case 0: |
|
10 |
- { |
|
11 |
- return NULL; |
|
12 |
- break; |
|
13 |
- } |
|
14 |
- case 1: |
|
15 |
- { |
|
16 |
- return "singular"; |
|
17 |
- break; |
|
18 |
- } |
|
19 |
- case 2: |
|
20 |
- { |
|
21 |
- return "plural"; |
|
22 |
- break; |
|
23 |
- } |
|
24 |
- default: |
|
25 |
- { |
|
26 |
- throw ("invalid"); |
|
27 |
- break; |
|
28 |
- } |
|
29 |
- } |
|
30 |
-} |
|
31 |
- |
|
32 |
-function convert_persona($persona) |
|
33 |
-{ |
|
34 |
- switch ($persona) |
|
35 |
- { |
|
36 |
- case 0: |
|
37 |
- { |
|
38 |
- return "impersonal"; |
|
39 |
- break; |
|
40 |
- } |
|
41 |
- case 1: |
|
42 |
- { |
|
43 |
- return "1st person"; |
|
44 |
- break; |
|
45 |
- } |
|
46 |
- case 2: |
|
47 |
- { |
|
48 |
- return "2nd person"; |
|
49 |
- break; |
|
50 |
- } |
|
51 |
- case 3: |
|
52 |
- { |
|
53 |
- return "3rd person"; |
|
54 |
- break; |
|
55 |
- } |
|
56 |
- default: |
|
57 |
- { |
|
58 |
- throw ("invalid"); |
|
59 |
- break; |
|
60 |
- } |
|
61 |
- } |
|
62 |
-} |
|
63 |
- |
|
64 |
-function convert_genus($genus) |
|
65 |
-{ |
|
66 |
- switch ($genus) |
|
67 |
- { |
|
68 |
- case 0: |
|
69 |
- { |
|
70 |
- return "common"; |
|
71 |
- break; |
|
72 |
- } |
|
73 |
- case 1: |
|
74 |
- { |
|
75 |
- return "masculine"; |
|
76 |
- break; |
|
77 |
- } |
|
78 |
- case 2: |
|
79 |
- { |
|
80 |
- return "feminine"; |
|
81 |
- break; |
|
82 |
- } |
|
83 |
- case 3: |
|
84 |
- { |
|
85 |
- return "neuter"; |
|
86 |
- break; |
|
87 |
- } |
|
88 |
- default: |
|
89 |
- { |
|
90 |
- throw ("invalid"); |
|
91 |
- break; |
|
92 |
- } |
|
93 |
- } |
|
94 |
-} |
|
6 |
+function convert_persona($persona) {return [0 => "impersonal", 1 => "1st person", 2 => "2nd person", 3 => "3rd person"][$persona];} |
|
7 |
+function convert_numerus($numerus) {return [0 => null, 1 => "singular", 2 => "plural"][$numerus];} |
|
8 |
+function convert_genus($genus) {return [0 => "common", 1 => "masculine", 2 => "feminine", 3 => "neuter"][$genus];} |
|
95 | 9 |
?> |
96 | 10 |
<section class="subsection" id="grammar/pronouns/personal_pronouns"> |
97 | 11 |
<header>Personal Pronouns</header> |
98 |
- <table> |
|
99 |
- <thead> |
|
100 |
- <tr> |
|
101 |
- <th>Case</th> |
|
102 |
- <th><?php echo($configuration["languagemap"]["fs"]); ?></th> |
|
103 |
- <th><?php echo($configuration["languagemap"][$configuration["target"]]); ?></th> |
|
104 |
- </tr> |
|
105 |
- </thead> |
|
106 |
- <tbody> |
|
107 | 12 |
<?php |
108 |
- $data_personal_pronouns = read_json("source/data/personal_pronouns.json"); |
|
109 |
- foreach ($data_personal_pronouns as $entry) |
|
110 |
- { |
|
111 |
- $entry_desc = implode( |
|
112 |
- " / ", |
|
13 |
+ $table = new class_table |
|
14 |
+ ( |
|
113 | 15 |
[ |
114 |
- convert_persona($entry["persona"]), |
|
115 |
- convert_numerus($entry["numerus"]), |
|
116 |
- convert_genus($entry["genus"]), |
|
117 |
- ] |
|
118 |
- ); |
|
119 |
- $entry_fs = implode(", ", array_map(function ($word) {return ('<span class="word_fs">' . $word . '</span>');}, $entry["fs"])); |
|
120 |
- $entry_en = implode(", ", array_map(function ($word) {return ('<span class="word_otherlanguage">' . $word . '</span>');}, $entry["en"])); |
|
121 |
- ?> |
|
122 |
- <tr> |
|
123 |
- <td><?php echo($entry_desc); ?></td> |
|
124 |
- <td><?php echo($entry_fs); ?></td> |
|
125 |
- <td><?php echo($entry_en); ?></td> |
|
126 |
- </tr> |
|
127 |
-<?php |
|
16 |
+ new class_column |
|
17 |
+ ( |
|
18 |
+ "Case", |
|
19 |
+ function ($row) |
|
20 |
+ { |
|
21 |
+ return [ |
|
22 |
+ convert_persona($row["persona"]), |
|
23 |
+ convert_numerus($row["numerus"]), |
|
24 |
+ convert_genus($row["genus"]), |
|
25 |
+ ]; |
|
26 |
+ }, |
|
27 |
+ function ($value) |
|
28 |
+ { |
|
29 |
+ return implode(" / ", $value); |
|
30 |
+ } |
|
31 |
+ ), |
|
32 |
+ /* |
|
33 |
+ */ |
|
34 |
+ new class_column |
|
35 |
+ ( |
|
36 |
+ $configuration["languagemap"]["fs"], |
|
37 |
+ function ($row) |
|
38 |
+ { |
|
39 |
+ return $row["fs"]; |
|
40 |
+ }, |
|
41 |
+ function ($value) |
|
42 |
+ { |
|
43 |
+ return implode(", ", array_map(function ($word) {return mark($word, ["word", "lang_fs"]);}, $value)); |
|
44 |
+ } |
|
45 |
+ ), |
|
46 |
+ new class_column |
|
47 |
+ ( |
|
48 |
+ $configuration["languagemap"][$configuration["target"]], |
|
49 |
+ function ($row) |
|
50 |
+ { |
|
51 |
+ global $configuration; |
|
52 |
+ return $row[$configuration["target"]]; |
|
53 |
+ }, |
|
54 |
+ function ($value) |
|
55 |
+ { |
|
56 |
+ return ((count($value) == 0) ? "--" : implode(", ", array_map(function ($word) {global $configuration; return mark($word, ["word", "lang_" . $configuration["target"]]);}, $value))); |
|
128 | 57 |
} |
58 |
+ ), |
|
59 |
+ ], |
|
60 |
+ read_json("source/data/personal_pronouns.json") |
|
61 |
+ ); |
|
62 |
+ $table->generate(); |
|
129 | 63 |
?> |
130 |
- </tbody> |
|
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> |
|
64 |
+ <p>For the flected and otherwise related forms of the personal pronouns see the section <a href="#grammar/declension">Declension</a>.</p> |
|
133 | 65 |
</section> |
134 | 66 |
|
... | ... |
@@ -1,47 +1,109 @@ |
1 | 1 |
<?php |
2 | 2 |
global $configuration; |
3 | 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 |
- } |
|
4 |
+ include_once("source/logic/server/table.php"); |
|
5 |
+ include_once("source/logic/server/misc.php"); |
|
9 | 6 |
?> |
10 | 7 |
<section class="section" id="grammar/phonology_and_orthography"> |
11 | 8 |
<header>Phonology and Orthography</header> |
12 | 9 |
<!-- |
13 | 10 |
<p>Folksprak uses the following characters as letters:</pa> |
14 | 11 |
--> |
15 |
- <table> |
|
16 |
- <thead> |
|
17 |
- <tr> |
|
18 |
- <th>IPA-sound</th> |
|
19 |
- <th>Type</th> |
|
20 |
- <th>Latin letter Representation</th> |
|
21 |
- <th>Runic Representation</th> |
|
22 |
- <th><?php echo($configuration["languagemap"]["fs"]); ?> Example</th> |
|
23 |
- <th><?php echo($configuration["languagemap"][$configuration["target"]]); ?> Example</th> |
|
24 |
- </tr> |
|
25 |
- </thead> |
|
26 |
- <tbody> |
|
12 |
+ <!-- |
|
13 |
+ <div class="note_information">It was not easy to find a phonology system for Folksprak.</div> |
|
14 |
+ --> |
|
27 | 15 |
<?php |
28 |
- $data_phonology_and_orthography = read_json("source/data/phonology_and_orthography.json"); |
|
29 |
- foreach ($data_phonology_and_orthography as $entry) |
|
16 |
+ $table = new class_table |
|
17 |
+ ( |
|
18 |
+ [ |
|
19 |
+ new class_column |
|
20 |
+ ( |
|
21 |
+ "IPA-sound", |
|
22 |
+ function ($row) |
|
30 | 23 |
{ |
31 |
- ?> |
|
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> |
|
40 |
-<?php |
|
24 |
+ return $row["ipa"]; |
|
25 |
+ }, |
|
26 |
+ function ($value) |
|
27 |
+ { |
|
28 |
+ return mark($value, ["ipa"]); |
|
29 |
+ } |
|
30 |
+ ), |
|
31 |
+ /* |
|
32 |
+ new class_column |
|
33 |
+ ( |
|
34 |
+ "Type", |
|
35 |
+ function ($row) |
|
36 |
+ { |
|
37 |
+ return $row["type"]; |
|
38 |
+ } |
|
39 |
+ ), |
|
40 |
+ */ |
|
41 |
+ new class_column |
|
42 |
+ ( |
|
43 |
+ "Latin letter Representation", |
|
44 |
+ function ($row) |
|
45 |
+ { |
|
46 |
+ return $row["latin"]; |
|
47 |
+ }, |
|
48 |
+ function ($value) |
|
49 |
+ { |
|
50 |
+ return mark($value, ["letter", "lang_fs"]); |
|
51 |
+ } |
|
52 |
+ ), |
|
53 |
+ new class_column |
|
54 |
+ ( |
|
55 |
+ "Runic Representation", |
|
56 |
+ function ($row) |
|
57 |
+ { |
|
58 |
+ return $row["runic"]; |
|
59 |
+ }, |
|
60 |
+ function ($value) |
|
61 |
+ { |
|
62 |
+ return mark($value, ["letter", "lang_fs", "runic"]); |
|
63 |
+ } |
|
64 |
+ ), |
|
65 |
+ new class_column |
|
66 |
+ ( |
|
67 |
+ $configuration["languagemap"]["fs"] . " Example", |
|
68 |
+ function ($row) |
|
69 |
+ { |
|
70 |
+ return $row["examples"]["fs"]; |
|
71 |
+ }, |
|
72 |
+ function ($value) |
|
73 |
+ { |
|
74 |
+ return mark(format($value), ["word", "lang_fs"]); |
|
75 |
+ } |
|
76 |
+ ), |
|
77 |
+ new class_column |
|
78 |
+ ( |
|
79 |
+ $configuration["languagemap"][$configuration["target"]] . " Example", |
|
80 |
+ function ($row) use (&$configuration) |
|
81 |
+ { |
|
82 |
+ return $row["examples"][$configuration["target"]]; |
|
83 |
+ }, |
|
84 |
+ function ($value) use (&$configuration) |
|
85 |
+ { |
|
86 |
+ return mark(format($value), ["word", "lang_" . $configuration["target"]]); |
|
87 |
+ } |
|
88 |
+ ), |
|
89 |
+ new class_column |
|
90 |
+ ( |
|
91 |
+ "Remark", |
|
92 |
+ function ($row) |
|
93 |
+ { |
|
94 |
+ return $row["remark"]; |
|
95 |
+ }, |
|
96 |
+ function ($value) |
|
97 |
+ { |
|
98 |
+ return format($value); |
|
41 | 99 |
} |
100 |
+ ), |
|
101 |
+ ], |
|
102 |
+ read_json("source/data/phonology_and_orthography.json") |
|
103 |
+ ); |
|
104 |
+ $table->generate(); |
|
42 | 105 |
?> |
43 |
- </tbody> |
|
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> |
|
106 |
+ <div class="note_information">It is admitted to pronounce the sounds a little different, for example <span class="letter lang_fs">v</span> as <span class="ipa">ʋ</span> or <span class="letter lang_fs">s</span> as <span class="ipa">z</span>, whilst the sounds from the table above are the default.</div> |
|
107 |
+ <div class="note_warning">The runic writing is not meant to be used in regular texts. Use it only for purposes like art, etc.!</div> |
|
46 | 108 |
</section> |
47 | 109 |
|
... | ... |
@@ -1,10 +1,7 @@ |
1 |
-<section class="section pseudo" id="intro/preface"> |
|
1 |
+<section class="section pseudo" id="introduction/preface"> |
|
2 | 2 |
<header>Preface</header> |
3 |
- <section class="subsection pseudo" id="introduction/preface/what_is_it_about"> |
|
4 |
- <header>What is it about?</header> |
|
5 | 3 |
<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 | 4 |
<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 | 5 |
<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> |
8 | 6 |
</section> |
9 |
-</section> |
|
10 | 7 |
|
... | ... |
@@ -1,5 +1,12 @@ |
1 | 1 |
<section class="chapter" id="vocabulary"> |
2 | 2 |
<header>Vocabulary</header> |
3 |
+ <section class="section" id="vocabulary/principles"> |
|
4 |
+ <header>Principles</header> |
|
5 |
+ <span class="todo">all</span> |
|
6 |
+ </section> |
|
7 |
+ <section class="section" id="vocabulary/dictionary"> |
|
8 |
+ <header>Dictionary</header> |
|
3 | 9 |
See <a href="http://folksprak.org/?target=dictionary">Munin-Dictionary</a> |
4 | 10 |
</section> |
11 |
+</section> |
|
5 | 12 |
|
... | ... |
@@ -0,0 +1,119 @@ |
1 |
+<?php |
|
2 |
+ global $configuration; |
|
3 |
+ include_once("source/logic/server/data.php"); |
|
4 |
+ include_once("source/logic/server/table.php"); |
|
5 |
+ ?> |
|
6 |
+<section class="section" id="grammar/word_functions"> |
|
7 |
+ <header>Word Functions</header> |
|
8 |
+<?php |
|
9 |
+ $table = new class_table |
|
10 |
+ ( |
|
11 |
+ [ |
|
12 |
+ new class_column |
|
13 |
+ ( |
|
14 |
+ "Affix", |
|
15 |
+ function ($row) |
|
16 |
+ { |
|
17 |
+ return $row["affix"]; |
|
18 |
+ }, |
|
19 |
+ function ($value) |
|
20 |
+ { |
|
21 |
+ return mark($value, ["word", "lang_fs"]); |
|
22 |
+ } |
|
23 |
+ ), |
|
24 |
+ new class_column |
|
25 |
+ ( |
|
26 |
+ "Type", |
|
27 |
+ function ($row) |
|
28 |
+ { |
|
29 |
+ return [$row["type_from"], $row["type_to"]]; |
|
30 |
+ }, |
|
31 |
+ function ($value) |
|
32 |
+ { |
|
33 |
+ return ( |
|
34 |
+ implode |
|
35 |
+ ( |
|
36 |
+ " → ", |
|
37 |
+ array_map |
|
38 |
+ ( |
|
39 |
+ function ($group) |
|
40 |
+ { |
|
41 |
+ return ("{" . implode(",", $group) . "}"); |
|
42 |
+ }, |
|
43 |
+ $value |
|
44 |
+ ) |
|
45 |
+ ) |
|
46 |
+ ); |
|
47 |
+ } |
|
48 |
+ ), |
|
49 |
+ new class_column |
|
50 |
+ ( |
|
51 |
+ "Description", |
|
52 |
+ function ($row) |
|
53 |
+ { |
|
54 |
+ return ["name" => $row["name"], "description" => $row["description"]]; |
|
55 |
+ }, |
|
56 |
+ function ($value) |
|
57 |
+ { |
|
58 |
+ $output = ""; |
|
59 |
+ if ($value["name"] != null) $output .= (mark($value["name"], ["grammarterm"]) . ": "); |
|
60 |
+ if ($value["description"] != null) $output .= ($value["description"]); |
|
61 |
+ return $output; |
|
62 |
+ } |
|
63 |
+ ), |
|
64 |
+ /* |
|
65 |
+ new class_column |
|
66 |
+ ( |
|
67 |
+ "Cognates", |
|
68 |
+ function ($row) |
|
69 |
+ { |
|
70 |
+ return $row["cognates"]; |
|
71 |
+ }, |
|
72 |
+ function ($value) |
|
73 |
+ { |
|
74 |
+ return implode(", ", array_map(function ($entry) {return ($entry["language"] . ": " . mark($entry["affix"], ["word", "lang_" . $entry["language"]]));}, $value)); |
|
75 |
+ } |
|
76 |
+ ), |
|
77 |
+ */ |
|
78 |
+ new class_column |
|
79 |
+ ( |
|
80 |
+ "Example", |
|
81 |
+ function ($row) |
|
82 |
+ { |
|
83 |
+ return $row["example"]; |
|
84 |
+ }, |
|
85 |
+ function ($value) |
|
86 |
+ { |
|
87 |
+ global $configuration; |
|
88 |
+ $from = mark($value["word"], ["word", "lang_fs"]); |
|
89 |
+ $to = implode |
|
90 |
+ ( |
|
91 |
+ ", ", |
|
92 |
+ array_map |
|
93 |
+ ( |
|
94 |
+ function ($word) |
|
95 |
+ { |
|
96 |
+ global $configuration; |
|
97 |
+ return mark($word, ["word", "lang_" . $configuration["target"]]); |
|
98 |
+ }, |
|
99 |
+ $value["translations"][$configuration["target"]] |
|
100 |
+ ) |
|
101 |
+ ); |
|
102 |
+ return ($from . " ~ " . $to); |
|
103 |
+ } |
|
104 |
+ ), |
|
105 |
+ ], |
|
106 |
+ read_json("source/data/word_functions.json") |
|
107 |
+ ); |
|
108 |
+ $table->generate(); |
|
109 |
+ ?> |
|
110 |
+<p> |
|
111 |
+ Some complex examples: |
|
112 |
+ <ul> |
|
113 |
+ <li><span class="word lang_fs">unmanlikhed</span> ~ <span class="word lang_en">inhumanity</span></li> |
|
114 |
+ <li><span class="word lang_fs">seberenung</span> ~ <span class="word lang_en">visualization</span></li> |
|
115 |
+ <li><span class="word lang_fs">kraftigenar</span> ~ <span class="word lang_en">fortifier</span></li> |
|
116 |
+ </ul> |
|
117 |
+</p> |
|
118 |
+</section> |
|
119 |
+ |
... | ... |
@@ -1,33 +1,67 @@ |
1 |
-.node |
|
1 |
+table |
|
2 |
+{ |
|
3 |
+ border-collapse: collapse; |
|
4 |
+ |
|
5 |
+ & tr |
|
6 |
+ { |
|
7 |
+ th,td |
|
8 |
+ { |
|
9 |
+ border: 1px solid hsv(hsvhue(@color-fg), hsvsaturation(@color-fg), (0.8 * hsvvalue(@color-fg)) + (0.2 * hsvvalue(@color-bg))); |
|
10 |
+ } |
|
11 |
+ } |
|
12 |
+ |
|
13 |
+ & tr.splitter |
|
14 |
+ { |
|
15 |
+ height: 1px; |
|
16 |
+ } |
|
17 |
+ |
|
18 |
+ & tr:not(.splitter) |
|
19 |
+ { |
|
20 |
+ th,td |
|
21 |
+ { |
|
22 |
+ font-size: 0.8em; |
|
23 |
+ padding: 4px; |
|
24 |
+ } |
|
25 |
+ } |
|
26 |
+} |
|
27 |
+ |
|
28 |
+a |
|
29 |
+{ |
|
30 |
+ color: @color-x1; |
|
31 |
+ text-decoration: none; |
|
32 |
+ font-weight: bold; |
|
33 |
+ /* |
|
34 |
+ font-family: monospace; |
|
35 |
+ */ |
|
36 |
+} |
|
37 |
+ |
|
38 |
+.note |
|
2 | 39 |
{ |
3 | 40 |
padding: 16px; |
4 |
- margin: 8px; |
|
41 |
+ margin: 16px; |
|
5 | 42 |
border-radius: 4px; |
6 |
- box-shadow: 4px 4px 4px hsv(0, 0%, 0%); |
|
7 |
- color: black; |
|
43 |
+ box-shadow: 4px 4px 4px black; |
|
44 |
+ color: @color-fg; |
|
8 | 45 |
} |
9 | 46 |
|
10 | 47 |
.note_information |
11 | 48 |
{ |
12 |
- &:extend(.node); |
|
13 |
- background-color: hsv(120, 20%, 100%); |
|
49 |
+ &:extend(.note); |
|
50 |
+ background-color: hsv(120, 40%, (0.5 * hsvvalue(@color-bg)) + (0.5 * 50%)); |
|
14 | 51 |
&:before {font-weight: bold; content: "[i] ";} |
15 | 52 |
} |
16 | 53 |
|
17 | 54 |
.note_warning |
18 | 55 |
{ |
19 |
- /* |
|
20 |
- &:extend(.node); |
|
21 |
- background-color: hsv( 60, 20%, 100%); |
|
56 |
+ &:extend(.note); |
|
57 |
+ background-color: hsv( 60, 40%, (0.5 * hsvvalue(@color-bg)) + (0.5 * 50%)); |
|
22 | 58 |
&:before {font-weight: bold; content: "[!] ";} |
23 |
- */ |
|
24 |
- &:before {font-weight: bold; content: "Note: ";} |
|
25 | 59 |
} |
26 | 60 |
|
27 | 61 |
.note_error |
28 | 62 |
{ |
29 |
- &:extend(.node); |
|
30 |
- background-color: hsv( 0, 20%, 100%); |
|
63 |
+ &:extend(.note); |
|
64 |
+ background-color: hsv( 0, 40%, (0.5 * hsvvalue(@color-bg)) + (0.5 * 50%)); |
|
31 | 65 |
&:before {font-weight: bold; content: "[x] ";} |
32 | 66 |
} |
33 | 67 |
|
... | ... |
@@ -44,6 +78,16 @@ |
44 | 78 |
} |
45 | 79 |
} |
46 | 80 |
|
81 |
+.buzzword |
|
82 |
+{ |
|
83 |
+ font-style: italic; |
|
84 |
+} |
|
85 |
+ |
|
86 |
+.slogan |
|
87 |
+{ |
|
88 |
+ font-style: italic; |
|
89 |
+} |
|
90 |
+ |
|
47 | 91 |
.grammarterm |
48 | 92 |
{ |
49 | 93 |
/* |
... | ... |
@@ -57,29 +101,49 @@ |
57 | 101 |
font-weight: bold; |
58 | 102 |
} |
59 | 103 |
|
60 |
-.word_fs |
|
104 |
+.lang_fs |
|
61 | 105 |
{ |
62 | 106 |
font-weight: bold; |
107 |
+ /* |
|
108 |
+ font-style: italic; |
|
109 |
+ font-size: 1.2em; |
|
110 |
+ font-family: runic; |
|
111 |
+ */ |
|
63 | 112 |
} |
64 | 113 |
|
65 |
-.word_otherlanguage |
|
114 |
+.lang_de, |
|
115 |
+.lang_en, |
|
116 |
+.lang_is, |
|
117 |
+.lang_nb |
|
66 | 118 |
{ |
67 | 119 |
font-style: italic; |
68 | 120 |
} |
69 | 121 |
|
70 |
-.sentence_fs |
|
122 |
+.letter |
|
123 |
+{ |
|
124 |
+} |
|
125 |
+ |
|
126 |
+.word |
|
127 |
+{ |
|
128 |
+} |
|
129 |
+ |
|
130 |
+.sentence |
|
131 |
+{ |
|
132 |
+ &.lang_fs |
|
71 | 133 |
{ |
72 |
- font-weight: bold; |
|
73 | 134 |
&:before {content: "\"";} |
74 | 135 |
&:after {content: "\"";} |
75 | 136 |
} |
76 | 137 |
|
77 |
-.sentence_otherlanguage |
|
138 |
+ &.lang_de, |
|
139 |
+ &.lang_en, |
|
140 |
+ &.lang_is, |
|
141 |
+ &.lang_nb |
|
78 | 142 |
{ |
79 |
- font-style: italic; |
|
80 | 143 |
&:before {content: "\"";} |
81 | 144 |
&:after {content: "\"";} |
82 | 145 |
} |
146 |
+} |
|
83 | 147 |
|
84 | 148 |
.todo |
85 | 149 |
{ |
... | ... |
@@ -104,7 +168,7 @@ section |
104 | 168 |
{ |
105 | 169 |
&.chapter |
106 | 170 |
{ |
107 |
- margin-bottom: 16px; |
|
171 |
+ margin-bottom: 160px; |
|
108 | 172 |
|
109 | 173 |
& > header |
110 | 174 |
{ |
... | ... |
@@ -120,7 +184,7 @@ section |
120 | 184 |
|
121 | 185 |
&.section |
122 | 186 |
{ |
123 |
- margin-bottom: 14px; |
|
187 |
+ margin-bottom: 140px; |
|
124 | 188 |
|
125 | 189 |
& > header |
126 | 190 |
{ |
... | ... |
@@ -137,7 +201,7 @@ section |
137 | 201 |
|
138 | 202 |
&.subsection |
139 | 203 |
{ |
140 |
- margin-bottom: 12px; |
|
204 |
+ margin-bottom: 120px; |
|
141 | 205 |
|
142 | 206 |
& > header |
143 | 207 |
{ |
... | ... |
@@ -158,42 +222,13 @@ section |
158 | 222 |
font-style: italic; |
159 | 223 |
} |
160 | 224 |
} |
161 |
-} |
|
162 | 225 |
|
163 |
-table |
|
226 |
+ &.hidden |
|
164 | 227 |
{ |
165 |
- border-collapse: collapse; |
|
166 |
- |
|
167 |
- & tr |
|
168 |
- { |
|
169 |
- th,td |
|
170 |
- { |
|
171 |
- border: 1px solid black; |
|
172 |
- } |
|
173 |
- } |
|
174 |
- |
|
175 |
- & tr.splitter |
|
176 |
- { |
|
177 |
- height: 1px; |
|
178 |
- } |
|
179 |
- |
|
180 |
- & tr:not(.splitter) |
|
181 |
- { |
|
182 |
- th,td |
|
228 |
+ & > header |
|
183 | 229 |
{ |
184 |
- font-size: 0.8em; |
|
185 |
- padding: 4px; |
|
186 |
- } |
|
230 |
+ display: none; |
|
187 | 231 |
} |
188 | 232 |
} |
189 |
- |
|
190 |
-a |
|
191 |
-{ |
|
192 |
- color: hsv(120, 50%, 50%); |
|
193 |
- text-decoration: none; |
|
194 |
- font-weight: bold; |
|
195 |
- /* |
|
196 |
- font-family: monospace; |
|
197 |
- */ |
|
198 | 233 |
} |
199 | 234 |
|
... | ... |
@@ -1,3 +1,13 @@ |
1 |
+@color-bg: hsv(120, 0%,100.0%); |
|
2 |
+@color-fg: hsv(120, 0%, 0.0%); |
|
3 |
+/* |
|
4 |
+@color-bg: hsv(120, 0%, 12.5%); |
|
5 |
+@color-fg: hsv(120, 0%, 75.0%); |
|
6 |
+ */ |
|
7 |
+ |
|
8 |
+@color-x1: hsv(120, 50%, 50.0%); |
|
9 |
+@color-x2: hsv(120, 50%, 50.0%); |
|
10 |
+ |
|
1 | 11 |
* |
2 | 12 |
{ |
3 | 13 |
font-family: sans-serif; |
... | ... |
@@ -5,13 +15,15 @@ |
5 | 15 |
|
6 | 16 |
body |
7 | 17 |
{ |
8 |
- background-color: hsv(0,0%,80%); |
|
18 |
+ background-color: darken(@color-bg, 50%); |
|
9 | 19 |
} |
10 | 20 |
|
11 | 21 |
#mid |
12 | 22 |
{ |
13 |
- background-color: hsv(0,0%,100%); |
|
14 |
- box-shadow: 2px 2px 2px hsv(0,0%,50%); |
|
23 |
+ background-color: @color-bg; |
|
24 |
+ color: @color-fg; |
|
25 |
+ |
|
26 |
+ box-shadow: 2px 2px 2px black; |
|
15 | 27 |
padding: 80px 40px; |
16 | 28 |
max-width: 1000px; |
17 | 29 |
margin: auto; |
... | ... |
@@ -37,6 +49,6 @@ body |
37 | 49 |
} |
38 | 50 |
} |
39 | 51 |
|
40 |
- margin-bottom: 36px; |
|
52 |
+ margin-bottom: 180px; |
|
41 | 53 |
} |
42 | 54 |
|
43 | 55 |