Character and string types/de: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Character and string types/de
| Old | New | Line | |
|---|---|---|---|
| 1 | + | FreePascal unterstützt verschiedene Arten von Zeichen und Zeichenfolgen. Sie reichen von einzelnen ANSI-Zeichen bis hin zu Unicode-Zeichenfolgen und beinhalten auch Zeigertypen. Unterschiede gelten auch für Codierungen und Referenzzählungen. | |
| 2 | + | ||
| 3 | + | ## AnsiChar | |
| 4 | + | ||
| 5 | + | Eine Variable vom Typ **AnsiChar**, auch **Char** genannt, ist genau 1 Byte groß und enthält ein ANSI-Zeichen. | |
| 6 | + | ||
| 7 | + | | | | |
| 8 | + | |-----| | |
| 9 | + | | a | | |
| 10 | + | ||
| 11 | + | #### Referenz | |
| 12 | + | ||
| 13 | + | - [[doc:ref/refsu7.html|FPC AnsiChar documentation]] | |
| 14 | + | - [[Char/de|Verwendung Char]] | |
| 15 | + | ||
| 16 | + | ## WideChar | |
| 17 | + | ||
| 18 | + | Eine Variable vom Typ **WideChar**, auch als **UnicodeChar** bezeichnet, ist genau 2 Bytes groß und beinhaltet ein (oder ein Teil von einem) [[LCL Unicode Support/de|Unicode]]-Zeichen in UTF-16 codiert. Hinweis: Es ist nicht realisierbar alle Unicode-Codepunkte mit 2 Byte zu codieren. Es ist daher möglich, dass einzelnen Codepunkt mit 2 WideChars codiert sind. | |
| 19 | + | ||
| 20 | + | | | | | |
| 21 | + | |-----|-----| | |
| 22 | + | | | a | | |
| 23 | + | ||
| 24 | + | #### Referenz | |
| 25 | + | ||
| 26 | + | - [[doc:ref/refsu8.html|FPC WideChar documentation]] | |
| 27 | + | - [Wikipedia UTF-16](http://de.wikipedia.org/wiki/UTF-16) | |
| 28 | + | - [[doc:rtl/system/unicodechar.html|RTL UnicodeChar documentation]] | |
| 29 | + | - [[Widechar/de|Verwendung WideChar]] | |
| 30 | + | ||
| 31 | + | ## Array of Char | |
| 32 | + | ||
| 33 | + | Frühe Pascal-Implementierungen, die vor 1978 in Gebrauch waren, unterstützten keinen Stringtyp (mit Ausnahme von String-Konstanten). Die einzige Möglichkeit zur Speicherung einer Zeichenfolgen in einer Variablen war die Verwendung eines Array of Char. Dieser Ansatz hat viele Nachteile und wird nicht mehr empfohlen. Er wird jedoch immer noch unterstützt, um die Abwärtskompatibilität mit alten Code zu gewährleisten. | |
| 34 | + | ||
| 35 | + | ### Statisches Array of Char | |
| 36 | + | ||
| 37 | + | ``` pascal | |
| 38 | + | type | |
| 39 | + | TOldString4 = array[0..3] of char; | |
| 40 | + | var | |
| 41 | + | aOldString4: TOldString4; | |
| 42 | + | begin | |
| 43 | + | aOldString4[0] := 'a'; | |
| 44 | + | aOldString4[1] := 'b'; | |
| 45 | + | aOldString4[2] := 'c'; | |
| 46 | + | aOldString4[3] := 'd'; | |
| 47 | + | end; | |
| 48 | + | ``` | |
| 49 | + | ||
| 50 | + | The statische Array of Char hat nun den Inhalt: | |
| 51 | + | ||
| 52 | + | | | | | | | |
| 53 | + | |-----|-----|-----|-----| | |
| 54 | + | | a | b | c | d | | |
| 55 | + | ||
| 56 | + | > **Note:** Nicht zugewiesene Zeichen können einen beliebigen Inhalt haben, je nachdem, was gerade im Speicher war, als der Speicher für das Array zur Verfügung gestellt wurde. | |
| 57 | + | ||
| 58 | + | ### Dynamisches Array of Char | |
| 59 | + | ||
| 60 | + | ``` pascal | |
| 61 | + | var | |
| 62 | + | aOldString: Array of Char; | |
| 63 | + | begin | |
| 64 | + | SetLength(aOldString, 5); | |
| 65 | + | aOldString[0] := 'a'; | |
| 66 | + | aOldString[1] := 'b'; | |
| 67 | + | aOldString[2] := 'c'; | |
| 68 | + | aOldString[3] := 'd'; | |
| 69 | + | end; | |
| 70 | + | ``` | |
| 71 | + | ||
| 72 | + | Das dynamische Array of Char hat nun den Inhalt: | |
| 73 | + | ||
| 74 | + | | | | | | | | |
| 75 | + | |-----|-----|-----|-----|-----| | |
| 76 | + | | a | b | c | d | \#0 | | |
| 77 | + | ||
| 78 | + | > **Note:** Nicht zugewiesene Zeichen in einem dynamischen Array of Char haben den Inhalt \#0, da freie Positionen aller dynamischen Arrays zunächst mit 0 initialisiert werden (oder \#0 oder NULL, oder...) | |
| 79 | + | ||
| 80 | + | ## PChar | |
| 81 | + | ||
| 82 | + | Eine Variable vom Typ **PChar** ist im Grunde ein Zeiger auf einen Char und ermöglicht so zusätzliche Operationen. PChars können verwendet werden, um auf [C-Null-terminierte Zeichenfolgen](http://de.wikipedia.org/wiki/Zeichenkette#Repr.C3.A4sentation_mit_Abschlusszeichen), z. B. in der Interaktion mit bestimmten OS Bibliotheken oder Software von Drittanbietern zugreifen. | |
| 83 | + | ||
| 84 | + | | | | | | | |
| 85 | + | |-----|-----|-----|-----| | |
| 86 | + | | a | b | c | \#0 | | |
| 87 | + | | ^ | | | | | |
| 88 | + | ||
| 89 | + | #### Referenz | |
| 90 | + | ||
| 91 | + | - [FPC PChar documentation](http://www.freepascal.org/docs-html/ref/refsu16.html) | |
| 92 | + | - [[doc:rtl/sysutils/pcharfunctions.html|PChar related functions]] | |
| 93 | + | - [[PChar/de|Verwendung PChar]] | |
| 94 | + | ||
| 95 | + | ## PWideChar | |
| 96 | + | ||
| 97 | + | Eine Variable vom Typ **PWideChar** ist ein Zeiger auf eine WideChar Variable. | |
| 98 | + | ||
| 99 | + | | | | | | | | | | | |
| 100 | + | |-----|-----|-----|-----|-----|-----|-----|-----| | |
| 101 | + | | | a | | b | | c | \#0 | \#0 | | |
| 102 | + | | ^ | | | | | | | | | |
| 103 | + | ||
| 104 | + | #### Referenz | |
| 105 | + | ||
| 106 | + | - [[doc:rtl/system/pwidechar.html|RTL PWideChar documentation]] | |
| 107 | + | - [[Pwidechar/de|Verwendung PWideChar]] | |
| 108 | + | ||
| 109 | + | ## String | |
| 110 | + | ||
| 111 | + | Der Typ **String** steht für **ShortString** oder **AnsiString**, je nach [Compiler Switch {\$H}](http://www.freepascal.org/docs-html/prog/progsu25.html#x32-310001.2.25). Wenn der Schalter aus ist ({\$H-}), wird bei jeder Deklaration eines Strings ein **ShortString** definiert. Dieser hat eine Größe von 255 Zeichen, soweit nicht anders angegeben. Wenn mit ({\$H+}) ein **String** ohne Längenangabe deklariert wird, wird ein **AnsiString** erstellt, andernfalls, mit einer angegebenen Länge, ein **ShortString**. | |
| 112 | + | ||
| 113 | + | #### Referenz | |
| 114 | + | ||
| 115 | + | - [[String/de|Verwendung String]] | |
| 116 | + | - [[doc:rtl/sysutils/stringfunctions.html|String functions]] | |
| 117 | + | - [[doc:rtl/strutils/index-5.html|Reference for unit 'strutils': Procedures and functions]] | |
| 118 | + | ||
| 119 | + | ## ShortString | |
| 120 | + | ||
| 121 | + | ShortStrings (kurze Zeichenketten) haben eine maximale Länge von 255 Zeichen mit der impliziten [[FPC Unicode Unterstützung|codepage]] CP_ACP. Die Länge des ShortStrings wird in das erste (nicht sichtbare) Zeichen (Index 0) gespeichert. | |
| 122 | + | ||
| 123 | + | | | | | | | |
| 124 | + | |-----|-----|-----|-----| | |
| 125 | + | | \#3 | a | b | c | | |
| 126 | + | ||
| 127 | + | #### Referenz | |
| 128 | + | ||
| 129 | + | - [FPC ShortString documentation](http://www.freepascal.org/docs-html/ref/refsu11.html) | |
| 130 | + | - [[Shortstring/de|Verwendung ShortString]] | |
| 131 | + | ||
| 132 | + | ## AnsiString | |
| 133 | + | ||
| 134 | + | Ansistrings oder UTF8Strings sind Zeichenfolgen, die keine Längenbeschränkung haben. Sie sind [Referenz gezählt](http://de.wikipedia.org/wiki/Referenzz%C3%A4hlung) und werden mit Null beendet ([null terminated](http://en.wikipedia.org/wiki/Null-terminated_string)). Intern wird eine Variable vom Typ **AnsiString** als Zeiger behandelt: der eigentliche Inhalt der Zeichenfolge wird auf dem Heap gespeichert, dem, nach Bedarf des Inhalts der Zeichenfolge, entsprechend viel Arbeitsspeicher zugeordnet ist. | |
| 135 | + | ||
| 136 | + | <table> | |
| 137 | + | <tbody> | |
| 138 | + | <tr> | |
| 139 | + | <td style="width: 8%;"></td> | |
| 140 | + | <td style="width: 8%;"></td> | |
| 141 | + | <td style="width: 8%;"></td> | |
| 142 | + | <td style="width: 8%;"></td> | |
| 143 | + | <td style="width: 8%;"></td> | |
| 144 | + | <td style="width: 8%;"></td> | |
| 145 | + | <td style="width: 8%;"></td> | |
| 146 | + | <td style="width: 8%;"></td> | |
| 147 | + | <td style="width: 8%;">a</td> | |
| 148 | + | <td style="width: 8%;">b</td> | |
| 149 | + | <td style="width: 8%;">c</td> | |
| 150 | + | <td style="width: 8%;">#0</td> | |
| 151 | + | </tr> | |
| 152 | + | <tr> | |
| 153 | + | <td colspan="4" style="width: 16%;">RefCount</td> | |
| 154 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 155 | + | <td></td> | |
| 156 | + | <td></td> | |
| 157 | + | <td></td> | |
| 158 | + | <td></td> | |
| 159 | + | </tr> | |
| 160 | + | </tbody> | |
| 161 | + | </table> | |
| 162 | + | ||
| 163 | + | #### Referenz | |
| 164 | + | ||
| 165 | + | - [[doc:ref/refsu12.html|FPC AnsiString documentation]] | |
| 166 | + | - [[Ansistring/de|Verwendung AnsiString]] | |
| 167 | + | ||
| 168 | + | ## UnicodeString | |
| 169 | + | ||
| 170 | + | Wie **AnsiStrings** sind **UnicodeStrings** Referenz gezählte, null-terminierte Arrays. Diese beinhalten allerdings keine **Chars** sondern **WideChars**. | |
| 171 | + | ||
| 172 | + | > **Note:** Die Namensgebung *UnicodeString* ist ein wenig missverständlich, aber wahrscheinlich wegen seiner Verwendung in Delphi unter Windows passend, wo das Betriebssytem UTF16-Codierung verwendet. Der UnicodeString ist nicht die einzigste String-Datentyp, der Unicode-Zeichenfolge-Daten enthalten kann (siehe auch UTF8String)... | |
| 173 | + | ||
| 174 | + | <table> | |
| 175 | + | <tbody> | |
| 176 | + | <tr> | |
| 177 | + | <td style="width: 7%;"></td> | |
| 178 | + | <td style="width: 7%;"></td> | |
| 179 | + | <td style="width: 7%;"></td> | |
| 180 | + | <td style="width: 7%;"></td> | |
| 181 | + | <td style="width: 7%;"></td> | |
| 182 | + | <td style="width: 7%;"></td> | |
| 183 | + | <td style="width: 7%;"></td> | |
| 184 | + | <td style="width: 7%;"></td> | |
| 185 | + | <td style="width: 7%;"></td> | |
| 186 | + | <td style="width: 7%;">a</td> | |
| 187 | + | <td style="width: 7%;"></td> | |
| 188 | + | <td style="width: 7%;">b</td> | |
| 189 | + | <td style="width: 7%;"></td> | |
| 190 | + | <td style="width: 7%;">c</td> | |
| 191 | + | <td style="width: 7%;">#0</td> | |
| 192 | + | <td style="width: 7%;">#0</td> | |
| 193 | + | </tr> | |
| 194 | + | <tr> | |
| 195 | + | <td colspan="4" style="width: 16%;">RefCount</td> | |
| 196 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 197 | + | <td></td> | |
| 198 | + | <td></td> | |
| 199 | + | <td></td> | |
| 200 | + | <td></td> | |
| 201 | + | <td></td> | |
| 202 | + | <td></td> | |
| 203 | + | <td></td> | |
| 204 | + | <td></td> | |
| 205 | + | </tr> | |
| 206 | + | </tbody> | |
| 207 | + | </table> | |
| 208 | + | ||
| 209 | + | #### Referenz | |
| 210 | + | ||
| 211 | + | - [FPC UnicodeString documentation](http://www.freepascal.org/docs-html/ref/refsu13.html) | |
| 212 | + | - [[Unicodestring/de|Verwendung UnicodeString]] | |
| 213 | + | ||
| 214 | + | ## UTF8String | |
| 215 | + | ||
| 216 | + | Zur Zeit ist der Typ **UTF8String** ist ein Alias für den Typ **AnsiString**. Er enthält UTF8-codierte Zeichenfolgen (d.h. Unicodedaten reichen von 1 bis 4 Byte pro Zeichen). UTF8String ist die Standardzeichenfolge in Lazarus und LCL. | |
| 217 | + | ||
| 218 | + | #### Referenz | |
| 219 | + | ||
| 220 | + | - [[doc:rtl/system/utf8string.html|RTL UTF8String documentation]] | |
| 221 | + | ||
| 222 | + | ## UTF16String | |
| 223 | + | ||
| 224 | + | Der Typ **UTF16String**ist ein Alias für den Typ **WideString**. In der LCL-Unit *lclproc* ist dieser ein Alias für den Typ **UnicodeString**. | |
| 225 | + | ||
| 226 | + | #### Referenz | |
| 227 | + | ||
| 228 | + | - [[doc:lcl/lclproc/utf16string.html|LCL UTF16String documentation]] | |
| 229 | + | ||
| 230 | + | ## WideString | |
| 231 | + | ||
| 232 | + | Variablen vom Typ **[[Widestrings|WideString]]** (verwendet, um Unicode-Zeichenfolgen in COM-Anwendungen darzustellen) ähneln denen des Typs **UnicodeString**, aber im Gegensatz zu ihnen sie sind nicht Referenz gezählt. Unter Windows werden sie mit einer speziellen Windows-Funktion zugeteilt, die ermöglicht, dass sie für die OLE-Automatisierung verwendet werden können. | |
| 233 | + | ||
| 234 | + | WideStrings bestehen aus COM kompatibel UTF16-codierten Bytes auf Windows-Maschinen (UCS2 unter Windows 2000) und sie werden als einfache UTF16 für Linux, Mac OS X und iOS codiert. | |
| 235 | + | ||
| 236 | + | <table> | |
| 237 | + | <tbody> | |
| 238 | + | <tr> | |
| 239 | + | <td style="width: 8%;"></td> | |
| 240 | + | <td style="width: 8%;"></td> | |
| 241 | + | <td style="width: 8%;"></td> | |
| 242 | + | <td style="width: 8%;"></td> | |
| 243 | + | <td style="width: 8%;"></td> | |
| 244 | + | <td style="width: 8%;">a</td> | |
| 245 | + | <td style="width: 8%;"></td> | |
| 246 | + | <td style="width: 8%;">b</td> | |
| 247 | + | <td style="width: 8%;"></td> | |
| 248 | + | <td style="width: 8%;">c</td> | |
| 249 | + | <td style="width: 8%;">#0</td> | |
| 250 | + | <td style="width: 8%;">#0</td> | |
| 251 | + | </tr> | |
| 252 | + | <tr> | |
| 253 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 254 | + | <td></td> | |
| 255 | + | <td></td> | |
| 256 | + | <td></td> | |
| 257 | + | <td></td> | |
| 258 | + | <td></td> | |
| 259 | + | <td></td> | |
| 260 | + | <td></td> | |
| 261 | + | <td></td> | |
| 262 | + | </tr> | |
| 263 | + | </tbody> | |
| 264 | + | </table> | |
| 265 | + | ||
| 266 | + | #### Referenz | |
| 267 | + | ||
| 268 | + | - [FPC WideString documentation](http://www.freepascal.org/docs-html/ref/refsu14.html#x37-400003.2.8) | |
| 269 | + | - [[Widestring/de|Verwendung WideString]] | |
| 270 | + | ||
| 271 | + | ## PShortString | |
| 272 | + | ||
| 273 | + | Eine Variable vom Typ **PShortString** ist ein Zeiger, der auf das erste Byte eines **ShortStrings** zeigt (in welchem die Länge des ShortStrings definiert wird). | |
| 274 | + | ||
| 275 | + | | | | | | | |
| 276 | + | |-----|-----|-----|-----| | |
| 277 | + | | \#3 | a | b | c | | |
| 278 | + | | ^ | | | | | |
| 279 | + | ||
| 280 | + | #### Referenz | |
| 281 | + | ||
| 282 | + | - [[doc:rtl/system/pshortstring.html|RTL PShortString documentation]] | |
| 283 | + | ||
| 284 | + | ## PAnsiString | |
| 285 | + | ||
| 286 | + | Eine Variable vom Typ **PAnsiString** ist ein Zeiger auf eine Variable vom Typ **AnsiString**. Anders als bei einem **PShortString** zeigt dieser nicht auf das erste Byte des Headers, sondern auf das erste **Char** des **AnsiStrings**. | |
| 287 | + | ||
| 288 | + | <table> | |
| 289 | + | <tbody> | |
| 290 | + | <tr> | |
| 291 | + | <td style="width: 8%;"></td> | |
| 292 | + | <td style="width: 8%;"></td> | |
| 293 | + | <td style="width: 8%;"></td> | |
| 294 | + | <td style="width: 8%;"></td> | |
| 295 | + | <td style="width: 8%;"></td> | |
| 296 | + | <td style="width: 8%;"></td> | |
| 297 | + | <td style="width: 8%;"></td> | |
| 298 | + | <td style="width: 8%;"></td> | |
| 299 | + | <td style="width: 8%;">a</td> | |
| 300 | + | <td style="width: 8%;">b</td> | |
| 301 | + | <td style="width: 8%;">c</td> | |
| 302 | + | <td style="width: 8%;">#0</td> | |
| 303 | + | </tr> | |
| 304 | + | <tr> | |
| 305 | + | <td colspan="4" style="width: 16%;">RefCount</td> | |
| 306 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 307 | + | <td style="width: 8%;">^</td> | |
| 308 | + | <td></td> | |
| 309 | + | <td></td> | |
| 310 | + | <td></td> | |
| 311 | + | </tr> | |
| 312 | + | </tbody> | |
| 313 | + | </table> | |
| 314 | + | ||
| 315 | + | #### Referenz | |
| 316 | + | ||
| 317 | + | - [[doc:rtl/system/pansistring.html|RTL PAnsiString documentation]] | |
| 318 | + | ||
| 319 | + | ## PUnicodeString | |
| 320 | + | ||
| 321 | + | Eine Variable vom Typ **PUnicodeString** ist ein Zeiger, der auf eine Variable des Typs **UnicodeString** zeigt. | |
| 322 | + | ||
| 323 | + | <table> | |
| 324 | + | <tbody> | |
| 325 | + | <tr> | |
| 326 | + | <td style="width: 7%;"></td> | |
| 327 | + | <td style="width: 7%;"></td> | |
| 328 | + | <td style="width: 7%;"></td> | |
| 329 | + | <td style="width: 7%;"></td> | |
| 330 | + | <td style="width: 7%;"></td> | |
| 331 | + | <td style="width: 7%;"></td> | |
| 332 | + | <td style="width: 7%;"></td> | |
| 333 | + | <td style="width: 7%;"></td> | |
| 334 | + | <td style="width: 7%;"></td> | |
| 335 | + | <td style="width: 7%;">a</td> | |
| 336 | + | <td style="width: 7%;"></td> | |
| 337 | + | <td style="width: 7%;">b</td> | |
| 338 | + | <td style="width: 7%;"></td> | |
| 339 | + | <td style="width: 7%;">c</td> | |
| 340 | + | <td style="width: 7%;">#0</td> | |
| 341 | + | <td style="width: 7%;">#0</td> | |
| 342 | + | </tr> | |
| 343 | + | <tr> | |
| 344 | + | <td colspan="4" style="width: 16%;">RefCount</td> | |
| 345 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 346 | + | <td style="width: 7%;">^</td> | |
| 347 | + | <td></td> | |
| 348 | + | <td></td> | |
| 349 | + | <td></td> | |
| 350 | + | <td></td> | |
| 351 | + | <td></td> | |
| 352 | + | <td></td> | |
| 353 | + | <td></td> | |
| 354 | + | </tr> | |
| 355 | + | </tbody> | |
| 356 | + | </table> | |
| 357 | + | ||
| 358 | + | #### Referenz | |
| 359 | + | ||
| 360 | + | - [[doc:rtl/system/punicodestring.html|RTL PUnicodeString documentation]] | |
| 361 | + | ||
| 362 | + | ## PWideString | |
| 363 | + | ||
| 364 | + | Eine Variable vom Typ **PWideString** ist ein Zeiger auf eine Variable vom Typ **WideString**. Dieser zeigt analog dem **PAnsiString** nicht auf den Header sondern auf das ersten Zeichen eines **WideStrings**. | |
| 365 | + | ||
| 366 | + | <table> | |
| 367 | + | <tbody> | |
| 368 | + | <tr> | |
| 369 | + | <td style="width: 8%;"></td> | |
| 370 | + | <td style="width: 8%;"></td> | |
| 371 | + | <td style="width: 8%;"></td> | |
| 372 | + | <td style="width: 8%;"></td> | |
| 373 | + | <td style="width: 8%;"></td> | |
| 374 | + | <td style="width: 8%;">a</td> | |
| 375 | + | <td style="width: 8%;"></td> | |
| 376 | + | <td style="width: 8%;">b</td> | |
| 377 | + | <td style="width: 8%;"></td> | |
| 378 | + | <td style="width: 8%;">c</td> | |
| 379 | + | <td style="width: 8%;">#0</td> | |
| 380 | + | <td style="width: 8%;">#0</td> | |
| 381 | + | </tr> | |
| 382 | + | <tr> | |
| 383 | + | <td colspan="4" style="width: 16%;">Length</td> | |
| 384 | + | <td style="width: 8%;">^</td> | |
| 385 | + | <td></td> | |
| 386 | + | <td></td> | |
| 387 | + | <td></td> | |
| 388 | + | <td></td> | |
| 389 | + | <td></td> | |
| 390 | + | <td></td> | |
| 391 | + | <td></td> | |
| 392 | + | </tr> | |
| 393 | + | </tbody> | |
| 394 | + | </table> | |
| 395 | + | ||
| 396 | + | #### Referenz | |
| 397 | + | ||
| 398 | + | - [[doc:rtl/system/pwidestring.html|RTL PWideString documentation]] | |
| 399 | + | ||
| 400 | + | ## See also | |
| 401 | + | ||
| 402 | + | - [[FPC Unicode support]] | |
| 403 | + | - [[LCL Unicode Support]] | |
| 404 | + | - [[TStringList-TStrings Tutorial]] | |
| 405 | + | - [A Brief History of Strings](http://www.codexterity.com/delphistrings.htm) | |
| 406 | + | ||
| 407 | + | --- | |
| 408 | + | *From the Free Pascal wiki, page "Character and string types/de", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
