schon vielversprechend
Christian Fraß

Christian Fraß commited on 2018-08-21 21:40:56
Zeige 54 geänderte Dateien mit 1619 Einfügungen und 459 Löschungen.

... ...
@@ -0,0 +1,6 @@
1
+		<div class="note note_error">
2
+			<span class="note_content">
3
+				<p>This section is only a proposal yet; not part of the draft.</p>
4
+			</span>
5
+		</div>
6
+
... ...
@@ -1,99 +0,0 @@
1
-<?php
2
-	include_once("source/logic/server/data.php");
3
-	include_once("source/logic/server/table.php");
4
-	include_once("source/logic/server/misc.php");
5
- ?>
6
-<section class="section" id="adpositions">
7
-	<header>Adpositions</header>
8
-	<?php proposal(); ?>
9
-	<!--
10
-	<p>The following list gives an overview over prepositions:</p>
11
-	  -->
12
-<?php
13
-	$data_adpositions = read_json("source/data/adpositions.json");
14
-	// $data = $data_adpositions["words"];
15
-	$data = $data_adpositions["situations"];
16
-	{
17
-		/*
18
-		{
19
-			$data = sql_cross($data, $data_adpositions["situations"]);
20
-			$data = sql_select($data, function ($row) {return ($row["situation_id"] == $row["id"]);});
21
-			$data = sql_order($data, function ($x, $y) {return ($x["situation_id"] >= $y["situation_id"]);});
22
-			$data = sql_delete($data, ["situation_id", "id"]);
23
-			$data = sql_rename($data, "name", "situation_name");
24
-		}
25
-		 */
26
-		{
27
-			$data = sql_cross($data, $data_adpositions["words"]);
28
-			$data = sql_select($data, function ($row) {return ($row["situation_id"] == $row["id"]);});
29
-			$data = sql_delete($data, ["situation_id", "id"]);
30
-			$data = sql_rename($data, "name", "situation_name");
31
-		}
32
-		{
33
-			$data = sql_cross($data, $data_adpositions["types"]);
34
-			$data = sql_select($data, function ($row) {return ($row["type_id"] == $row["id"]);});
35
-			$data = sql_delete($data, ["type_id", "id"]);
36
-			$data = sql_rename($data, "name", "type_name");
37
-		}
38
-		{
39
-			$data = sql_cross($data, $data_adpositions["references"]);
40
-			$data = sql_select($data, function ($row) {return ($row["reference_id"] == $row["id"]);});
41
-			$data = sql_delete($data, ["reference_id", "id"]);
42
-			$data = sql_rename($data, "name", "reference_name");
43
-		}
44
-	}
45
-	
46
-	$table = new class_table
47
-	(
48
-		[
49
-			new class_column("Language", "language_id"),
50
-			new class_column("Situation", "situation_name"),
51
-			new class_column("Type", "type_name"),
52
-			new class_column("Reference", "reference_name"),
53
-			new class_column("Words", "words", function ($x) {return json_encode($x);}),
54
-		],
55
-		$data
56
-	);
57
-	$table_ = $table->snap
58
-	(
59
-		[
60
-			"label_vertical" => function ($column) {return "";},
61
-			"columns_vertical" =>
62
-			[
63
-				$table->columns_get()[1],
64
-			],
65
-			"label_horizontal" => function ($column, $value) {return $value;},
66
-			"columns_horizontal" =>
67
-			[
68
-				$table->columns_get()[2],
69
-				$table->columns_get()[3],
70
-			],
71
-			"columns_data" =>
72
-			[
73
-				$table->columns_get()[0],
74
-				$table->columns_get()[4],
75
-			],
76
-			"data_aggregator" => function ($values)
77
-			{
78
-				return $values;
79
-			},
80
-			"data_formatter" => function_chain
81
-			(
82
-				[
83
-					object_from_array("language_id"),
84
-					object_map(object_attribute("words")),
85
-					format_correlation("type_word"),
86
-				]
87
-			),
88
-		]
89
-	);
90
-	$table_->generate();
91
- ?>
92
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Ek skal varte foran."], "eng" => ["I will wait in front."]])); ?></p>
93
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Du mut blive bakan."], "eng" => ["You must stay in the back."]])); ?></p>
94
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Han sta nedan de brüg."], "eng" => ["He stands under the bridge."]])); ?></p>
95
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Hun flüg uvan de volker."], "eng" => ["She flies above the clouds."]])); ?></p>
96
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Vi kan gae in de timer."], "eng" => ["We can go into the room."]])); ?></p>
97
- 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Je skal löpe ut de hus."], "eng" => ["You shall run out of the house."]])); ?></p>
98
-</section>
99
-
... ...
@@ -0,0 +1,15 @@
1
+<section class="section" id="adpositions">
2
+	<header>Adpositions</header>
3
+	{{call::_proposal.html.tpl}}
4
+	<!--
5
+	<p>The following list gives an overview over prepositions:</p>
6
+	  -->
7
+	{{fold:adpositions.words:situation_id:type_id/reference_id}}
8
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Ek skal varte foran."], "eng" => ["I will wait in front."]])); ?></p>
9
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Du mut blive bakan."], "eng" => ["You must stay in the back."]])); ?></p>
10
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Han sta nedan de brüg."], "eng" => ["He stands under the bridge."]])); ?></p>
11
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Hun flüg uvan de volker."], "eng" => ["She flies above the clouds."]])); ?></p>
12
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Vi kan gae in de timer."], "eng" => ["We can go into the room."]])); ?></p>
13
+ 	<p><?php echo(format_correlation("type_sentence")(["flk" => ["Je skal löpe ut de hus."], "eng" => ["You shall run out of the house."]])); ?></p>
14
+</section>
15
+
... ...
@@ -1,12 +1,5 @@
1 1
 <section class="chapter" id="basics">
2 2
 	<header>Basics</header>
3
-<?php
4
-	compose
5
-	(
6
-		[
7
-			"phonology_and_orthography",
8
-		]
9
-	);
10
- ?>
3
+	[[call::phonology_and_orthography.html.tpl]]
11 4
 </section>
12 5
 
... ...
@@ -1,78 +0,0 @@
1
-<?php
2
-	include_once("source/logic/server/data.php");
3
-	include_once("source/logic/server/table.php");
4
-	include_once("source/logic/server/misc.php");
5
-	include_once("source/logic/server/sql.php");
6
- ?>
7
-<section class="subsection" id="correlatives">
8
-	<header>Correlatives</header>
9
-	<?php proposal(); ?>
10
-<?php
11
-	$data_correlatives = read_json("source/data/correlatives.json");
12
-	$data = $data_correlatives["words"];
13
-	{
14
-		{
15
-			$data = sql_cross($data, $data_correlatives["domains"]);
16
-			$data = sql_select($data, function ($row) {return ($row["domain_id"] == $row["id"]);});
17
-			$data = sql_delete($data, ["domain_id", "id"]);
18
-			$data = sql_rename($data, "name", "domain_name");
19
-		}
20
-		{
21
-			$data = sql_cross($data, $data_correlatives["types"]);
22
-			$data = sql_select($data, function ($row) {return ($row["type_id"] == $row["id"]);});
23
-			$data = sql_delete($data, ["type_id", "id"]);
24
-			$data = sql_rename($data, "name", "type_name");
25
-		}
26
-	}
27
-	
28
-	$table = new class_table
29
-	(
30
-		[
31
-			new class_column("Language", "language_id"),
32
-			new class_column("Domain", "domain_name"),
33
-			new class_column("Type", "type_name"),
34
-			new class_column("Words", "words", function ($x) {return json_encode($x);}),
35
-		],
36
-		$data
37
-	);
38
-	$table_ = $table->snap
39
-	(
40
-		[
41
-			"label_vertical" => function ($column) {return "";},
42
-			"columns_vertical" =>
43
-			[
44
-				$table->columns_get()[1],
45
-			],
46
-			"label_horizontal" => function ($column, $value) {return $value;},
47
-			"columns_horizontal" =>
48
-			[
49
-				$table->columns_get()[2],
50
-			],
51
-			"columns_data" =>
52
-			[
53
-				$table->columns_get()[0],
54
-				$table->columns_get()[3],
55
-			],
56
-			"data_aggregator" => function ($values)
57
-			{
58
-				return $values;
59
-			},
60
-			"data_formatter" => function_chain
61
-			(
62
-				[
63
-					object_from_array("language_id"),
64
-					object_map(object_attribute("words")),
65
-					format_correlation("type_word"),
66
-				]
67
-			),
68
-		]
69
-	);
70
-	$table_->generate();
71
- ?>
72
-	<div class="note note_information">
73
-		<span class="note_content">
74
-			<p>Some of these words are very unlikely to ever get used (e.g. <?php echo(mark("ni slag", ["type_word", "lang_flk"])); ?>). Nevertheless they exist and are listed for completeness.</p>
75
-		</span>
76
-	</div>
77
-</section>
78
-
... ...
@@ -0,0 +1,11 @@
1
+<section class="subsection" id="correlatives">
2
+	<header>Correlatives</header>
3
+	{{call::_proposal.html.tpl}}
4
+	{{fold:correlatives.words:domain_id:type_id}}
5
+	<div class="note note_information">
6
+		<span class="note_content">
7
+			<p>Some of these words are very unlikely to ever get used (e.g. [[show:correlative_example|mark:type_word:lang_flk]]). Nevertheless they exist and are listed for completeness.</p>
8
+		</span>
9
+	</div>
10
+</section>
11
+
... ...
@@ -1,10 +1,12 @@
1 1
 <!DOCTYPE HTML>
2
-<?php include_once("source/logic/server/settings.php"); ?>
3
-<?php include_once("source/logic/server/misc.php"); ?>
4 2
 <html>
5 3
 	<head>
6 4
 		<title>Folksprak -- Draft</title>
7
-		<?php include("source/content/meta.html.php"); ?>
5
+		<meta charset="utf-8"/>
6
+		<meta name="author" content="Fenris Wolf"/>
7
+		<meta name="description" content="draft for the constructed germanic zonal auxlang 'Folksprak'"/>
8
+		<meta name="language" content="english"/>
9
+		<meta name="keywords" content="language,germanic,constructed"/>
8 10
 		<link rel="shortcut icon" type="image/png" href="favicon.png"/>
9 11
 		<link rel="stylesheet" type="text/css" href="draft.css"/>
10 12
 		<script type="text/javascript" src="draft.js"></script>
... ...
@@ -20,34 +22,11 @@
20 22
 			<!--
21 23
 			titlepage
22 24
 			  -->
23
-<?php
24
-	/*
25
-	echo
26
-	(
27
-		function_chain
28
-		(
29
-			[
30
-				function ($x) {return $x+1;},
31
-				function ($x) {return $x*2;},
32
-				function ($x) {return $x/3;},
33
-			]
34
-		)
35
-		(5)
36
-	);
37
-	 */
38
-	compose
39
-	(
40
-		[
41
-			"introduction",
42
-			"basics",
43
-			"vocabulary",
44
-			"grammar",
45
-			"examples",
46
-		]
47
-	);
48
-	/*
49
-	 */
50
- ?>
25
+			{{call::introduction.html.tpl}}
26
+			{{call::basics.html.tpl}}
27
+			{{call::vocabulary.html.tpl}}
28
+			[[call::grammar.html.tpl]]
29
+			[[call::examples.html.tpl]]
51 30
 		</div>
52 31
 	</body>
53 32
 </html>
... ...
@@ -1,15 +0,0 @@
1
-<?php include_once("source/logic/server/misc.php"); ?>
2
-<section class="chapter hidden" id="introduction">
3
-	<header>Introduction</header>
4
-<?php
5
-	compose
6
-	(
7
-		[
8
-			"toc",
9
-			"preface",
10
-			"key_parameters",
11
-		]
12
-	);
13
- ?>
14
-</section>
15
-
... ...
@@ -0,0 +1,7 @@
1
+<section class="chapter hidden" id="introduction">
2
+	<header>Introduction</header>
3
+	{{call::toc.html.tpl}}
4
+	{{call::preface.html.tpl}}
5
+	{{call::key_parameters.html.tpl}}
6
+</section>
7
+
... ...
@@ -1,167 +0,0 @@
1
-<?php
2
-global $configuration;
3
-include_once("source/logic/server/data.php");
4
-include_once("source/logic/server/sql.php");
5
-include_once("source/logic/server/table.php");
6
-
7
-/*
8
-function convert_persona($persona) {return [0 => "impersonal", 1 => "1st person", 2 => "2nd person", 3 => "3rd person"][$persona];}
9
-function convert_numerus($numerus) {return [0 => null, 1 => "singular", 2 => "plural"][$numerus];}
10
-function convert_genus($genus) {return [0 => "common", 1 => "masculine", 2 => "feminine", 3 => "neuter"][$genus];}
11
- */
12
- ?>
13
-<section class="subsection" id="personal_pronouns">
14
-	<header>Personal Pronouns</header>
15
-<?php
16
-	$data_common = read_json("source/data/common.json");
17
-	$data_pronouns = read_json("source/data/personal_pronouns.json");
18
-	
19
-	$data = $data_pronouns["words"];
20
-	{
21
-		{
22
-			if (false)
23
-			{
24
-				$data = sql_cross($data, $data_common["counts"]);
25
-				$data = sql_select($data, function ($row) {return ($row["count_id"] == $row["id"]);});
26
-				$data = sql_delete($data, ["count_id", "id"]);
27
-				$data = sql_rename($data, "name", "count_name");
28
-			}
29
-			else
30
-			{
31
-				$data = sql_rename($data, "count_id", "count_name");
32
-			}
33
-		}
34
-		{
35
-			if (false)
36
-			{
37
-				$data = sql_cross($data, $data_common["persons"]);
38
-				$data = sql_select($data, function ($row) {return ($row["person_id"] == $row["id"]);});
39
-				$data = sql_delete($data, ["person_id", "id"]);
40
-				$data = sql_rename($data, "name", "person_name");
41
-			}
42
-			else
43
-			{
44
-				$data = sql_rename($data, "person_id", "person_name");
45
-			}
46
-		}
47
-		{
48
-			if (false)
49
-			{
50
-				$data = sql_cross($data, $data_common["genders"]);
51
-				$data = sql_select($data, function ($row) {return ($row["gender_id"] == $row["id"]);});
52
-				$data = sql_delete($data, ["gender_id", "id"]);
53
-				$data = sql_rename($data, "name", "gender_name");
54
-			}
55
-			else
56
-			{
57
-				$data = sql_rename($data, "gender_id", "gender_name");
58
-			}
59
-		}
60
-		{
61
-			if (false)
62
-			{
63
-				$data = sql_cross($data, $data_pronouns["types"]);
64
-				$data = sql_select($data, function ($row) {return ($row["type_id"] == $row["id"]);});
65
-				$data = sql_delete($data, ["type_id", "id"]);
66
-				$data = sql_rename($data, "name", "type_name");
67
-			}
68
-			else
69
-			{
70
-				$data = sql_rename($data, "type_id", "type_name");
71
-			}
72
-		}
73
-		{
74
-			if (false)
75
-			{
76
-				$data = sql_cross($data, $data_common["cases"]);
77
-				$data = sql_select($data, function ($row) {return ($row["case_id"] == $row["id"]);});
78
-				$data = sql_delete($data, ["case_id", "id"]);
79
-				$data = sql_rename($data, "name", "case_name");
80
-			}
81
-			else
82
-			{
83
-				$data = sql_rename($data, "case_id", "case_name");
84
-			}
85
-		}
86
-	}
87
-	
88
-	{
89
-		// $data = sql_select($data, function ($row) {return ($row["type_name"] == "nor");});
90
-		$data = sql_select($data, function ($row) {global $configuration; return (($row["language_id"] == "flk") or ($row["language_id"] == $configuration["target"]));});
91
-	}
92
-	
93
-	$table = new class_table
94
-	(
95
-		[
96
-			new class_column("Language", "language_id"),
97
-			new class_column("Count", "count_name"),
98
-			new class_column("Person", "person_name"),
99
-			new class_column("Gender", "gender_name"),
100
-			new class_column("Type", "type_name"),
101
-			new class_column("Case", "case_name"),
102
-			new class_column("Words", "words", function ($x) {return json_encode($x);}),
103
-		],
104
-		$data
105
-	);
106
-	
107
-	$table->snap
108
-	(
109
-		[
110
-			"label_vertical" => function ($column) {return "";},
111
-			"columns_vertical" =>
112
-			[
113
-				$table->columns_get()[1],
114
-				$table->columns_get()[2],
115
-				$table->columns_get()[3],
116
-			],
117
-			"label_horizontal" => function ($column, $value) {return $value;},
118
-			"columns_horizontal" =>
119
-			[
120
-				$table->columns_get()[4],
121
-				$table->columns_get()[5],
122
-			],
123
-			"columns_data" =>
124
-			[
125
-				$table->columns_get()[0],
126
-				$table->columns_get()[6],
127
-			],
128
-			"data_aggregator" => function ($values)
129
-			{
130
-				return $values;
131
-			},
132
-			"data_formatter" => function_chain
133
-			(
134
-				[
135
-					object_from_array("language_id"),
136
-					object_map(object_attribute("words")),
137
-					format_correlation("type_word"),
138
-				]
139
-			),
140
-		]
141
-	)->generate();
142
- ?>
143
-	<div class="note note_information">
144
-		<span class="note_content">
145
-			<p>Since the word <?php echo(mark("man", ["type_word", "lang_flk"])); ?> simply means <?php echo(mark("human being", ["type_word", "lang_en"])); ?>, it can be understood as an implicit way to express an abstract actor; similar words like <?php echo(mark("lüd", ["type_word", "lang_flk"])); ?> (<?php echo(mark("people", ["type_word", "lang_en"])); ?>) or <?php echo(mark("di", ["type_word", "lang_flk"])); ?> can be used as well.</p>
146
-		</span>
147
-	</div>
148
-	<div class="note note_information">
149
-		<span class="note_content">
150
-			<p>The honorific salutation is expressed by the plural form <?php echo(mark("je", ["type_word", "lang_flk"])); ?>; however it should be avoided in usual speech in favor of the singular form <?php echo(mark("du", ["type_word", "lang_flk"])); ?>.</p>
151
-		</span>
152
-	</div>
153
-	<div class="note note_information">
154
-		<span class="note_content">
155
-			<p>A reflexive genitive can be formed by inserting the word <?php echo(mark("egen", ["word", "lang_flk"])); ?> (<?php echo(mark("own", ["type_word", "lang_en"])); ?>), for example <?php echo(format_correlation("type_sentence")(["flk" => ["Han (A) hav givt to ham (B) hans egen buk."], "eng" => ["He (A) has given (to) him (B) his own book."]])); ?> (A's book was given to B).</p>
156
-		</span>
157
-	</div>
158
-	<div class="note note_reasoning">
159
-		<input type="checkbox" class="note_hide" title="click to show/hide" id="note_02"/>
160
-		<label class="note_label note_label_show" for="note_02">show</label>
161
-		<label class="note_label note_label_hide" for="note_02">hide</label>
162
-		<span class="note_content">
163
-			<p>When finding appropriate personal pronouns, the most intricate cases were the 3rd person singular and the 2nd person plural; both turned out to be very diverse among the modern Germanic languages. While for the 2nd person plural we could find a sufficient satisfying solution after a while, the 3rd person singular kept defying. In the end we came to the settlement to use a Swedish-like solution including the pronoun <?php echo(mark("hen", ["type_word", "lang_flk"])); ?>, which is not bound to any sexus so that it can be used for actors in general.</p>
164
-		</span>
165
-	</div>
166
-</section>
167
-
... ...
@@ -0,0 +1,28 @@
1
+<section class="subsection" id="personal_pronouns">
2
+	<header>Personal Pronouns</header>
3
+ 	{{fold:personal_pronouns.words:count_id/person_id/gender_id:type_id/case_id}}
4
+	<div class="note note_information">
5
+		<span class="note_content">
6
+			<p>Since the word <?php echo(mark("man", ["type_word", "lang_flk"])); ?> simply means <?php echo(mark("human being", ["type_word", "lang_en"])); ?>, it can be understood as an implicit way to express an abstract actor; similar words like <?php echo(mark("lüd", ["type_word", "lang_flk"])); ?> (<?php echo(mark("people", ["type_word", "lang_en"])); ?>) or <?php echo(mark("di", ["type_word", "lang_flk"])); ?> can be used as well.</p>
7
+		</span>
8
+	</div>
9
+	<div class="note note_information">
10
+		<span class="note_content">
11
+			<p>The honorific salutation is expressed by the plural form <?php echo(mark("je", ["type_word", "lang_flk"])); ?>; however it should be avoided in usual speech in favor of the singular form <?php echo(mark("du", ["type_word", "lang_flk"])); ?>.</p>
12
+		</span>
13
+	</div>
14
+	<div class="note note_information">
15
+		<span class="note_content">
16
+			<p>A reflexive genitive can be formed by inserting the word <?php echo(mark("egen", ["word", "lang_flk"])); ?> (<?php echo(mark("own", ["type_word", "lang_en"])); ?>), for example <?php echo(format_correlation("type_sentence")(["flk" => ["Han (A) hav givt to ham (B) hans egen buk."], "eng" => ["He (A) has given (to) him (B) his own book."]])); ?> (A's book was given to B).</p>
17
+		</span>
18
+	</div>
19
+	<div class="note note_reasoning">
20
+		<input type="checkbox" class="note_hide" title="click to show/hide" id="note_02"/>
21
+		<label class="note_label note_label_show" for="note_02">show</label>
22
+		<label class="note_label note_label_hide" for="note_02">hide</label>
23
+		<span class="note_content">
24
+			<p>When finding appropriate personal pronouns, the most intricate cases were the 3rd person singular and the 2nd person plural; both turned out to be very diverse among the modern Germanic languages. While for the 2nd person plural we could find a sufficient satisfying solution after a while, the 3rd person singular kept defying. In the end we came to the settlement to use a Swedish-like solution including the pronoun <?php echo(mark("hen", ["type_word", "lang_flk"])); ?>, which is not bound to any sexus so that it can be used for actors in general.</p>
25
+		</span>
26
+	</div>
27
+</section>
28
+
... ...
@@ -2,6 +2,6 @@
2 2
 	<header>Preface</header>
3 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>
4 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>
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>
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> or leave thoughts at <a href="https://public.etherpad-mozilla.org/p/fs-draft">this Etherpad</a>.</p>
6 6
 </section>
7 7
 
... ...
@@ -1,13 +1,6 @@
1 1
 <section class="section" id="pronouns">
2 2
 	<header>Pronouns</header>
3
-<?php
4
-	compose
5
-	(
6
-		[
7
-			"personal_pronouns",
8
-			"correlatives",
9
-		]
10
-	);
11
- ?>
3
+	{{call::personal_pronouns.html.tpl}}
4
+	{{call::correlatives.html.tpl}}
12 5
 </section>
13 6
 
... ...
@@ -1,16 +0,0 @@
1
-<section class="chapter" id="vocabulary">
2
-	<header>Vocabulary</header>
3
-<?php
4
-	compose
5
-	(
6
-		[
7
-			"principles",
8
-			"pronouns",
9
-			"adpositions",
10
-			"word_functions",
11
-			"dictionary",
12
-		]
13
-	);
14
- ?>
15
-</section>
16
-
... ...
@@ -0,0 +1,9 @@
1
+<section class="chapter" id="vocabulary">
2
+	<header>Vocabulary</header>
3
+	[[call::principles.html.tpl]]
4
+	{{call::pronouns.html.tpl}}
5
+	{{call::adpositions.html.tpl}}
6
+	[[call::word_functions.html.tpl]]
7
+	{{call::dictionary.html.tpl}}
8
+</section>
9
+
... ...
@@ -0,0 +1,12 @@
1
+{
2
+	"target": "eng",
3
+	"languagemap": {
4
+		"flk": "Folksprak",
5
+		"eng": "English",
6
+		"deu": "Deutsch",
7
+		"eo": "Esperanto",
8
+		"nob": "Norsk (Bokmål)"
9
+	},
10
+	"replace_fs_umlauts": false
11
+}
12
+
... ...
@@ -1,4 +1,4 @@
1 1
 #!/usr/bin/env sh
2 2
 
3
-node tools/koralle.js tools/project.json -x
3
+nodejs tools/koralle.js tools/project.json -x
4 4
 
... ...
@@ -0,0 +1,6 @@
1
+#!/usr/bin/env sh
2
+
3
+shift
4
+output=$1 && shift
5
+nodejs tools/join.js | tools/vorlage/vorlage source/content/draft.html.tpl > ${output}
6
+
... ...
@@ -0,0 +1,20 @@
1
+const _fs = require("fs");
2
+
3
+let data_master = {};
4
+const dir_source = "source/data";
5
+_fs.readdir(
6
+	dir_source,
7
+	(error, names) => {
8
+		names.forEach(
9
+			(name) => {
10
+				const path = (dir_source + "/" + name);
11
+				const content = _fs.readFileSync(path);
12
+				const data_segment = JSON.parse(content);
13
+				const key = name.split(".")[0];
14
+				data_master[key] = data_segment;
15
+			}
16
+		);
17
+		console.info(JSON.stringify(data_master));
18
+	}
19
+);
20
+
... ...
@@ -7,9 +7,8 @@
7 7
 		"sub": [
8 8
 			{
9 9
 				"name": "structure",
10
-				"type": "php",
10
+				"type": "script",
11 11
 				"parameters": {
12
-					"only_last": true,
13 12
 					"inputs": [
14 13
 						"source/data/adpositions.json",
15 14
 						"source/data/common.json",
... ...
@@ -26,39 +25,42 @@
26 25
 						"source/logic/server/settings.php",
27 26
 						"source/logic/server/table.php",
28 27
 						"source/logic/server/sql.php",
29
-						"source/content/meta.html.php",
30
-						"source/content/introduction.html.php",
31
-						"source/content/preface.html.php",
32
-						"source/content/key_parameters.html.php",
33
-						"source/content/toc.html.php",
34
-						"source/content/basics.html.php",
35
-						"source/content/phonology_and_orthography.html.php",
36
-						"source/content/grammar.html.php",
37
-						"source/content/personal_pronouns.html.php",
38
-						"source/content/correlatives.html.php",
39
-						"source/content/conjugation.html.php",
40
-						"source/content/infinite_verbforms.html.php",
41
-						"source/content/modal_verbs.html.php",
42
-						"source/content/tempora_and_modi.html.php",
43
-						"source/content/negation.html.php",
44
-						"source/content/declension.html.php",
45
-						"source/content/numeri.html.php",
46
-						"source/content/cases.html.php",
47
-						"source/content/definiteness.html.php",
48
-						"source/content/attributes.html.php",
49
-						"source/content/sentence_structure.html.php",
50
-						"source/content/vocabulary.html.php",
51
-						"source/content/principles.html.php",
52
-						"source/content/word_functions.html.php",
53
-						"source/content/adpositions.html.php",
54
-						"source/content/pronouns.html.php",
55
-						"source/content/dictionary.html.php",
56
-						"source/content/examples.html.php",
57
-						"source/content/example_sentences.html.php",
58
-						"source/content/example_texts.html.php",
59
-						"source/content/draft.html.php"
28
+						"source/content/meta.html.tpl",
29
+						"source/content/introduction.html.tpl",
30
+						"source/content/preface.html.tpl",
31
+						"source/content/key_parameters.html.tpl",
32
+						"source/content/toc.html.tpl",
33
+						"source/content/basics.html.tpl",
34
+						"source/content/phonology_and_orthography.html.tpl",
35
+						"source/content/grammar.html.tpl",
36
+						"source/content/personal_pronouns.html.tpl",
37
+						"source/content/correlatives.html.tpl",
38
+						"source/content/conjugation.html.tpl",
39
+						"source/content/infinite_verbforms.html.tpl",
40
+						"source/content/modal_verbs.html.tpl",
41
+						"source/content/tempora_and_modi.html.tpl",
42
+						"source/content/negation.html.tpl",
43
+						"source/content/declension.html.tpl",
44
+						"source/content/numeri.html.tpl",
45
+						"source/content/cases.html.tpl",
46
+						"source/content/definiteness.html.tpl",
47
+						"source/content/attributes.html.tpl",
48
+						"source/content/sentence_structure.html.tpl",
49
+						"source/content/vocabulary.html.tpl",
50
+						"source/content/principles.html.tpl",
51
+						"source/content/word_functions.html.tpl",
52
+						"source/content/adpositions.html.tpl",
53
+						"source/content/pronouns.html.tpl",
54
+						"source/content/dictionary.html.tpl",
55
+						"source/content/examples.html.tpl",
56
+						"source/content/example_sentences.html.tpl",
57
+						"source/content/example_texts.html.tpl",
58
+						"source/content/draft.html.tpl"
60 59
 					],
61
-					"output": "build/draft.html"
60
+					"outputs": [
61
+						"build/draft.html"
62
+					],
63
+					"path": "tools/coin.sh"
62 64
 				}
63 65
 			},
64 66
 			{
... ...
@@ -0,0 +1,27 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author kcf
5
+ */
6
+function encode(wert) {
7
+    return lib_code.base64_encode(wert);
8
+}
9
+/**
10
+ * @author kcf
11
+ */
12
+function definieren() {
13
+    return {
14
+        "name": "base64",
15
+        "modifikatoren": {
16
+            "encode": [
17
+                {
18
+                    "name": "base64",
19
+                    "funktion": function () { return function (wert) {
20
+                        return encode(wert);
21
+                    }; }
22
+                },
23
+            ]
24
+        }
25
+    };
26
+}
27
+exports.definieren = definieren;
... ...
@@ -0,0 +1,262 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author fenris
5
+ */
6
+function objvals(objekt) {
7
+    return Object.keys(objekt).map(function (key) { return objekt[key]; });
8
+}
9
+/**
10
+ * @author fenris
11
+ */
12
+function merge(liste_x, liste_y, ordnung) {
13
+    if (liste_x.length <= 0) {
14
+        return liste_y;
15
+    }
16
+    else if (liste_y.length <= 0) {
17
+        return liste_x;
18
+    }
19
+    else {
20
+        return (ordnung(liste_x[0], liste_y[0])
21
+            ? ([liste_x[0]].concat(merge(liste_x.slice(1), liste_y, ordnung)))
22
+            : ([liste_y[0]].concat(merge(liste_x, liste_y.slice(1), ordnung))));
23
+    }
24
+}
25
+/**
26
+ * @author fenris
27
+ */
28
+function mergesort(liste, ordnung) {
29
+    if (liste.length <= 1) {
30
+        return liste;
31
+    }
32
+    else {
33
+        var n = (Math.floor(liste.length / 2));
34
+        return merge(mergesort(liste.slice(0, n), ordnung), mergesort(liste.slice(n), ordnung), ordnung);
35
+    }
36
+}
37
+/**
38
+ * @author fenris
39
+ */
40
+function order_list(liste, kollation) {
41
+    if (kollation === void 0) { kollation = (function (x, y) { return (x === y); }); }
42
+    return (function (x, y) {
43
+        var i = liste["findIndex"](function (element) { return kollation(x, element); });
44
+        var j = liste["findIndex"](function (element) { return kollation(y, element); });
45
+        return (i <= j);
46
+    });
47
+}
48
+/**
49
+ * @author fenris
50
+ */
51
+function order_lex(ordnungen) {
52
+    return (function (x, y) {
53
+        if ((ordnungen.length <= 0)
54
+            ||
55
+                (x.length <= 0)
56
+            ||
57
+                (y.length <= 0)) {
58
+            return true;
59
+        }
60
+        else {
61
+            var le = ordnungen[0](x[0], y[0]);
62
+            var ge = ordnungen[0](y[0], x[0]);
63
+            if (le && !ge) {
64
+                return true;
65
+            }
66
+            else if (!le && ge) {
67
+                return false;
68
+            }
69
+            else {
70
+                return order_lex(ordnungen.slice(1))(x.slice(1), y.slice(1));
71
+            }
72
+        }
73
+    });
74
+}
75
+/*
76
+    
77
+    +------+------+------+
78
+    |  xA  |  xB  |  xC  |
79
+    +------+------+------+
80
+    |  a2  |  b1  |  c3  |
81
+    |  a1  |  b1  |  c0  |
82
+    |  a1  |  b3  |  c2  |
83
+    |  a2  |  b2  |  c4  |
84
+    |  a1  |  b2  |  c1  |
85
+    |  a2  |  b4  |  c5  |
86
+    +------+------+------+
87
+    
88
+    +------+------+------+------+------+
89
+    |  xA  | xB:b1| xB:b2| xB:b3| xB:b4|
90
+    +------+------+------+------+------+
91
+    |  a1  |  c0  |  c1  |  c2  |  --  |
92
+    |  a2  |  c3  |  c4  |  --  |  c5  |
93
+    +------+------+------+------+------+
94
+    
95
+ */
96
+/**
97
+ * @author fenris
98
+ */
99
+function anordnen(_a) {
100
+    var daten = _a["daten"], namen_senkrecht = _a["senkrecht"], namen_waagerecht = _a["waagerecht"], _b = _a["kollationen"], kollationen = _b === void 0 ? {} : _b, _c = _a["ordnungen"], ordnungen = _c === void 0 ? {} : _c, _d = _a["feldsatz_kuerzen"], feldsatz_kuerzen = _d === void 0 ? true : _d, _e = _a["sortierung_propagieren"], sortierung_propagieren = _e === void 0 ? true : _e;
101
+    var kollation_satz = function (satz_x, satz_y, namen) {
102
+        return (namen.every(function (name) { return kollationen[name](satz_x[name], satz_y[name]); }));
103
+    };
104
+    var sammeln = function (namen) {
105
+        var liste = [];
106
+        // Heraussuchen
107
+        daten
108
+            .forEach(function (satz_urspruenglich) {
109
+            var satz_neu = {};
110
+            namen.forEach(function (name) { satz_neu[name] = satz_urspruenglich[name]; });
111
+            var vorhanden = liste.some(function (satz_alt) { return kollation_satz(satz_alt, satz_neu, namen); });
112
+            if (!vorhanden) {
113
+                liste.push(satz_neu);
114
+            }
115
+        });
116
+        // Sortieren
117
+        liste = mergesort(liste, function (x, y) {
118
+            var x_ = namen.map(function (name) { return x[name]; });
119
+            var y_ = namen.map(function (name) { return y[name]; });
120
+            var ordnung = order_lex(namen.map(function (name) { return ordnungen[name]; }));
121
+            return ordnung(x_, y_);
122
+        });
123
+        return liste;
124
+    };
125
+    // Kollationen und Ordnungen vervollständigen
126
+    {
127
+        ([].concat(namen_senkrecht).concat(namen_waagerecht))
128
+            .forEach(function (name) {
129
+            // Kollation ergänzen
130
+            if (!kollationen.hasOwnProperty(name)) {
131
+                kollationen[name] = (function (x, y) { return (x === y); });
132
+            }
133
+            // Ordnung ergänzen
134
+            if (!ordnungen.hasOwnProperty(name)) {
135
+                ordnungen[name] = (sortierung_propagieren ? (function (x, y) { return false; }) : (function (x, y) { return (x <= y); }));
136
+            }
137
+        });
138
+    }
139
+    var werte_senkrecht = sammeln(namen_senkrecht);
140
+    var werte_waagerecht = sammeln(namen_waagerecht);
141
+    var meta = {
142
+        "x": {},
143
+        "y": {}
144
+    };
145
+    werte_senkrecht.forEach(function (satz, nummer) { var name = ("y" + nummer.toFixed(0)); meta.y[name] = satz; });
146
+    werte_waagerecht.forEach(function (satz, nummer) { var name = ("x" + nummer.toFixed(0)); meta.x[name] = satz; });
147
+    var data = (Object.keys(meta.y)
148
+        .map(function (label_senkrecht) {
149
+        var satz_senkrecht = meta.y[label_senkrecht];
150
+        var satz_ergebnis = {};
151
+        // Kopf
152
+        {
153
+            var name_1 = "_";
154
+            satz_ergebnis[name_1] = label_senkrecht;
155
+        }
156
+        // Rumpf
157
+        {
158
+            Object.keys(meta.x)
159
+                .forEach(function (label_waagerecht) {
160
+                var satz_waagerecht = meta.x[label_waagerecht];
161
+                var saetze_feld = (daten
162
+                    .filter(function (satz_urspruenglich) { return (kollation_satz(satz_urspruenglich, satz_senkrecht, namen_senkrecht)
163
+                    &&
164
+                        kollation_satz(satz_urspruenglich, satz_waagerecht, namen_waagerecht)); })
165
+                    .map(function (satz_urspruenglich) {
166
+                    var satz_neu = {};
167
+                    Object.keys(satz_urspruenglich)
168
+                        .forEach(function (name) {
169
+                        if (!feldsatz_kuerzen
170
+                            ||
171
+                                (namen_senkrecht.every(function (name_) { return (name !== name_); })
172
+                                    &&
173
+                                        namen_waagerecht.every(function (name_) { return (name !== name_); }))) {
174
+                            satz_neu[name] = satz_urspruenglich[name];
175
+                        }
176
+                    });
177
+                    return satz_neu;
178
+                }));
179
+                satz_ergebnis[label_waagerecht] = saetze_feld;
180
+            });
181
+        }
182
+        return satz_ergebnis;
183
+    }));
184
+    return {
185
+        "meta": meta,
186
+        "data": data
187
+    };
188
+}
189
+/**
190
+ * @author fenris
191
+ */
192
+function xmlwrap(name, kern) {
193
+    return (("<" + name + ">") + kern + ("</" + name + ">") + "\n");
194
+}
195
+/**
196
+ * @author fenris
197
+ */
198
+function htmltable(titel, daten, _2d) {
199
+    if (_2d === void 0) { _2d = false; }
200
+    return (xmlwrap("table", (
201
+    // kopf
202
+    xmlwrap("thead", xmlwrap("tr", (titel
203
+        .map(function (titel_) { return xmlwrap("th", titel_); })
204
+        .join(""))))
205
+        +
206
+            // rumpf
207
+            xmlwrap("tbody", (daten
208
+                .map(function (satz) { return xmlwrap("tr", satz.map(function (feld, nummer) { return ((_2d && (nummer === 0))
209
+                ? xmlwrap("th", feld)
210
+                : xmlwrap("td", feld)); })
211
+                .join("")); })
212
+                .join(""))))));
213
+}
214
+/**
215
+ * @author kcf
216
+ */
217
+function definieren() {
218
+    return {
219
+        "name": "fold",
220
+        "befehle": [
221
+            {
222
+                "name": "fold",
223
+                "funktion": function (args) { return function (wert) {
224
+                    var senkrecht_ = ((args.length > 0)
225
+                        ? args.shift()
226
+                        : null);
227
+                    var waagerecht_ = ((args.length > 0)
228
+                        ? args.shift()
229
+                        : null);
230
+                    var senkrecht = ((senkrecht_ !== null)
231
+                        ? senkrecht_.split("/")
232
+                        : []);
233
+                    var waagerecht = ((waagerecht_ !== null)
234
+                        ? waagerecht_.split("/")
235
+                        : []);
236
+                    var tabelle = anordnen({
237
+                        "daten": wert,
238
+                        "senkrecht": senkrecht,
239
+                        "waagerecht": waagerecht
240
+                    });
241
+                    var tabelle_ = {
242
+                        "kopf": ([""].concat(Object.keys(tabelle.meta.x).map(function (label) { return (
243
+                        // JSON.stringify(tabelle.meta.x[label])
244
+                        objvals(tabelle.meta.x[label]).join("/")); }))),
245
+                        "rumpf": tabelle.data.map(function (satz) { return (Object.keys(satz).map(function (label) { return ((label === "_")
246
+                            // ? JSON.stringify(tabelle.meta.y[satz[label]])
247
+                            ? objvals(tabelle.meta.y[satz[label]]).join("/")
248
+                            // : JSON.stringify(satz[label])
249
+                            : (satz[label]
250
+                                .filter(function (x) { return (x["language_id"] === "flk"); })
251
+                                .map(function (x) { return x["words"].join(", "); })
252
+                                .join("; "))); })); })
253
+                    };
254
+                    var tabelle__ = htmltable(tabelle_.kopf, tabelle_.rumpf, true);
255
+                    var style = xmlwrap("style", "td {font-style: italic;}");
256
+                    return (style + tabelle__);
257
+                }; }
258
+            },
259
+        ]
260
+    };
261
+}
262
+exports.definieren = definieren;
... ...
@@ -0,0 +1,105 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author fenris
5
+ */
6
+function zeichenkette_zufaellig(laenge) {
7
+    var interpolieren = function (x, y, t) {
8
+        return (((1 - t) * x) + ((t) * y));
9
+    };
10
+    var zeichenkette = "";
11
+    for (var i = 0; i < laenge; ++i) {
12
+        var code = Math.floor(interpolieren(32, 128, Math.random()));
13
+        zeichenkette += String.fromCharCode(code);
14
+    }
15
+    return zeichenkette;
16
+}
17
+/**
18
+ * @author kcf
19
+ */
20
+function escape_(wert) {
21
+    return (wert
22
+        .replace(new RegExp("&", "g"), "&amp;")
23
+        .replace(new RegExp("<", "g"), "&lt;")
24
+        .replace(new RegExp(">", "g"), "&gt;")
25
+        .replace(new RegExp("\"", "g"), "&quot;")
26
+        .replace(new RegExp("'", "g"), "&#039;"));
27
+}
28
+/**
29
+ * @author kcf
30
+ */
31
+function squelch(zeichenkette, laenge) {
32
+    var stuecke = [];
33
+    var position = 0;
34
+    var ende = zeichenkette.length;
35
+    while (position < ende) {
36
+        var stueck = zeichenkette.slice(position, Math.min(ende, position + laenge));
37
+        stuecke.push(stueck);
38
+        position += laenge;
39
+    }
40
+    return ("<span class=\"ninja\">"
41
+        +
42
+            (stuecke
43
+                .map(function (stueck) { return ([
44
+                ("<span>" + escape_(zeichenkette_zufaellig(laenge)) + "</span>"),
45
+                ("<span>" + escape_(stueck) + "</span>"),
46
+            ]); })
47
+                .reduce(function (x, y) { return x.concat(y); }, [])
48
+                .join(""))
49
+        +
50
+            "</span>");
51
+}
52
+/**
53
+ * @author kcf
54
+ */
55
+function habitus(modifikatoren) {
56
+    if (!(modifikatoren
57
+        .some(function (modifikator) { return (((modifikator.art === "escape")
58
+        &&
59
+            (modifikator.angaben["ziel"] === "html"))
60
+        ||
61
+            ((modifikator.art === "squelch")
62
+                &&
63
+                    (modifikator.angaben["ziel"] === "html"))); }))) {
64
+        return modifikatoren.concat([{ "art": "escape", "angaben": { "ziel": "html" } }]);
65
+    }
66
+    else {
67
+        return modifikatoren;
68
+    }
69
+}
70
+/**
71
+ * @author kcf
72
+ */
73
+function definieren() {
74
+    return {
75
+        "name": "html",
76
+        "modifikatoren": {
77
+            "escape": [
78
+                {
79
+                    "name": "html",
80
+                    "funktion": function () { return function (wert) {
81
+                        return escape_(wert);
82
+                    }; }
83
+                },
84
+            ],
85
+            "squelch": [
86
+                {
87
+                    "name": "html",
88
+                    "funktion": function (args) { return function (wert) {
89
+                        var laenge = ((args.length > 0) ? parseInt(args.shift()) : 2);
90
+                        return squelch(wert, laenge);
91
+                    }; }
92
+                },
93
+            ]
94
+        },
95
+        "habiti": [
96
+            {
97
+                "name": "html",
98
+                "funktion": function (modifikatoren) {
99
+                    return habitus(modifikatoren);
100
+                }
101
+            },
102
+        ]
103
+    };
104
+}
105
+exports.definieren = definieren;
... ...
@@ -0,0 +1,27 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author kcf
5
+ */
6
+function encode(wert) {
7
+    return lib_code.json_encode(wert);
8
+}
9
+/**
10
+ * @author kcf
11
+ */
12
+function definieren() {
13
+    return {
14
+        "name": "json",
15
+        "modifikatoren": {
16
+            "encode": [
17
+                {
18
+                    "name": "json",
19
+                    "funktion": function () { return function (wert) {
20
+                        return encode(wert);
21
+                    }; }
22
+                },
23
+            ]
24
+        }
25
+    };
26
+}
27
+exports.definieren = definieren;
... ...
@@ -0,0 +1,52 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author kcf
5
+ */
6
+function escape_(wert) {
7
+    return (wert
8
+        .replace(new RegExp("\\\\", "g"), "\\\\")
9
+        .replace(new RegExp("%", "g"), "\\%")
10
+        .replace(new RegExp("&", "g"), "\\&"));
11
+}
12
+/**
13
+ * @author kcf
14
+ */
15
+function habitus(modifikatoren) {
16
+    if (!(modifikatoren
17
+        .some(function (modifikator) { return ((modifikator.art === "escape")
18
+        &&
19
+            (modifikator.angaben["ziel"] === "latex")); }))) {
20
+        return modifikatoren.concat([{ "art": "escape", "angaben": { "ziel": "latex" } }]);
21
+    }
22
+    else {
23
+        return modifikatoren;
24
+    }
25
+}
26
+/**
27
+ * @author kcf
28
+ */
29
+function definieren() {
30
+    return {
31
+        "name": "latex",
32
+        "modifikatoren": {
33
+            "escape": [
34
+                {
35
+                    "name": "latex",
36
+                    "funktion": function () { return function (wert) {
37
+                        return escape_(wert);
38
+                    }; }
39
+                },
40
+            ]
41
+        },
42
+        "habiti": [
43
+            {
44
+                "name": "latex",
45
+                "funktion": function (modifikatoren) {
46
+                    return habitus(modifikatoren);
47
+                }
48
+            },
49
+        ]
50
+    };
51
+}
52
+exports.definieren = definieren;
... ...
@@ -0,0 +1,52 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author kcf
5
+ */
6
+function escape_(wert) {
7
+    return (wert
8
+        .replace(new RegExp("\\\\", "g"), "\\\\")
9
+        .replace(new RegExp("%", "g"), "\\%")
10
+        .replace(new RegExp("&", "g"), "\\&"));
11
+}
12
+/**
13
+ * @author kcf
14
+ */
15
+function habitus(modifikatoren) {
16
+    if (!(modifikatoren
17
+        .some(function (modifikator) { return ((modifikator.art === "escape")
18
+        &&
19
+            (modifikator.angaben["ziel"] === "markdown")); }))) {
20
+        return modifikatoren.concat([{ "art": "escape", "angaben": { "ziel": "markdown" } }]);
21
+    }
22
+    else {
23
+        return modifikatoren;
24
+    }
25
+}
26
+/**
27
+ * @author kcf
28
+ */
29
+function definieren() {
30
+    return {
31
+        "name": "markdown",
32
+        "modifikatoren": {
33
+            "escape": [
34
+                {
35
+                    "name": "markdown",
36
+                    "funktion": function () { return function (wert) {
37
+                        return escape_(wert);
38
+                    }; }
39
+                },
40
+            ]
41
+        },
42
+        "habiti": [
43
+            {
44
+                "name": "markdown",
45
+                "funktion": function (modifikatoren) {
46
+                    return habitus(modifikatoren);
47
+                }
48
+            },
49
+        ]
50
+    };
51
+}
52
+exports.definieren = definieren;
... ...
@@ -0,0 +1,50 @@
1
+"use strict";
2
+exports.__esModule = true;
3
+/**
4
+ * @author kcf
5
+ */
6
+function escape_(wert) {
7
+    return (wert
8
+        .replace("\'", "\\\'"));
9
+}
10
+/**
11
+ * @author kcf
12
+ */
13
+function habitus(modifikatoren) {
14
+    if (!(modifikatoren
15
+        .some(function (modifikator) { return ((modifikator.art === "escape")
16
+        &&
17
+            (modifikator.angaben["ziel"] === "sql")); }))) {
18
+        return modifikatoren.concat([{ "art": "escape", "angaben": { "ziel": "sql" } }]);
19
+    }
20
+    else {
21
+        return modifikatoren;
22
+    }
23
+}
24
+/**
25
+ * @author kcf
26
+ */
27
+function definieren() {
28
+    return {
29
+        "name": "sql",
30
+        "modifikatoren": {
31
+            "escape": [
32
+                {
33
+                    "name": "sql",
34
+                    "funktion": function () { return function (wert) {
35
+                        return escape_(wert);
36
+                    }; }
37
+                },
38
+            ]
39
+        },
40
+        "habiti": [
41
+            {
42
+                "name": "sql",
43
+                "funktion": function (modifikatoren) {
44
+                    return habitus(modifikatoren);
45
+                }
46
+            },
47
+        ]
48
+    };
49
+}
50
+exports.definieren = definieren;
... ...
@@ -0,0 +1,10 @@
1
+#!/usr/bin/env sh
2
+
3
+path=$(pwd)/tools/vorlage
4
+nodejs ${path}/vorlage.js \
5
+	--modul=${path}/erweiterungen/json \
6
+	--modul=${path}/erweiterungen/base64 \
7
+	--modul=${path}/erweiterungen/html \
8
+	--modul=${path}/erweiterungen/fold \
9
+	$@
10
+
... ...
@@ -0,0 +1,869 @@
1
+;
2
+var lib_code;
3
+(function (lib_code) {
4
+    /**
5
+     * @author fenris
6
+     */
7
+    function base64_encode(x) {
8
+        return (new Buffer(x)).toString("base64");
9
+    }
10
+    lib_code.base64_encode = base64_encode;
11
+    /**
12
+     * @author fenris
13
+     */
14
+    function json_encode(x) {
15
+        return JSON.stringify(x);
16
+    }
17
+    lib_code.json_encode = json_encode;
18
+    /**
19
+     * @author fenris
20
+     */
21
+    function json_decode(x) {
22
+        return JSON.parse(x);
23
+    }
24
+    lib_code.json_decode = json_decode;
25
+})(lib_code || (lib_code = {}));
26
+var lib_objekt;
27
+(function (lib_objekt) {
28
+    /**
29
+     * @author fenris
30
+     */
31
+    function pfad_lesen(objekt, pfad) {
32
+        var schritte = ((pfad === "")
33
+            ? []
34
+            : pfad.split("."));
35
+        var position = objekt;
36
+        schritte
37
+            .some(function (schritt) {
38
+            if (position.hasOwnProperty(schritt)) {
39
+                position = position[schritt];
40
+                return false;
41
+            }
42
+            else {
43
+                position = null;
44
+                return true;
45
+            }
46
+        });
47
+        return position;
48
+    }
49
+    lib_objekt.pfad_lesen = pfad_lesen;
50
+})(lib_objekt || (lib_objekt = {}));
51
+var lib_datei;
52
+(function (lib_datei) {
53
+    /**
54
+     * @author fenris
55
+     */
56
+    function lesen(pfad) {
57
+        var _fs = require("fs");
58
+        var inhalt_ = _fs.readFileSync(pfad);
59
+        var inhalt = inhalt_.toString();
60
+        return inhalt;
61
+    }
62
+    lib_datei.lesen = lesen;
63
+})(lib_datei || (lib_datei = {}));
64
+var lib_regexp;
65
+(function (lib_regexp) {
66
+    /**
67
+     * @author fenris
68
+     */
69
+    function erstellen_symbol(symbol) {
70
+        return { "art": "symbol", "angaben": { "symbol": symbol } };
71
+    }
72
+    lib_regexp.erstellen_symbol = erstellen_symbol;
73
+    /**
74
+     * @author fenris
75
+     */
76
+    function erstellen_joker() {
77
+        return { "art": "joker", "angaben": {} };
78
+    }
79
+    lib_regexp.erstellen_joker = erstellen_joker;
80
+    /**
81
+     * @author fenris
82
+     */
83
+    function erstellen_sequenz(teile) {
84
+        return { "art": "sequenz", "angaben": { "teile": teile } };
85
+    }
86
+    lib_regexp.erstellen_sequenz = erstellen_sequenz;
87
+    /**
88
+     * @author fenris
89
+     */
90
+    function erstellen_alternative(teile) {
91
+        return { "art": "alternative", "angaben": { "teile": teile } };
92
+    }
93
+    lib_regexp.erstellen_alternative = erstellen_alternative;
94
+    /**
95
+     * @author fenris
96
+     */
97
+    function erstellen_wiederholung(subjekt, min_, max_) {
98
+        return { "art": "wiederholung", "angaben": { "subjekt": subjekt, "min": min_, "max": max_ } };
99
+    }
100
+    lib_regexp.erstellen_wiederholung = erstellen_wiederholung;
101
+    /**
102
+     * @author fenris
103
+     */
104
+    function erstellen_klasse(modus, teile) {
105
+        return { "art": "klasse", "angaben": { "modus": modus, "teile": teile } };
106
+    }
107
+    lib_regexp.erstellen_klasse = erstellen_klasse;
108
+    /**
109
+     * @author fenris
110
+     */
111
+    function erstellen_gruppe(kern, greedy) {
112
+        if (greedy === void 0) { greedy = false; }
113
+        return { "art": "gruppe", "angaben": { "kern": kern, "greedy": greedy } };
114
+    }
115
+    lib_regexp.erstellen_gruppe = erstellen_gruppe;
116
+    /**
117
+     * @author fenris
118
+     */
119
+    function umwandeln(ausdruck, tiefe) {
120
+        if (tiefe === void 0) { tiefe = 0; }
121
+        var kern = null;
122
+        switch (ausdruck.art) {
123
+            case "symbol": {
124
+                kern = (ausdruck.angaben["symbol"]
125
+                    .replace("?", "\\?")
126
+                    .replace("+", "\\+")
127
+                    .replace("*", "\\*")
128
+                    .replace(".", "\\.")
129
+                    .replace("\\", "\\\\")
130
+                    .replace("(", "\\(")
131
+                    .replace(")", "\\)")
132
+                    .replace("[", "\\[")
133
+                    .replace("]", "\\]")
134
+                    .replace("{", "\\{")
135
+                    .replace("}", "\\}"));
136
+                break;
137
+            }
138
+            case "joker": {
139
+                kern = ".";
140
+                break;
141
+            }
142
+            case "sequenz": {
143
+                kern = (ausdruck.angaben["teile"]
144
+                    .map(function (x) { return umwandeln(x, tiefe + 1); })
145
+                    .join(""));
146
+                break;
147
+            }
148
+            case "alternative": {
149
+                kern = (ausdruck.angaben["teile"]
150
+                    .map(function (x) { return umwandeln(x, tiefe + 1); })
151
+                    .join("|"));
152
+                break;
153
+            }
154
+            case "wiederholung": {
155
+                var nachsatz = void 0;
156
+                if (((ausdruck.angaben["min"] === null)
157
+                    ||
158
+                        (ausdruck.angaben["min"] === 0))
159
+                    &&
160
+                        (ausdruck.angaben["max"] === 1)) {
161
+                    nachsatz = "?";
162
+                }
163
+                else if (((ausdruck.angaben["min"] === null)
164
+                    ||
165
+                        (ausdruck.angaben["min"] === 0))
166
+                    &&
167
+                        (ausdruck.angaben["max"] === null)) {
168
+                    nachsatz = "*";
169
+                }
170
+                else if (((ausdruck.angaben["min"] === 1))
171
+                    &&
172
+                        (ausdruck.angaben["max"] === null)) {
173
+                    nachsatz = "+";
174
+                }
175
+                else {
176
+                    nachsatz = ("{" + ausdruck.angaben["min"].toFixed(0) + "," + ausdruck.angaben["max"].toFixed(0) + "}");
177
+                }
178
+                kern = (umwandeln(ausdruck.angaben["subjekt"], tiefe + 1) + nachsatz);
179
+                break;
180
+            }
181
+            case "klasse": {
182
+                kern = ("["
183
+                    + (ausdruck.angaben["modus"] ? "" : "^")
184
+                    + (ausdruck.angaben["teile"]
185
+                        .map(function (x) { return umwandeln(x, tiefe + 1); })
186
+                        .join(""))
187
+                    + "]");
188
+                break;
189
+            }
190
+            case "gruppe": {
191
+                kern = ("("
192
+                    + umwandeln(ausdruck.angaben["kern"], tiefe + 1)
193
+                    + (ausdruck.angaben["greedy"] ? "?" : "")
194
+                    + ")");
195
+                break;
196
+            }
197
+            default: {
198
+                kern = "FCKU";
199
+                break;
200
+            }
201
+        }
202
+        return ((tiefe === 0)
203
+            ? ("" + kern + "")
204
+            : kern);
205
+    }
206
+    lib_regexp.umwandeln = umwandeln;
207
+    /**
208
+     * @author fenris
209
+     */
210
+    function suchen_umgewandelt(ausdruck_, kette) {
211
+        var regexp = (new RegExp(ausdruck_, "g"));
212
+        var funde = [];
213
+        while (true) {
214
+            var ergebnis = regexp.exec(kette);
215
+            if (ergebnis === null) {
216
+                break;
217
+            }
218
+            else {
219
+                funde.push({ "bereich": ergebnis[0], "kern": ergebnis[1] });
220
+            }
221
+        }
222
+        return funde;
223
+    }
224
+    lib_regexp.suchen_umgewandelt = suchen_umgewandelt;
225
+    /**
226
+     * @author fenris
227
+     */
228
+    function suchen(ausdruck, kette) {
229
+        var ausdruck_ = umwandeln(ausdruck);
230
+        // console.info(ausdruck_ + "\n")
231
+        return suchen_umgewandelt(ausdruck_, kette);
232
+    }
233
+    lib_regexp.suchen = suchen;
234
+})(lib_regexp || (lib_regexp = {}));
235
+var lib_args;
236
+(function (lib_args) {
237
+    /**
238
+     * @author fenris
239
+     */
240
+    var muster_positioniert = (new RegExp("(.*)"));
241
+    var muster_benannt_lang = (new RegExp("--([^=]+)(?:=(.+))?"));
242
+    /**
243
+     * @author fenris
244
+     */
245
+    function zerlegen(kette) {
246
+        var ergebnis = {
247
+            "benannt": {},
248
+            "positioniert": []
249
+        };
250
+        var teile = (kette
251
+            .split(new RegExp("\\s", "g"))
252
+            .filter(function (x) { return (x.length > 0); }));
253
+        teile
254
+            .forEach(function (teil) {
255
+            // benannt
256
+            {
257
+                var foo = muster_benannt_lang.exec(teil);
258
+                if (foo !== null) {
259
+                    var name_1 = foo[1];
260
+                    var wert = foo[2];
261
+                    if (!ergebnis.benannt.hasOwnProperty(name_1))
262
+                        ergebnis.benannt[name_1] = [];
263
+                    ergebnis.benannt[name_1].push(wert);
264
+                    return;
265
+                }
266
+            }
267
+            // positioniert
268
+            {
269
+                var foo = muster_positioniert.exec(teil);
270
+                if (foo !== null) {
271
+                    var wert = foo[1];
272
+                    ergebnis.positioniert.push(wert);
273
+                    return;
274
+                }
275
+            }
276
+        });
277
+        return ergebnis;
278
+    }
279
+    /**
280
+     * @author fenris
281
+     */
282
+    function erzeugen(liste) {
283
+        return liste;
284
+    }
285
+    lib_args.erzeugen = erzeugen;
286
+    /**
287
+     * @author fenris
288
+     */
289
+    function parsen(argdesc, args) {
290
+        var args_ = zerlegen(args.join(" "));
291
+        var args__ = {};
292
+        Object.keys(argdesc)
293
+            .forEach(function (id) {
294
+            var eintrag = argdesc[id];
295
+            switch (eintrag["art"]) {
296
+                case "positioniert": {
297
+                    if (args_.positioniert.length > eintrag["index"]) {
298
+                        var rawval = args_.positioniert[eintrag["index"]];
299
+                        var entnahme = (eintrag.hasOwnProperty("entnahme")
300
+                            ? eintrag["entnahme"]
301
+                            : (function (x) { return x; }));
302
+                        var wert = entnahme(rawval);
303
+                        args__[id] = wert;
304
+                    }
305
+                    else {
306
+                        throw (new Error("zu wenig positionierte Argumente übergeben"));
307
+                    }
308
+                    break;
309
+                }
310
+                case "benannt": {
311
+                    var rawvals = (args_.benannt.hasOwnProperty(eintrag["kennung"])
312
+                        ? args_.benannt[eintrag["kennung"]]
313
+                        : []);
314
+                    var entnahme = (eintrag.hasOwnProperty("entnahme")
315
+                        ? eintrag["entnahme"]
316
+                        : (function (x) { return x; }));
317
+                    var wert = entnahme(rawvals);
318
+                    args__[id] = wert;
319
+                    break;
320
+                }
321
+                default: {
322
+                    console.warn("unbehandelt");
323
+                    break;
324
+                }
325
+            }
326
+        });
327
+        return args__;
328
+    }
329
+    lib_args.parsen = parsen;
330
+    /**
331
+     * @author fenris
332
+     */
333
+    function hilfe(argdesc) {
334
+        /*
335
+        Object.keys(argdesc)
336
+        .forEach(
337
+            
338
+        )
339
+         */
340
+        return "SYNTAX: vorlage.js <pfad-zur-vorlagedatei> [--habitus=<habitus>] [--zeichen-auf=<zeichen-auf>] [--zeichen-zu=<zeichen-zu>] [--modul=<pfad-zu-modul>] [--modul=<pfad-zu-modul>] [--modul=<pfad-zu-modul>] …";
341
+    }
342
+    lib_args.hilfe = hilfe;
343
+})(lib_args || (lib_args = {}));
344
+var mod_kern;
345
+(function (mod_kern) {
346
+    /**
347
+     * @author fenris
348
+     */
349
+    var _befehle = {};
350
+    /**
351
+     * @author fenris
352
+     */
353
+    var _modifikatoren_encode = {};
354
+    /**
355
+     * @author fenris
356
+     */
357
+    var _modifikatoren_escape = {};
358
+    /**
359
+     * @author fenris
360
+     */
361
+    var _modifikatoren_squelch = {};
362
+    /**
363
+     * @author fenris
364
+     */
365
+    var _habiti = {};
366
+    /**
367
+     * @author fenris
368
+     */
369
+    var _erweiterungen = {};
370
+    /**
371
+     * @author fenris
372
+     */
373
+    function befehl_hinzufuegen(name, funktion) {
374
+        _befehle[name] = funktion;
375
+    }
376
+    mod_kern.befehl_hinzufuegen = befehl_hinzufuegen;
377
+    /**
378
+     * @author fenris
379
+     */
380
+    function modifikator_id_ermitteln(weg) {
381
+        return weg.join(".");
382
+    }
383
+    /**
384
+     * @author fenris
385
+     */
386
+    function modifikator_hinzufuegen_escape(name, funktion) {
387
+        _modifikatoren_escape[name] = funktion;
388
+    }
389
+    mod_kern.modifikator_hinzufuegen_escape = modifikator_hinzufuegen_escape;
390
+    /**
391
+     * @author fenris
392
+     */
393
+    function modifikator_hinzufuegen_squelch(name, funktion) {
394
+        _modifikatoren_squelch[name] = funktion;
395
+    }
396
+    mod_kern.modifikator_hinzufuegen_squelch = modifikator_hinzufuegen_squelch;
397
+    /**
398
+     * @author fenris
399
+     */
400
+    function modifikator_hinzufuegen_encode(name, funktion) {
401
+        _modifikatoren_encode[name] = funktion;
402
+    }
403
+    mod_kern.modifikator_hinzufuegen_encode = modifikator_hinzufuegen_encode;
404
+    /**
405
+     * @author fenris
406
+     */
407
+    function habitus_hinzufuegen(name, funktion) {
408
+        _habiti[name] = funktion;
409
+    }
410
+    mod_kern.habitus_hinzufuegen = habitus_hinzufuegen;
411
+    /**
412
+     * @author fenris
413
+     */
414
+    function erweiterung_erfassen(name, einrichtung) {
415
+        _erweiterungen[name] = einrichtung;
416
+    }
417
+    mod_kern.erweiterung_erfassen = erweiterung_erfassen;
418
+    /**
419
+     * @author fenris
420
+     */
421
+    function erweiterung_laden(name) {
422
+        if (_erweiterungen.hasOwnProperty(name)) {
423
+            _erweiterungen[name]();
424
+        }
425
+        else {
426
+            var nachricht = ("keine Erweiterung namens '" + name + "' gefunden");
427
+            throw (new Error(nachricht));
428
+        }
429
+    }
430
+    mod_kern.erweiterung_laden = erweiterung_laden;
431
+    /**
432
+     * @author kcf
433
+     */
434
+    function erweiterung_einrichten(raw) {
435
+        erweiterung_erfassen(raw["name"], function () {
436
+            // befehle
437
+            {
438
+                (raw["befehle"] || [])
439
+                    .forEach(function (raw_cmd) {
440
+                    befehl_hinzufuegen(raw_cmd["name"], raw_cmd["funktion"]);
441
+                });
442
+            }
443
+            // modifikator_encode
444
+            {
445
+                if (raw.hasOwnProperty("modifikatoren")
446
+                    &&
447
+                        raw["modifikatoren"].hasOwnProperty("encode")) {
448
+                    raw["modifikatoren"]["encode"]
449
+                        .forEach(function (raw_mod) {
450
+                        modifikator_hinzufuegen_encode(raw_mod["name"], raw_mod["funktion"]);
451
+                    });
452
+                }
453
+                else {
454
+                    // nichts tun
455
+                }
456
+            }
457
+            // modifikator_escape
458
+            {
459
+                if (raw.hasOwnProperty("modifikatoren")
460
+                    &&
461
+                        raw["modifikatoren"].hasOwnProperty("escape")) {
462
+                    raw["modifikatoren"]["escape"]
463
+                        .forEach(function (raw_mod) {
464
+                        modifikator_hinzufuegen_escape(raw_mod["name"], raw_mod["funktion"]);
465
+                    });
466
+                }
467
+                else {
468
+                    // nichts tun
469
+                }
470
+            }
471
+            // modifikator_squelch
472
+            {
473
+                if (raw.hasOwnProperty("modifikatoren")
474
+                    &&
475
+                        raw["modifikatoren"].hasOwnProperty("squelch")) {
476
+                    raw["modifikatoren"]["squelch"]
477
+                        .forEach(function (raw_mod) {
478
+                        modifikator_hinzufuegen_squelch(raw_mod["name"], raw_mod["funktion"]);
479
+                    });
480
+                }
481
+                else {
482
+                    // nichts tun
483
+                }
484
+            }
485
+            // modifikator_habitus
486
+            {
487
+                if (raw.hasOwnProperty("habiti")) {
488
+                    raw["habiti"]
489
+                        .forEach(function (raw_hab) {
490
+                        habitus_hinzufuegen(raw_hab["name"], raw_hab["funktion"]);
491
+                    });
492
+                }
493
+                else {
494
+                    // nichts tun
495
+                }
496
+            }
497
+        });
498
+        // erweiterung_laden(raw["name"]);
499
+    }
500
+    mod_kern.erweiterung_einrichten = erweiterung_einrichten;
501
+    /**
502
+     * @author fenris
503
+     */
504
+    function befehl_show(angaben, vardesc, modifikatoren, habitus) {
505
+        var wert = lib_objekt.pfad_lesen(angaben, vardesc);
506
+        if (!(wert === null)) {
507
+            // habitus
508
+            {
509
+                if (!(habitus === null)) {
510
+                    if (_habiti.hasOwnProperty(habitus)) {
511
+                        modifikatoren = _habiti[habitus](modifikatoren);
512
+                    }
513
+                    else {
514
+                        var nachricht = ("-- unbekannter Habitus \"" + habitus + "\"");
515
+                        console.warn(nachricht + "\n");
516
+                    }
517
+                }
518
+                else {
519
+                    // nichts tun
520
+                }
521
+            }
522
+            // modifikatoren
523
+            {
524
+                modifikatoren
525
+                    .forEach(function (modifikator) {
526
+                    switch (modifikator.art) {
527
+                        case "format": {
528
+                            var nachricht = "-- Formatierung nicht korrekt implemtiert";
529
+                            console.error(nachricht + "\n");
530
+                            var format = modifikator.angaben["format"];
531
+                            // wert = (format_ % wert)
532
+                            wert = String(wert);
533
+                            break;
534
+                        }
535
+                        case "encode": {
536
+                            var kodierung = modifikator.angaben["kodierung"];
537
+                            if (_modifikatoren_encode.hasOwnProperty(kodierung)) {
538
+                                wert = _modifikatoren_encode[kodierung](modifikator.angaben["argumente"])(wert);
539
+                            }
540
+                            else {
541
+                                var nachricht = ("-- unbekannte Kodierung \"" + kodierung + "\"");
542
+                                console.warn(nachricht + "\n");
543
+                            }
544
+                            break;
545
+                        }
546
+                        case "escape": {
547
+                            var ziel = modifikator.angaben["ziel"];
548
+                            if (_modifikatoren_escape.hasOwnProperty(ziel)) {
549
+                                wert = _modifikatoren_escape[ziel](modifikator.angaben["argumente"])(wert);
550
+                            }
551
+                            else {
552
+                                var nachricht = ("-- unbekanntes Ziel \"" + ziel + "\"");
553
+                                console.warn(nachricht + "\n");
554
+                            }
555
+                            break;
556
+                        }
557
+                        case "squelch": {
558
+                            var ziel = modifikator.angaben["ziel"];
559
+                            if (_modifikatoren_squelch.hasOwnProperty(ziel)) {
560
+                                wert = _modifikatoren_squelch[ziel](modifikator.angaben["argumente"])(wert);
561
+                            }
562
+                            else {
563
+                                var nachricht = ("-- unbekanntes Ziel \"" + ziel + "\"");
564
+                                console.warn(nachricht + "\n");
565
+                            }
566
+                            break;
567
+                        }
568
+                        default: {
569
+                            var nachricht = ("-- unbekannter Modifikator \"" + modifikator.art + "\"");
570
+                            console.warn(nachricht + "\n");
571
+                            break;
572
+                        }
573
+                    }
574
+                });
575
+            }
576
+            if (!(typeof (wert) === "string")) {
577
+                wert = String(wert);
578
+                var nachricht = ("-- implizite Konversion zu Zeichenkette bei \"" + vardesc + "\"");
579
+                console.warn(nachricht + "\n");
580
+            }
581
+            else {
582
+                // nichts tun
583
+            }
584
+            return wert;
585
+        }
586
+        else {
587
+            var nachricht = ("-- fehlende Angabe: \"" + vardesc + "\"");
588
+            console.warn(nachricht + "\n");
589
+            return null;
590
+        }
591
+    }
592
+    /**
593
+     * @author fenris
594
+     */
595
+    function befehl_dataurl(angaben, vardesc, mimetype) {
596
+        var wert = lib_objekt.pfad_lesen(angaben, vardesc);
597
+        if (!(wert === null)) {
598
+            wert = ("data" + ":" + mimetype + ";" + "base64" + "," + lib_code.base64_encode(wert));
599
+            return wert;
600
+        }
601
+        else {
602
+            var nachricht = ("-- fehlende Angabe: \"" + vardesc + "\"");
603
+            console.warn(nachricht + "\n");
604
+            return null;
605
+        }
606
+    }
607
+    /**
608
+     * @author fenris
609
+     */
610
+    function befehl_call(einstellungen, angaben, vardesc, pfad) {
611
+        var wert = lib_objekt.pfad_lesen(angaben, vardesc);
612
+        if (!(wert === null)) {
613
+            var angaben_ = wert;
614
+            var ergebnis = ausfuellen(einstellungen, pfad, angaben_);
615
+            return ergebnis;
616
+        }
617
+        else {
618
+            var nachricht = ("-- fehlende Angabe: \"" + vardesc + "\"");
619
+            console.warn(nachricht + "\n");
620
+            return null;
621
+        }
622
+    }
623
+    /**
624
+     * @author fenris
625
+     */
626
+    function befehl_branch(einstellungen, angaben, vardesc_bedingung, pfad_falls, vardesc_falls, pfad_sonst, vardesc_sonst) {
627
+        var wert = lib_objekt.pfad_lesen(angaben, vardesc_bedingung);
628
+        if (!(wert === null)) {
629
+            if (typeof (wert) === "boolean") {
630
+                var wert_ = (wert);
631
+                var pfad_ = void 0;
632
+                var angaben_ = void 0;
633
+                if (wert_) {
634
+                    pfad_ = pfad_falls;
635
+                    angaben_ = angaben[vardesc_falls];
636
+                }
637
+                else {
638
+                    pfad_ = pfad_sonst;
639
+                    angaben_ = angaben[vardesc_sonst];
640
+                }
641
+                var ergebnis = ausfuellen(einstellungen, pfad_, angaben_);
642
+                return ergebnis;
643
+            }
644
+            else {
645
+                var nachricht = ("-- kein Boolean: \"" + vardesc_bedingung + "\"");
646
+                console.warn(nachricht + "\n");
647
+                return null;
648
+            }
649
+        }
650
+        else {
651
+            var nachricht = ("-- fehlende Angabe: \"" + vardesc_bedingung + "\"");
652
+            console.warn(nachricht + "\n");
653
+            return null;
654
+        }
655
+    }
656
+    /**
657
+     * @author fenris
658
+     */
659
+    function befehl_list(einstellungen, angaben, vardesc, pfad_) {
660
+        var wert = lib_objekt.pfad_lesen(angaben, vardesc);
661
+        if (!(wert === null)) {
662
+            if ((typeof (wert) === "object") && (wert instanceof Array)) {
663
+                var ergebnis = (wert
664
+                    .map(function (angaben_) { return (ausfuellen(einstellungen, pfad_, angaben_)); })
665
+                    .join(""));
666
+                return ergebnis;
667
+            }
668
+            else {
669
+                var nachricht = ("-- kein Array: \"" + vardesc + "\"");
670
+                console.warn(nachricht + "\n");
671
+                return null;
672
+            }
673
+        }
674
+        else {
675
+            var nachricht = ("-- fehlende Angabe: \"" + vardesc + "\"");
676
+            console.warn(nachricht + "\n");
677
+            return null;
678
+        }
679
+    }
680
+    /**
681
+     * @author fenris
682
+     */
683
+    function ausfuellen(einstellungen, pfad, angaben) {
684
+        var vorlage = lib_datei.lesen(pfad);
685
+        var funde = lib_regexp.suchen_umgewandelt(einstellungen["ausdruck_umgewandelt"], vorlage);
686
+        funde
687
+            .forEach(function (_a) {
688
+            var bereich = _a["bereich"], kern = _a["kern"];
689
+            // let fund : string = (einstellungen["zeichen_auf"] + kern + einstellungen["zeichen_zu"]);
690
+            var teile = kern.split("|").map(function (x) { return x.split(":"); });
691
+            var befehl = teile.shift();
692
+            var art = befehl.shift();
693
+            switch (art) {
694
+                case "show": {
695
+                    var vardesc = befehl.shift();
696
+                    var modifikatoren_1 = [];
697
+                    teile
698
+                        .forEach(function (teil) {
699
+                        var art = teil.shift();
700
+                        switch (art) {
701
+                            case "format": {
702
+                                var format = teil.shift();
703
+                                modifikatoren_1.push({ "art": art, "angaben": { "format": format } });
704
+                                break;
705
+                            }
706
+                            case "encode": {
707
+                                var kodierung = teil.shift();
708
+                                modifikatoren_1.push({ "art": art, "angaben": { "kodierung": kodierung } });
709
+                                break;
710
+                            }
711
+                            case "escape": {
712
+                                var ziel = teil.shift();
713
+                                modifikatoren_1.push({ "art": art, "angaben": { "ziel": ziel, "argumente": teil } });
714
+                                break;
715
+                            }
716
+                            case "squelch": {
717
+                                var ziel = teil.shift();
718
+                                modifikatoren_1.push({ "art": art, "angaben": { "ziel": ziel, "argumente": teil } });
719
+                                break;
720
+                            }
721
+                            default: {
722
+                                var nachricht = ("-- unbekannter Modifikator \"" + teil + "\"");
723
+                                console.warn(nachricht + "\n");
724
+                            }
725
+                        }
726
+                    });
727
+                    var ersetzung = befehl_show(angaben, vardesc, modifikatoren_1, einstellungen["habitus"]);
728
+                    if (!(ersetzung === null))
729
+                        vorlage = vorlage.replace(bereich, ersetzung);
730
+                    break;
731
+                }
732
+                case "dataurl": {
733
+                    var vardesc = befehl.shift();
734
+                    var mimetype = ((befehl.length > 0) ? befehl.shift() : "text/plain");
735
+                    var ersetzung = befehl_dataurl(angaben, vardesc, mimetype);
736
+                    if (!(ersetzung === null))
737
+                        vorlage = vorlage.replace(bereich, ersetzung);
738
+                    break;
739
+                }
740
+                case "call": {
741
+                    var vardesc = befehl.shift();
742
+                    var pfad_ = befehl.shift();
743
+                    var ersetzung = befehl_call(einstellungen, angaben, vardesc, pfad_);
744
+                    if (!(ersetzung === null))
745
+                        vorlage = vorlage.replace(bereich, ersetzung);
746
+                    break;
747
+                }
748
+                case "branch": {
749
+                    var vardesc_bedingung = befehl.shift();
750
+                    var pfad_falls = befehl.shift();
751
+                    var vardesc_falls = befehl.shift();
752
+                    var pfad_sonst = befehl.shift();
753
+                    var vardesc_sonst = befehl.shift();
754
+                    var ersetzung = befehl_branch(einstellungen, angaben, vardesc_bedingung, pfad_falls, vardesc_falls, pfad_sonst, vardesc_sonst);
755
+                    if (!(ersetzung === null))
756
+                        vorlage = vorlage.replace(bereich, ersetzung);
757
+                    break;
758
+                }
759
+                case "list": {
760
+                    var vardesc = befehl.shift();
761
+                    var pfad_ = befehl.shift();
762
+                    var ersetzung = befehl_list(einstellungen, angaben, vardesc, pfad_);
763
+                    if (!(ersetzung === null))
764
+                        vorlage = vorlage.replace(bereich, ersetzung);
765
+                    break;
766
+                }
767
+                default: {
768
+                    if (_befehle.hasOwnProperty(art)) {
769
+                        var vardesc = befehl.shift();
770
+                        var wert = lib_objekt.pfad_lesen(angaben, vardesc);
771
+                        var ersetzung = _befehle[art](befehl)(wert);
772
+                        if (!(ersetzung === null))
773
+                            vorlage = vorlage.replace(bereich, ersetzung);
774
+                    }
775
+                    else {
776
+                        var nachricht = ("-- unbehandelte Art \"" + art + "\"");
777
+                        // raise ValueError(nachricht)
778
+                        console.warn(nachricht + "\n");
779
+                    }
780
+                    break;
781
+                }
782
+            }
783
+        });
784
+        return vorlage;
785
+    }
786
+    /**
787
+     * @author fenris
788
+     */
789
+    function anwenden(einstellungen, pfad, angaben) {
790
+        var ausdruck_umgewandelt = (lib_regexp.umwandeln(lib_regexp.erstellen_sequenz([]
791
+            .concat(einstellungen["zeichen_auf"].split("").map(function (x) { return lib_regexp.erstellen_symbol(x); }))
792
+            .concat([
793
+            lib_regexp.erstellen_gruppe(lib_regexp.erstellen_wiederholung(lib_regexp.erstellen_klasse(false, einstellungen["zeichen_zu"].split("").map(function (x) { return lib_regexp.erstellen_symbol(x); })), 1, null))
794
+        ])
795
+            .concat(einstellungen["zeichen_zu"].split("").map(function (x) { return lib_regexp.erstellen_symbol(x); })))));
796
+        einstellungen["ausdruck_umgewandelt"] = ausdruck_umgewandelt;
797
+        var pfad_teile = pfad.split("/");
798
+        var dirname = ((pfad_teile.length === 1) ? "." : pfad_teile.slice(0, -1).join("/"));
799
+        var basename = pfad_teile.slice(-1)[0];
800
+        process.chdir(dirname);
801
+        var ergebnis = ausfuellen(einstellungen, basename, angaben);
802
+        return ergebnis;
803
+    }
804
+    mod_kern.anwenden = anwenden;
805
+})(mod_kern || (mod_kern = {}));
806
+/**
807
+ * @author fenris
808
+ */
809
+function haupt(args) {
810
+    var argdesc = lib_args.erzeugen({
811
+        "pfad": {
812
+            "art": "positioniert",
813
+            "index": 0
814
+        },
815
+        "habitus": {
816
+            "art": "benannt",
817
+            "kennung": "habitus",
818
+            "entnahme": function (x) { return ((x.length > 0)
819
+                ? x.slice(-1)[0]
820
+                : null); }
821
+        },
822
+        "zeichen_auf": {
823
+            "art": "benannt",
824
+            "kennung": "zeichen-auf",
825
+            "entnahme": function (x) { return ((x.length > 0)
826
+                ? x.slice(-1)[0]
827
+                : "{{"); }
828
+        },
829
+        "zeichen_zu": {
830
+            "art": "benannt",
831
+            "kennung": "zeichen-zu",
832
+            "entnahme": function (x) { return ((x.length > 0)
833
+                ? x.slice(-1)[0]
834
+                : "}}"); }
835
+        },
836
+        "modul": {
837
+            "art": "benannt",
838
+            "kennung": "modul"
839
+        }
840
+    });
841
+    var args_;
842
+    try {
843
+        args_ = lib_args.parsen(argdesc, args);
844
+    }
845
+    catch (exception) {
846
+        console.error(lib_args.hilfe(argdesc));
847
+        process.exit(-1);
848
+    }
849
+    // Module laden
850
+    {
851
+        (args_["modul"])
852
+            .forEach(function (pfad_) {
853
+            var erweiterung = require(/*"./" + */ pfad_);
854
+            var definition = erweiterung.definieren();
855
+            mod_kern.erweiterung_einrichten(definition);
856
+            mod_kern.erweiterung_laden(definition["name"]);
857
+        });
858
+    }
859
+    // let inhalt : string; process.stdin.resume(); inhalt = lib_datei.lesen(process.stdin.fd); process.stdin.pause();
860
+    var inhalt = lib_datei.lesen("/dev/stdin");
861
+    var angaben = lib_code.json_decode(inhalt);
862
+    var ergebnis = mod_kern.anwenden({
863
+        "zeichen_auf": args_["zeichen_auf"],
864
+        "zeichen_zu": args_["zeichen_zu"],
865
+        "habitus": args_["habitus"]
866
+    }, args_["pfad"], angaben);
867
+    console.info(ergebnis);
868
+}
869
+haupt(process.argv.slice(2));
0 870