Wikisource:RE-Werkstatt/Experiment

aus Wikisource, der freien Quellensammlung


/*------------------------------------------------------------------------------------*/
/* Datei: 43 PHP_Pgm.sas */
/* Aufgabe: Hilfsfunktionen für Administrator, z.B. Faksimile Lexikon laden */
/* */
/* Output: &DDNAM.www/meyers/code/ */
/* &DDNAM.www/meyers/Admin/code/ */
/*------------------------------------------------------------------------------------*/
options nonotes &NONO &ALLNO ; options notes; * options nosource; /**/

data _null_; /* wiki.php */
   %PHPCODE( "&DDNAM.www/meyers/Admin/code/wiki.php", SPACE=YES );
   datalines4;
<?php // Zeile 13-1
require_once 'C:/Users/info/Documents/www/meyers/code/Include.php'; // ANKER definieren
require_once ANKER.AdminC.'compress_func.php';
define('BUCH', array('A','B','C','D','E','G','H','I','K','L',
                     'M','N','O','P','R','S','T','W','X','Z') ); // Roscher, ausfhr
define('KATEG',array('Aigyptiade','Aipytide', 'Amazone', 'Aphrodite','Apollon', 'Ares', 'Artemis',
       'Asklepios', 'Athene', 'Beiname einer Gottheit', 'Danaide', 'Demeter', 'Dionysos',
       'Eromenos der griechischen Mythologie',
       'Gegenstand der griechischen Mythologie','Gestalt der griechischen Mythologie','Gigant (Mythologie)',
       'Griechische Gottheit','Griechische Mythographie', 'Griechische Sage', 'Griechischer Flussgott',
       'Hades', 'Hamadryade','Hephaistos','Herakles', 'Hermes', 'Hestia', 'Horen (Mythologie)',
       'Ikarus', 'Ilias', 'Kentaur', 'Kreatur der griechischen Mythologie','König der griechischen Mythologie',
       'Liste (Mythologie)', 'Medea', 'Meeresgottheit', 'Mischwesen','Muse', 'Najade',
       'Nereide', 'Nymphe', 'Odysseus', 'Okeanide', 'Olymp', 'Orpheus', 'Pan', 'Phönizier',
       'Poseidon', 'Prometheus','Pygmalion', 'Zeus', 'Ödipus', 'Person (Trojanischer Krieg)' ));
define('ROSCH',array('A' => array('1AH', '11', ''), 'M' => array('22LM','0202', ''),
                     'B' => array('1AH', '11', ''), 'N' => array('3NP', '0301', ''),
                     'C' => array('1AH', '11', ''), 'O' => array('3NP', '0301', ''),
                     'D' => array('1AH', '11', ''), 'P' => array('3NP', '0301','0302'),
                     'E' => array('1AH', '11', ''), 'R' => array('45QT','0302', ''),
                     'G' => array('1AH', '11', ''), 'S' => array('45QT', '04', ''),
                     'H' => array('1AH', '12', ''), 'T' => array('45QT', '05', ''),
                     'I' => array('21IK','0201',''), 'W' => array('67UZSuppl','06', ''),
                     'K' => array('21IK','0201',''), 'X' => array('67UZSuppl','06', ''),
                     'L' => array('22LM','0202',''), 'Z' => array('67UZSuppl','06', '') ));
define('SPALT',array('A' => array(10, 1), 'M' => array(11,2214),
                     'B' => array( 9, 744), 'N' => array(11, 1),
                     'C' => array( 9, 868), 'O' => array(11, 593),
                     'D' => array( 9, 932), 'P' => array(11,1240),
            // Offset = Delta Seiten, 1. Spalte
                     'E' => array(10,1209), 'R' => array(11, 61),
                     'G' => array(10,1565), 'S' => array(11, 228),
                     'H' => array(10,1778), 'T' => array(11, 1),
                     'I' => array(11, 1), 'W' => array(11, 1),
                     'K' => array(11, 822), 'X' => array(11, 518),
                     'L' => array(11,1775), 'Z' => array(11, 531) ));
define('ATTRIB',array('TOT' => array('smallint( 4) unsigned not null', 1)
                    , 'Ros' => array(' char( 2)', 1 )
                    , 'R_N' => array(' char( 12)', 1 )
                    , 'BD' => array(' char( 1)', 1 )
                    , 'SP' => array('varchar( 12)', 1 )
                    , 'ABC' => array(' char( 1)', 1 )
                    , 'BKL' => array(' char( 1)', 1 ) // Begriffsklärung
                    , 'Anz_R' => array('smallint( 4)', 1 ) // Anzahl Referenzen
                    , 'BITMAP' => array('varchar(6000)', 1 ) // von wo wird nach hier referenziert
                    , 'OK' => array(' char( 4)', 1 ) // Delta zwischen Roscher Spalte und Seite
                    , 'N' => array('smallint( 4)', 1 )
                    , 'Datum' => array('varchar( 20)', 18 )
                    , 'R_S' => array('varchar( 60)', 1 ) // Roscher Seite
                    , 'Person' => array('varchar( 60)', 10 )
                    , 'griechisch' => array('varchar( 60)', 10 )
                    , 'Name' => array('varchar(200)', 10 )
                    , 'RE' => array('varchar( 60)', 10 )
                    , 'Nachweis' => array('varchar(200)', 1 )
                    , 'NWS' => array('varchar(200)', 1 )
                    , 'kByte' => array(' int( 8)', 1 ) // Grösse Artikel in WP
                    , 'Beschreibung'=> array('varchar(600)', 1 )
                    , 'Tag' => array('varchar(200)', 1 )
                    , 'Relatio' => array('varchar(100)', 1 )
                    , 'K_K' => array('smallint( 4)', 1 )
                    , 'K_C' => array('smallint( 4)', 1 ) // Kate_complet Schlüssel
                    , 'IS_OK' => array(' char( 1)', 1 ) // Kategorie ist relevant
                    , 'NK' => array('smallint( 4)', 1 )
                    , 'KC' => array('smallint( 4)', 1 ) // Kate_complet
                    , 'I_Kateg' => array('smallint( 4)', 1 )
                    , 'Kategorie' => array('varchar(100)', 1 )
     ));
define('LDG','Liste der Gestalten der griechischen Mythologie');
define('W_D','/Aufgaben/Datenbank/'); // W_D Datenbank aus W_1 für Datenbank
define('W_U','/Aufgaben/Datenbank/G_update.txt'); // W_U update BKL + ANZ_R in G_LISTE
define('W_I','/Aufgaben/in WIKI/'); // W_I Seiten in WP als Download
define('W_0','/Aufgaben/Lexikon/Wikipedia/Liste/Wiki-Liste_'); // W_0 Liste der Gestalten je Buchstabe
define('W_1','/Aufgaben/Lexikon/Wikipedia/Wiki-1_Liste.csv'); // W_1 erweiterte Liste aus W_0 mit mehr Spalten
define('W_2','/Aufgaben/Lexikon/Wikipedia/Wiki-2_Mythos.csv'); // W_2 EXCEL aus DB 1:1 die LISTE
define('W_A','/Aufgaben/Lexikon/Wikipedia/Wiki-8_Kate_all.csv'); // W_A EXCEL Kategorien der LISTE
define('W_B','/Aufgaben/Lexikon/Wikipedia/Wiki-7_Bilder.csv'); // W_B Bilder je Artikel aus W_I
define('WCC','/Aufgaben/Lexikon/Wikipedia/Wiki-9_Kate_complet.csv'); // WCC Kategorie mit LEMMA aus W_C
define('W_K','/Aufgaben/Lexikon/Wikipedia/Wiki-3_Kategorie.csv'); // W_K Kategorien im Detail aus W_I
define('W_L','/Aufgaben/Lexikon/Wikipedia/Wiki-6_Links.csv'); // W_L Links je Artikel aus W_I
define('W_R','/Aufgaben/Lexikon/Wikipedia/Wiki-4_Referenz.csv'); // W_R Referenzen im Detail aus W_I
define('W_C','/Aufgaben/Lexikon/Wikipedia/Kategorie/'); // W_C Kategorien aus WP
define('W_S','/Aufgaben/Lexikon/Wikipedia/Stand/'); // W_S Versionen der Liste je Buchstabe
define('W_T','/Aufgaben/Lexikon/Wikipedia/Wiki-5_Titel.csv'); // W_T Titel aus W_I
define('W_V','/Aufgaben/Lexikon/Wikipedia/Version/'); // W_V LEMMA-ta Versionen als CSV
define('W_G','/www/meyers/project/Griechische_Mythologie.csv'); // W_G als Download in WP aus DB 1:1 die LISTE
define('TIM', microtime(true) );
//---------------------------------------------------------Paulys Realencyklopädie ------------------------
define('CSV','";"');
define('CH160',chr(0xC2).chr(0xA0)); //  
define('JJ52',date('Y')-71); // gemeinfrei ab 1952 = 2023-71
define('Pauly_RE',PAULY0.' (RE) 1893-1980 auf Wikisource.de');
define('R_I','/Aufgaben/in RE/'); // R_I RE:'online WS' als Download
define('R_R','/Aufgaben/Lexikon/Wiki RE/'); // R_R Aufgaben Lexikon Wiki RE
define('RE_ABC',['a','ak','an','ar','as','b', 'c', 'ch','d', 'di','e','er','f', 'g', 'h', 'hi',
                 'i','k', 'kl','l', 'lf','m', 'mb','mi','n', 'o', 'p','pe','pi','po','pr','q',
                 'r','s', 'se','so','t', 'th','ti','u', 'uf','x', 'y','z']);
define('RE_ORDER', array_flip( array_keys(RE_BAND) ));
define('ROMAN', array(0, 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X',
                        'XI', 'XII', 'XIII', 'XIV', 'XV', 'XVI', 'XVII', 'XVIII', 'XIX', 'XX',
                       'XXI','XXII','XXIII','XXIV','XXV','XXVI','XXVII','XXVIII','XXIX','XXX') );
define('TO_ROM', array_flip(ROMAN) );
define( 'Akzent','ΆάΈέΉήΊίΌόΎύΏώ'.'ᾶῆῖῶῦ'.'ὰὲὴὶὸὺὼ'); // Akzente neugriechisch + ~
define('NoAkzent','ΑαΕεΗηΙιΟοΥυΩω'.'αηιωυ'.'αεηιουω');
define( 'Asper', 'ἀἁἈἉἐἑἘἙἠἡἨἩἰἱἸἹὀὁὈὉὐὑὙὛὠὡὨὩῤῥῬ' ); // Lenis+Asper, ohne Akzente
define('NoAsper', 'ααΑΑεεΕΕηηΗΗιιΙΙοοΟΟυυΥΥωωΩΩρρΡ' );
define('NACH', "}])?!':;,-".NL ); // ‘ in mytrim(), ohne .
define('NACH2', NACH.'.' );
define('TAGS', '<big><small><ref><sup><sub><u>' );
define('SPRA',['de'=>'Deutsch', 'en'=>'English', 'fr'=>'Français',
               'it'=>'Italiano', 'es'=>'Español', 'ca'=>'Català',
               'pt'=>'Português','tr'=>'Türkçe', 'el'=>'Ελληνικά',
               'la'=>'Latina', 'bg'=>'Balgarski',]);
define('LAT_k', array( 'Au','Eu', 'Hy',
'au','eu','a','b','ch','d','e','f','ph','ps','g','th','i','j','k','l','m','n','o','p','q','r','s','t','u', 'v','w','x','y','z','σ ',
          'A','B','Ch','D','E','F','Ph','Ps','G','Th','I','J','K','L','M','N','O','P','Q','R','S','T','U', 'V','W','X','Y','Z'));
define('GRE_k', array( 'Αυ','Ευ', 'Ὑ',
'αυ','ευ','α','β','χ', 'δ','ε','φ','φ', 'ψ', 'γ','θ', 'ι','j','κ','λ','μ','ν','ο','π','q','ρ','σ','τ','ου','v','w','ξ','υ','ζ','ς ',
          'Α','Β','Χ', 'Δ','Ε','Φ','Φ', 'Ψ', 'Γ','Θ', 'Ι','J','Κ','Λ','Μ','Ν','Ο','Π','Q','Ρ','Σ','Τ','Ου','V','W','Ξ','Υ','Ζ'));
define('EXCb', array('αι'=>'αἱ','απο'=>'ἀπὸ','αν'=>'ἄν','Αρχ.'=>'Ἀρχ.','αρχ'=>'ἀρχ','αρχων'=>'ἄρχων','Αθ'=>'Ἀθ',
      'αυτον'=>'αὐτὸν','αυτου'=>'αὐτοῦ','αυτοθ'=>'αὐτοῦ','αυτω'=>'αὐτῶ','αυτων'=>'αὐτῶν',
      'γαρ'=>'γὰρ','γη'=>'γῆ','δε'=>'δὲ','δημος'=>'δῆμος', // 'δ'=>'ὁ',
      'ε'=>'ἐ','εαν'=>'ἐὰν','ει'=>'εἰ','ειμεν'=>'εἶμεν','ειναι'=>'εἶναι',
      'ειπεν'=>'εἶπεν','ειπη'=>'εἴπη','εκ'=>'ἐκ','εν'=>'ἐν','επι'=>'ἐπὶ','Εφ'=>'Ἐφ','Εφημ'=>'Ἐφημ','ες'=>'ἐς',
      'εστιν'=>'ἐστιν','εξ'=>'ἐξ','η'=>'ἡ','ιερος'=>'ἱερός','Ιππος'=>'Ἵππος',
      'κε'=>'κε','μεν'=>'μὲν','μην'=>'μὴν','μηδεν'=>'μηδὲν','νησος'=>'νῆσος','νυν'=>'νῦν',
      'ο'=>'ὁ','οι'=>'οἱ','οις'=>'οἷς','οιον'=>'οἷον','ον'=>'ὅν','δν'=>'ὅν',
      'ονκ'=>'οὐκ','δπερ'=>'ὅπερ','οπερ'=>'ὅπερ','οπως'=>'ὅπως',
      'ος'=>'ὃς','οτι'=>'ὅτι','οττι'=>'ὅττι','ους'=>'οὓς','ουχ'=>'οὐχ',
      'προς'=>'πρὸς','συν'=>'σὺν',
      'ταν'=>'τὰν','τας'=>'τὰς','ταυτα'=>'ταῦτα','τε'=>'τε','τη'=>'τῆ','την'=>'τὴν','της'=>'τῆς',
      'τοις'=>'τοῖς','τον'=>'τὸν','τοθ'=>'τοῦ','του'=>'τοῦ','τους'=>'τοὺς','τουν'=>'τοῦν',
      'τω'=>'τῶ','τφ'=>'τῷ','τῳ'=>'τῷ','των'=>'τῶν',
      'υιος'=>'υἱός','υπο'=>'ὑπὸ','υπερ'=>'ὑπὲρ','ων'=>'ὧν','ως'=>'ὡς','ωστε'=>'ὥστε',) );
function RE_Abox( $Abox0 ){
   $Dupp = $ZIEL = [];
   foreach($Abox0 as $N => $LINE){
      $Dupp[$N] = trim(scan($LINE,1,'=' )," '" ); // 17 => 'Athen'
      $ZIEL[$N] = trim(scan($LINE,2,'=/')," ',>"); } // 17 => '[[RE:Athenai 1|Athen]]'
   natsort($Dupp);
   foreach($Dupp as $N => $LINE)
      if( isset($Dupp[$N-1]) and $Dupp[$N-1]==$LINE or
           isset($Dupp[$N+1]) and $Dupp[$N+1]==$LINE ) /* doppelte KEY behalten */;
      else unset($Dupp[$N], $ZIEL[$N]);
   $ZIEL = array_unique ($ZIEL);
   foreach($Dupp as $N => $LINE ) if(!isset($ZIEL[$N]) ) unset($Dupp[$N]);
   $MANY = array_count_values($Dupp);
   foreach($Dupp as $N => $LINE ) if( $MANY[$LINE]==1 ) unset($Dupp[$N]);
   foreach($Abox0 as $N => $LINE)
      if( !isset($Dupp[$N])) unset( $Abox0[$N] );
      else $Abox0[$N] = '"'.str_replace(['=>','//','$'],CSV,$Abox0[$N] ).'"';
   file_put_contents( ANKER.AdminC.'ALLbox-Dup.csv',
      BOM.'"Stichwort'.CSV.'Ziel'.CSV.'BDSE'.CSV.'Quelle : Kurztext"'.NL.
      str_replace("'",'',implode(NL,$Abox0)));
}
function RE_ABKURZ ( $TODO ){ // RE-7_Alle-Abkürzungen.txt für [[Wikisource:RE-Werkstatt/Alle Abkürzungen]]
   if( RUN or !$TODO ) return;
   global $PHILO3, $OPTI, $ALLbox, $PHILOq;
   $KURZ = $MENGE = []; $MENG = ''; // '_Grp = // RE_DKP
   $DATEI = explode(NL,file_get_contents( ANKER.AdminC.'ALLart.php'));
   $Abox0 = explode(NL,file_get_contents( ANKER.AdminC.'ALLbox.php'));
   unset( $DATEI[0], $DATEI[count($DATEI)], // Kopfzeile und letzte
           $Abox0[0], $Abox0[count($Abox0)] );
   foreach($DATEI as $LINE)
      $KURZ[trim(scan($LINE,1,'=')," '")] = trim(scan($LINE,2,'$')); // Kurztext
   RE_Abox( $Abox0 );
   $OUT = '<!-- #########################################################################' .NL.
      'Die Seite [[/Alle Abkürzungen]] wird automatisch erstellt, nicht von Hand bearbeiten.'.NL.
      'Datenquellen sind $Philol+$DKP bei eLexikon.ch, dort werden die Originale gepflegt.'.NL.
      'Falls euch Fehler auffallen, würde ich mich über einen Hinweis hier oder auf' .NL.
      'meiner Diskussionsseite freuen. [[Benutzer:ELexikon|ELexikon]]' .NL.
      date('d. F Y H:i').' (CEST)' .NL.
      '##############################################################################-->' .NL.
      '{{Listendaten|THEMA=Realencyclopädie der classischen Altertumswissenschaft' .NL.
      '|KURZBESCHREIBUNG=Alle Abkürzungen}}' .NL.
      'Hunderte Abkürzungen und Schlüsselwörter sind in der RE zu finden, ihre Quellen ' .NL.
      'sind gruppiert:'.NL. '{{Tabellenstile}}' .NL.
      '{|class="wikitable mw-collapsible"' .NL. // mw-collapsed
      '|-' .NL.
      '!Grp.!!RE, Wikipedia, Wikisource   ' .NL.
// '!Der Kleine Pauly (DKP)<ref name="DKP">[[w:Der Kleine Pauly]] in der Wikipedia</ref>'.NL.
      '|-' .NL.
      '|[[#Abk. |Abk. ]]||RE:Abkürzungen (Supplementband I)'.
                                         '<ref>[[RE:Abkürzungen (Supplementband I)]]</ref>'.NL. // 1
// '|[[#Allg. |Allg.]]|| 1. Allgemeine Abkürzungen' .NL.
      '|-' .NL.
      '|[[#Epig. |Epig.]]||Lateinische Epigraphik, Inschriften<ref name="Epig">'.
                                      '[[w:Lateinische Epigraphik]] in der Wikipedia</ref>'.NL. // 2
// '|[[#Lexika|Lexika]]|| 2. Sammelwerke und Lexika' .NL.
      '|-' .NL.
      '|[[#Vorn. |Vorn.]]||Lateinische männliche Vornamen<ref name="Epig" />' .NL. // 3
// '|[[#Zeitsch.|Zeitsch.]]|| 3. Zeitschriften und Reihen' .NL.
      '|-' .NL.
      '|[[#Götter|Götter]]||Griechische und römische Gottheiten<ref name="Philo">'.
                                             '[[Wikisource:RE-Werkstatt/Philologen]]</ref>'.NL. // 4
// '|[[#Einzel|Einzel]]|| 4. Einzelwerke' .NL.
      '|-' .NL.
      '|[[#Kaiser|Kaiser]]||Römische Kaiser<ref name="Philo" />' .NL. // 5
// '|[[#AutorG|AutorG]]|| 5. Griechische Autornamen und Werktitel' .NL.
      '|-' .NL.
      '|[[#Autor |Autor ]]|| Antike Autoren<ref>[[w:Liste der Abkürzungen antiker Autoren '.
                                                       'und Werktitel]] in Wikipedia</ref>'.NL. // 6
// '|[[#AutorL|AutorL]]|| 6. Lateinische Autornamen und Werktitel' .NL.
      '|-' .NL.
      '|[[#Phil. |Phil. ]]|| Altphilologen der Neuzeit.' .NL. // 7
// '|[[#Epi. |Epi. ]]|| 7. Epigraphik Datenbank<ref>[https://db.edcs.eu/epigr/'.
// 'hinweise/abkuerz.html Epigraphik Datenbank db.edcs.eu]</ref>'.NL.
      '|-' .NL.
      '|[[#_ohne |Ohne ]]|| Ohne einige unerwünschte Links.' .NL. // 8
      '|}' .NL.
      'Als Standard gelten die im Archäologischen Anzeiger üblichen Abkürzungen.' .NL.
// 'sowie die Verzeichnisse in »Der Kleine Pauly« bzw. »Der Neue Pauly«.' .NL.
      '{|class="wikitable sortable tabelle-kopf-fixiert"' .NL.
      '!Grp.!!Abkürzung!!Kurzbeschreibung!!#';
   file_put_contents( ANKER.R_R.'save-csv/_Abk_Temp.txt',
                    '<?php // RE-ABKURZ() = Kommentierte Abkürzungen' .NL.
       str_replace(['<?php','?>',"// '",'<!--xyz-->'],['','',"'* ",''], // '... => '* ...
                      file_get_contents( ANKER.AdminC.'Philol.php')).NL. // => inkl. Kommentar
       str_replace(['<?php','?>',"// '"] ,['','',"'* "],
                      file_get_contents( ANKER.AdminC.'DerKleinePauly.php')).' ?>');
   include ANKER.R_R.'save-csv/_Abk_Temp.txt'; // $PHILO, $DKP = ...
   $NNN=''; $N=0;
   foreach($PHILO /*+$DKP*/ as $KEY => $TXT){ $LINK = trim(scan($TXT,1,'|'),'['); // Plausibilisieren
      if( $LINK === '{{RE siehe' ) $LINK ='RE:'.trim(scan($TXT,2,'|'),'}'); // grüner Link
                                                 $TXT0 = $TXT;
      if(strpos($TXT,'{{SperrSchrift')!==false){ $FULL = $LINK; $LINK=BLK; $SPERR=1;} // Altphilologe
                                          else { $FULL = ''; $SPERR=0;
         if( !in_array($TXT[0],['[','{'] ) ) $TXT = scan($TXT,2,'|'); }
      if( $FULL == '{{SperrSchrift' ) $FULL = '-';
      if(substr($KEY,0,6) == '_Grp =' ) { $DLM = '||colspan="3" style="text-align:left;"|';
                                                 $LINK = ''; $TIT = '!' ;$NNN = trim(scan($KEY,2,'='));
         if( strpos($TXT,']') ) $TXT = '{{Überschrift|' .$NNN.'}}'. $TXT;
                                            else $TXT = '{{Überschrift|' .$NNN.'}}'. scan($TXT0,1,'|');
                                                 $KEY = 'ι'.scan($KEY,2,'=');$NN1 = '-'; }
      else { $DLM = '||'; $TIT = '|' ;$NN1 = $NNN; }
      if( $NNN == '' ) continue; // am Anfang
                                                 $NOK = ' <sup>[0]</sup>';
      if( substr($KEY,0,2) === '* ' ) $KEY = substr($KEY,2) .$NOK; // ist Kommentar
      elseif(!isset($PHILO3[$KEY]) and $TIT=='|')$KEY .= $NOK; // unerwünscht
      else $NOK = ''; // Normalfall
      if( $TXT == '' ){$TXT = $KEY; $NOK='';} // Kaiser Iustinianus
                                 $OUT .= trim(NL.'|-'.NL.$TIT.$NN1 // | Grp.
                                             // .'||'.$KEY // Abkürzung
                                                .$DLM.strip_tags($TXT,'<sup><sub>').$NOK // Anzeige
                                                .'||'.$LINK ,'|'); // Kurzbeschreibung
      $LINK = substr($LINK,3); $CUT = strpos( $TXT,'<!--');
      if(isset($KURZ[$LINK]) and $CUT===false )
                                 $OUT .= ': »'.str_replace(' s. ',' siehe ',$KURZ[$LINK]).'«';
      if($CUT){ if( !$SPERR ) $OUT .= ': »'.trim(substr($TXT,$CUT+4),' ->') .'«';
                else $OUT .= trim(substr($TXT,$CUT+4),' ->'); }
      else if( $SPERR ) $OUT .= $FULL;
      if( $TIT=='|' ) $OUT .= '||'.$N++; else $N++;
      if( !isset($MENGE[$NN1]) ) $MENGE[$NN1]=1; else $MENGE[$NN1]++;}
   $OUT .= NL.'|-'.NL.'!-||colspan="3" style="text-align:left;"|{{Überschrift|_ohne}}'.
                                                '_Ohne die unerwünschten Stichwörter:';
   foreach( array_merge(OHNE,['OHNE (2):'],OHN2) as $KEY ){
                                 $OUT .= NL.'|-'.NL.'|';
      if(isset($OPTI [$KEY]) ){ $OUT .= '_ohne||'; $TXT= $OPTI [$KEY];} else
      if(isset($ALLbox[$KEY]) ){ $OUT .= '_ohne||'; $TXT= $ALLbox[$KEY];} else
                               { $OUT .= '_ohne||'; $TXT= ''; }
      if(isset($PHILOq[$KEY]) ) $QUE = ' $ '.$PHILOq [ $KEY]; else $QUE = '';
      if( $TXT ) $OUT .= '[[RE:'.$KEY.'|'.$KEY.']]' .$QUE;
                           else $OUT .= $KEY .$QUE;
                                 $OUT .= ' <sup>[0]</sup>||<nowiki>'.$TXT.'||'.++$N;}
   foreach( $MENGE as $KEY => $ANZ) if($KEY!='-')
      $MENG .= ' + '.$ANZ.BLK.$KEY;
   $MENG .= ' = '.($SUM=array_sum($MENGE)).' im Total plus '.($N-$SUM).' gesperrte Elemente.';
   file_put_contents( ANKER.R_R.'Input/RE-7_Alle-Abkürzungen.txt',
      BOM .str_replace(['|| xy||','[[['],['||-||','[‌[['],$OUT) .NL.'|}' .NL.
      "Legende: [0] Diese Abkürzung wird bei der »Transkription " .
      'Wikisource« nicht angewendet, weil sie doppelt vorkommt oder nicht eindeutig ist. '.
      'Möglicherweise wird sie aus einer anderen Gruppe übernommen.' .NL2.
      'Die Priorität bei mehrdeutigkeiten Abkürzungen ist wie folgt:' .NL.
      '# Philologen ' .NL.
      '# Stichwörter zu Größeren Artikeln' .NL.
// '# Der Kleine Pauly gemäss Vorwort und Verzeichnis' .NL.
      '# Artikel der RE: gemäss Register je Band' .NL.
// '# Die Liste der Abkürzungen antiker Autoren und Werktitel in der Wikipedia.'.NL.
      'Die Anzahl Schlüsselwörter je Gruppe beträgt: '.trim($MENG,' +') .NL.
      '== Einzelnachweise =='.NL.'');
   if( !isset( $MENGE['Epi.'] ) ) $MENGE['Epi.'] = 0;
   echo NLBR.EC_. ($N1=count($PHILO)).' Philologen = '.str_replace(
                                                    ['Phil. +','AutorL +'],['Phil.'.
        NLBR.EC_.(($N2=count($DKP))-$MENGE['Epi.']).' Der Kleine Pauly = ', 'AutorL'.
        NLBR.EC_ ], trim($MENG,' +') ).
        NLBR.EC_.($N1+$N2).' Elemente im Input (+DKP Epigrafik)'.dauert();
   echo NLBR.date('H:i:s').' / RE-ABKURZ für Input/RE-7_Alle-Abkürzungen.txt => '.
                 $N.' Abk. für ws/Alle Abkürzungen'.
        NLBR.EC_.dauer(TIM);
   exit; // ($N1+$N2-$N).' entfernte Schlüssel.'
}
function RE_AutorWERK( $TODO ){ // Quelle = w:Liste_der_Abkürzungen_antiker_Autoren_und_Werktitel
                   if(!$TODO ) return;
   $ABK = $WERK=$TIT= $DE=$LAGW=$AUTO=$AAA=;
   $ABKU = RE_get_csv('Input/RE-0_Autoren+Werke_1.csv');
   $OK = 0;
   $OUT = '<?php $ALLaaw = array( // Quelle = w:Liste_der_Abkürzungen_antiker_Autoren_und_Werktitel';

   if($OK) echo NLBR.''.NL.'<thead class="brown">'.
                     '</thead><tbody>';

   foreach($ABKU as $LINE){
      list($A,$W,$TIT,$DE) = explode( ';', $LINE ); // wenn $A dann $TIT==
      $WERK = trim($W );
      $TIT = trim($TIT);
      if( $A ){ $ABK= ''.$A. ''; $AUTO= $WERK; $AAA = $A;
                                                           $WERK='= '.$WERK; $LAGW=BLK;
         if( $SSS = strpos( $AUTO,' siehe ')) $AUTO= substr($AUTO,0,$SSS);}
      else $ABK= strip_tags( $ABK );
      if( !$A and $WERK and !trim($TIT.$DE) and hat_greek($WERK) ){
                            $ABK= ''.$ABK.''; } else
      if( !$A and $WERK ){ $WERK= '+ ' .$WERK;
         if ( $TIT ) $TIT = '= ' .$TIT ; } else
      if( !$A and !$WERK ){
         if($LAGW[0]=='+'){ $ABK= ''.$ABK.''; } else
         if($LAGW[0]=='='){ $ABK= ''.$ABK.''; $TIT = ''.$TIT .''  ;
                                                           $WERK= ''.$LAGW.''  ;}
                     else { $ABK=''.$ABK.''; $TIT =''.$TIT .'';}}
      if($AAA and mb_strlen($AAA)< 3 and strpos($ABK,'')===false) // AB ist zu kurz
                            $ABK='' .$ABK. ' (= zu kurz)';
      if( strpos($ABK,'')!==false )$CLAS=' class="topgray"'; else $CLAS=; // neuer Autor
      if( strpos($ABK,'')!==false )$COLO=' style="color:brown;"'; else $COLO=; // nix tun
      if(scan($W,2,BLK) and $WERK[0]=='+')$WERK=''. $WERK.'';

      $LAGW = $WERK.BLK; $TD ='<td'.$CLAS.'>';
      if( 0 ) echo NL.'<tr'.$COLO.'><td'.$CLAS.'>'.$ABK.$TD.$WERK.$TD.$TIT.$TD.$DE.'';
      if($COLO or in_array($A,['Men'])) continue;
      $OLD = $ABK;
      $ABK1 = trim( scan($OLD,1,',()') );
      $ABK2 = trim( scan($OLD,2,',()') ); if(strlen(strip_tags($ABK2))<2 ) $ABK2=;
      // if($ABK2) echo NLBR.strip_tags($OLD.'...'.$ABK1.' + '.$ABK2);
      foreach([$ABK1,$ABK2,$AUTO] as $ABK0) if ($ABK0){
         if(substr(strip_tags($WERK),0,1)=='+')
                                  $KEY = $ABK0.str_replace(['(',')'],,substr(strip_tags($WERK),1));
                             else $KEY = $ABK0;
                                  $TIT = strip_tags( $TIT );
                                  $TXT = $AUTO;
         if( $TIT and trim($DE) ) $TXT .= ' / '.trim( $TIT,' =').' / '.$DE; else
         if( trim( $TIT .$DE) ) $TXT .= ' / '.trim( $TIT,' =') .$DE;
         if( $OK ) echo NL.'
<td'.$CLAS.'>'.$KEY.$TD.$WERK.$TD.$TIT. $TD.$TXT.'';
         $TTT = str_replace("'","`", trim($TXT)); $KEY = str_replace("'","`",$KEY );
         $TXT = "'".strip_tags($KEY."'=> '".$TTT.'|'.$KEY."',");
         $POS = mb_strpos( $TXT, '=>' );
         if($KEY != $TTT )
            $OUT .= NL.mb_substr($TXT,0,$POS).sprintf('%'.max(0,30-$POS).'s',).mb_substr($TXT,$POS);
         if(strpos($WERK,'color:blue')){
            $POS = strpos($KEY,$ABK0);
            $KKK = trim( substr($KEY,0,$POS).substr($KEY,$POS+strlen($ABK0)) );
            $TXT = sprintf('%'.(mb_strlen($ABK0)+1).'s',).
                   "'".strip_tags($KKK."'=> '".$TTT.'|'.$KKK."',");
            $POS = mb_strpos($TXT, '=>' );
            $OUT.=NL.mb_substr($TXT,0,$POS).sprintf('%'.max(0,40-$POS).'s',).mb_substr($TXT,$POS);
   }}}
   if($OK) echo NL.'</tbody>
Abk.WerkTitelDeutsch
'.NL;

   file_put_contents( ANKER.AdminC.'ALLaaw.php',$OUT.NL.');?>');
   return NLBR.date('H:i:s').' / RE_AutorWERK => '.count($ABKU).
         ' Abkürzungen antiker Auoren und Werktitel aus der Wikipedia Liste'.NLBR;
}
function RE_DKP ( $TODO ){ // Abkürzungen Der Kleine Pauly in /meyers/Admin/code/DerKleinePauly.php
                 if(!$TODO ) return;
   $ABKA=$AUTOR=$NR=; $N=0;
   $DATEI = explode(NL,trim(file_get_contents(
                            ANKER.R_R.'Input/RE-0_DKP-Abkürzungen.txt'),BOM.NL));
   $OUT ='<?php $DKP = array( /* Quelle: 43 PHP_Pgm.sas / RE_DKP(); */'.NL;
   foreach($DATEI as $LINE){
      $ABK = scan( $LINE,1,TAB); $TEXT = scan(trim($LINE),2, TAB);
      if($POS=strpos($TEXT,'[z.B.,')) $TEXT = substr( $TEXT, 0,$POS);
      if($ABK[0]==='_'){$NR = $ABK; $OUT .= '//'.NL; }
        if($ABK[0]==='*' and $ABK!='*'){$NO = '// '; $ABK=substr($ABK,1);}
                                 else{$NO = ; $N++; }
      if(strpos($LINE,TAB)===0){ // Cic. ff. = eingerückt
         $ONE = $ABKA .BLK.scan(trim($LINE),1,TAB);
         $TWO = $AUTOR.BLK.scan(trim($LINE),2,TAB);
         $OUT .= "'".$ONE."'".sprintf('%'.max(0,30-mb_strlen($ONE )).'s',"=> '").$TWO ."|".$ONE."',".NL;
      } else {
         $OUT .=$NO."'".$ABK."'".sprintf('%'.max(0,30-mb_strlen($NO.$ABK)).'s',"=> '").$TEXT."|".$ABK."',".NL;
         $ABKA = trim(scan($LINE,1,BLK)); // Abkürzung Autor
         $AUTOR= trim(scan(substr($LINE,strpos($LINE,TAB)),1,BLK));}}
   file_put_contents( ANKER.AdminC.'DerKleinePauly.php',trim($OUT).NL.'); /* $DKP */ ?>');
   return NLBR.date('H:i:s').' / RE_DKP => '.$N.' Abkürzungen aus "Der Kleine Pauly".'.NLBR;
}
function RE_Doppel ( $TODO ){ // Ist der gleiche Schlüssel in zwei Listen?
                 if(!$TODO ) return;
   $N1 = $N2 = 0; // Details dieser Kombination => der Parameter
   // 2700 100.000 Grössere 5000 WP-Liste
   global $PHILO,$ALLart, $ALLart2,$DKP, $ALLaaw;
   $LIST = [$PHILO,$ALLart, $ALLart2,$DKP, $ALLaaw];
   $NAME = '$PHILO $ALLart $ALLart2 $DKP $ALLaaw';
   $TEXT =['$PHILO' => '43 PHP_Pgm.sas = Abk.+Vornamen+Götter+Kaiser+Antike Autoren+Philologen',
           '$ALLart' => 'RE_6_Werkstatt() = Alle Artikel der RE',
           '$ALLart2' => 'RE_6_Werkstatt() = Grössere Artikel',
           '$DKP' => 'RE_DKP() = Der Kleine Pauly',
           '$ALLaaw' => 'RE_AutorWERK() = w:Liste der antiken Autoren und Werktitel',];
   $ISOK =['$PHILO $ALLart' => '20 / 27',
           '$PHILO $ALLart2' => '2 / 31', '$ALLart $DKP' => '127 / 127',
           '$PHILO $DKP' => '34 / 34',
           '$PHILO $ALLaaw' =>'250 / 252', '$ALLart $ALLart2'=> '45 / 45',
         '$ALLart2 $ALLaaw' => '3 / 3', '$ALLart $ALLaaw' => '24 / 24', ];
   for( $I = 0; $I < count($LIST); $I++){
      RE_Mehrfach( $NAM=scan ($NAME, $I+1,BLK),count($LIST[$I]),$TEXT[$NAM] );
      for($J =$I+1; $J < count($LIST); $J++){ $N1++;
         RE_Double($N1, $N2,$LIST[$I],$LIST[$J],scan($NAME,$I+1,BLK),scan($NAME,$J+1,BLK),$ISOK);}}
   return NLBR.date('H:i:s').' / RE_Doppel hat die Eindeutigkeit geprüft.'.NLBR;
} // Loop,prt, $A, $B, 'A', 'B'
function RE_Double($N1, $N2, $A, $B, $NAME1, $NAME2, $ISOK){
   global $PHILO3, $ALL;
   $DLM0='X X X X ';
   $DLM1= '_ _ _ _ _ ';
   $N= 0; $NN=array($DLM0=>0,$DLM1=>0);
   foreach( $A as $KEY => $TXT)
   if( isset($B[$KEY]) and $TXT!= $B[$KEY] and isset($PHILO3[$KEY]) ){$N++;
      if( strpos( $TXT ,'[[')!==false ) $A1 = substr(scan($TXT ,1,'[|'),3);
      else if( strpos( $TXT ,'{{')!==false ) $A1 = scan($TXT ,2,'|}');
                                          else $A1 = $TXT;
      if( strpos($B[$KEY],'[[')!==false ) $B1 = substr(scan($B[$KEY],1,'[|'),3);
      else if( strpos($B[$KEY],'{{')!==false ) $B1 = scan($B[$KEY],2,'|}');
                                          else $B1 = $B[$KEY];
      if($A1==$B1){$DLM = $DLM1; $NN[$DLM1]++; $COLO='color:gray;' ;}
             else {$DLM = $DLM0; $NN[$DLM0]++; $COLO='color:black;';}
      if( isset($ALL['RE:'.$A1][0]['Text' ]) ) $A2 = BLK.$ALL['RE:'.$A1][0]['Text'];
                                          else $A2 = ' ('.$A1.')';
      if( isset($ALL['RE:'.$B1][0]['Text' ]) ) $B2 = BLK.$ALL['RE:'.$B1][0]['Text'];
                                          else $B2 = ' ('.$B1.')';
      if( isset($ALL['RE:'.$A1][0]['Anfang'])) $A2 .=' =: '.$ALL['RE:'.$A1][0]['Anfang'];
      if( isset($ALL['RE:'.$B1][0]['Anfang'])) $B2 .=' =: '.$ALL['RE:'.$B1][0]['Anfang'];
               $NT1 = $NAME1; $NT2= $NAME2;
      if(strpos( $TXT, $PHILO3[$KEY])!==false)$NT1=''.$NAME1.'';
      if(strpos($B[$KEY],$PHILO3[$KEY])!==false)$NT2=''.$NAME2.'';
      if( $N1==$N2 ) if( 1 or strpos($COLO,'black') )
              echo str_replace(['|','',''],[' | ','',' '],
         NLBR.''.$N1.'. '.NBSP.BLK.$N.'. '.$KEY.' ist doppelt:'.
         NLBR.$DLM.$NT1.': ' .str_replace(['<','>'],[' ⟨','⟩'], $TXT ).$A2.
         NLBR.$DLM.$NT2.': ' .str_replace(['<','>'],[' ⟨','⟩'], $B[$KEY]).$B2.'
'.
             ''.
         NLBR.$DLM1.'Priorität= '.str_replace(['<','>'],[' ⟨','⟩'],$PHILO3[$KEY]).'
');}
   $FFF = $NN[$DLM0].' / '.$N;
   $TYP = $NAME1.BLK.$NAME2;
   if($NN[$DLM0] == 0 or isset($ISOK[$TYP]) and $ISOK[$TYP]==$FFF)
           {$FAZIT= $FFF.' ✅'; $KOM = '.'; }
      else {$FAZIT= $FFF.' not OK'; if(isset($ISOK[$TYP]))$KOM=' statt '.$ISOK[$TYP].'.';
                                                     else $KOM=' statt ??';}
   echo NLBR.$N1.'. RE_Double: '.NBSP.NBSP.$NAME1.' ('.count($A).') und '.$NAME2.' ('.
         count($B).') haben '.$FAZIT.' anderes Ziel / gleicher Schlüssel'.$KOM.NLBR;
}
function RE_Mehrfach( $NAME, $ANZ, $TEXT ){ // Ist der gleiche Schlüssel mehrfach?
   global $PHILO3;
   $KURZ = str_replace(['PHILO' ,'DKP' ],
                        ['Philol','DerKleinePauly'],trim($NAME,'$'));
   $FULL = explode(NL,file_get_contents(ANKER.AdminC.$KURZ.'.php'));
   echo NLBR.'__RE_Mehrfach '.$NAME.' ('.$ANZ.')'.
                            ' innerhalb Datei '.$KURZ.'.php ↦ Quelle '.$TEXT;
   $CHECK = [];
   foreach($FULL as $LINE){
      $KEY = scan( $LINE, 1, '=');
      if(isset($PHILO3[$KEY]) ) // nur relevante Stichworte
      if(isset($CHECK [$KEY]) and $CHECK[$KEY] and strpos($KEY,'_Grp')===false and $KEY[0]!='/'){
         if( $CHECK [$KEY]!=substr($LINE,strlen($KEY))){$C1=''; $C2='';}
                                                    else {$C1=; $C2=; }
         echo NLBR.$C1.$NAME.$C2.': '.str_replace('<!','<',mb_substr($KEY.$CHECK[$KEY],0,100));}
      $CHECK[$KEY] = substr($LINE,strlen($KEY));
   }
}
//---------------------------------------------------------Roscher Liste der Gestalten --------------------
function array_TXT($ELE,$DLM){ // array in TEXT umwandeln
   $OUT = ;
   if(count($ELE))
      foreach( $ELE as $E)
          $OUT .= $DLM.$E;
   return $OUT;
}
function BLK_fix($TXT){
   return str_replace(BLK,NBSP,trim($TXT));
}
function LINK_ref($LINK){ // Wiki-Link Abas aufbrechen zum Lemma-Titel "Aba (Nymphe)"
   $ELE = explode('|',trim($LINK));
   if( $NUM = mb_strpos($ELE[0],'#') ) // # am Schluss abschneiden
      $ELE[0]=mb_substr($ELE[0],0,$NUM);
   return trim($ELE[0],'[]');
}
function NWS($TEXT){ // Nachweis aus Liste aufbrechen
   $TEXT = str_replace(array('|RE]],','Roscher], '),
                       array('|RE]].','Roscher]. '),$TEXT.BLK); // mit . statt ,
   $SPLIT = '. ';
   $ELE = explode('. ',trim($TEXT));
   $RE = $Ros = $R_N = $R_S = ;
   foreach($ELE as $E ){
      $I1 = strpos($E,'[[s:RE:');
      $I2 = strpos($E,'Roscher');
      if($I1!== false){
         $RE = LINK_ref( substr($E,$I1+7) );
         $TEXT= str_replace($E,,$TEXT); }
      if($I2!== false){
         $T = str_replace('Roscher]',,trim($E,'[ .'));
         $Ros = scan($T,1,BLK);
         $R_N = scan($T,2,BLK);
         $R_S = scan($T,3,BLK);
         $TEXT= str_replace($E,,$TEXT); }}
   $NWS = trim($TEXT,' .');
   return array($RE,$Ros,$R_N,$R_S,$NWS);
}
function print_r2( $VAR, $OPT=0, $NAME='Die Variable' ){ // $OPT 0 = print_r

   $O = ''.$NAME.' ist ein' .NL; // 1 = echo

   if( is_array ( $VAR ) and $OPT ){ // 2 = return
      $O .= ' "Schlüssel TAB Wert" zum Array mit '.($N=count($VAR)).' Elementen:'; // 3 = ohne Titel
      if( $OPT == 3 ) $O = '';
      if(($N=count($VAR)) > 100 ) $O .= NL.TAB.'Das sind mehr als 100 Elemente.';
      else foreach($VAR as $KEY => $VAL)
         if( is_array( $VAL) ) $O .= NL.TAB.$KEY.TAB.'Array { '.count($VAL).' }';
                                    else $O .= NL.TAB.$KEY.TAB.$VAL;
   } else // $OPT = 0
      $O .= str_replace([NL.'(',NL2,], // ? NL.'('
                  [ '(',NL ,],print_r($VAR,1));
   $O = NL.'<pre class="lh11">'.$O.'
'.NL;

   if( $OPT < 2 ) echo $O;
             else return $O;
}
function print_rbde( $VAR, $SPAL ){ // $VAR = $RBDE['S IX']

   echo '
'                                                        .NL2.// $SPAL= Spalte 1210
        '1. Überblick zum Array $RBDE mit '.($N=count($VAR)).' Elementen.' .NL;
   foreach($VAR as $KEY => $VAL) // Ziel: 1. und letztes
      if( is_array($VAL) ) echo NL.TAB.$KEY.TAB.'Array { '.count($VAL).' }'; // Lemma je Spalte zeigen
                      else echo NL.TAB.$KEY.TAB.$VAL;
   echo NL2.'2. Ein Einblick:'.
        NL2.'Spalte'.TAB.'Anf.:';
   $COLS = ['e_aN','e_AA','ersN','erst', 'c_aN','c_AA','conN','cont',];
   foreach( $COLS as $I => $CC ){
      if($I==4) echo NL.BLK.TAB.'Ende:';
                echo BLK.TAB.$CC; }
   for( $S = $SPAL; $S <= $SPAL+5; $S++ ){ echo NL;
      foreach( $COLS as $I => $CC ){
         if(isset($VAR[$CC][$S]) ) $V = $VAR[$CC][$S];
                              else $V = '.';
         if( $I==0 ) echo NL.$S .TAB.'Anf.:'.TAB.$V;
         else if($I==4 ) echo NL.BLK.TAB.'Ende:'.TAB.$V;
         else echo BLK .TAB.$V; }}
   echo '
';

}
function Rela($BESCHR,$TAG){ // Relationen finden und fixieren
   $TAG = str_replace(array('Amazone', 'das ist ','Dolione' ,'Freier der' ,'Gatte der ','Gattin des ','Gefährte des '),
                      array('Amazonen','das_ist ','Doliones','Freier_der ','Gatte_der ','Gattin_des ','Gefährte_des '),$TAG);
   $TAG = str_replace(array('Geliebte des ','Gigant' ,'Mutter de','Vater de','Schwester de'),
                      array('Geliebte_des ','Gigant (Mythologie)','Mutter_de','Vater_de','Schwester_de'),$TAG);
   if(mb_substr($TAG,0,2)=='[[') $RELATIO = LINK_ref($TAG);
                            else $RELATIO = scan($TAG,1,BLK);
   return $RELATIO;
}
function SPALTEN($ABC,$Ros,$BD,$R_N,$SP){ // Spalte / Seite Roscher vergleichen
   if($BD == ) return;
   if($Ros=='Ro') $I=0; else $I=1;
   $OFF = SPALT[$ABC][$I];
   $DELTA = -$OFF + 2*trim($R_N,'n') - (int)$SP;
   if(1<$DELTA)
      return $DELTA;
}
function WIKI_beschr($LEMMA,$WAS){
   global $link;
   $OUT = ;
   $result = mysqli_query($link,$query='select '.$WAS.' from G_LISTE where PERSON="'.
                                 str_replace(array('"',"'",'\\'),,$LEMMA).'"');
   my_error('WIKI_beschr',$query);
   if($result){
      if( $ZEILEN = mysqli_num_rows( $result) )
         if($zeile = mysqli_fetch_array($result) )
            $OUT = $zeile[0];
      mysqli_free_result($result);
   }
   if( $WAS=='BESCHREIBUNG' ) return str_replace(array('',''),array('',''),$OUT);
                         else return $OUT;
}
function WIKI_create($NAME){ // von der Gesamtliste W_1 aller Gestalten zur Datenbank W_D
   $w1 = fopen(ANKER.W_1,'rb'); // erweiterte Liste, 1:1 mit A-Z
   if($w1===false){

      echo NL.'Fehler: EXCEL blockiert die Datei "'.W_1.'".'; exit(NL.'

Pgm WIKI_create

'); }

   $HEAD = str_replace(array(BOM,'"',NL), , fgets($w1) ); // erste Zeile lesen, dabei BOM, " und NL entfernen
   $COLS = explode(';',$HEAD);
   $PRIM = $COLS[0] ;
   fclose( $w1 );
   $TXT = '/* '.ANKER.'/DB> mysql l --default-character-set=utf8 -u root --password=xxx < '.$NAME.'.txt'.NL.
         BLK3.'hostpoint: phpMyAdmin - SQL-Textdatei laden'.NL.
         BLK3.'43 PHP_Pgm.sas / wiki.php'.NL2.
             '*/ drop table if exists '.$NAME.'; /*[_END_]/* */'.NL2.
         BLK3.'create table ' .$NAME.NL;
   $DLM= BLK3.'( ';
   foreach($COLS as $C ){
      $TXT .= $DLM.sprintf('%-15s',strtoupper($C)).sprintf('%12s',ATTRIB[$C][0]); $DLM = NL.BLK3.', '; }
   $TXT .= ' );'.NL2.
         BLK3.'alter table '.$NAME.' add primary key ('.$PRIM.');' .NL.
         BLK3.'alter table '.$NAME.' add index (PERSON);' .NL.
         BLK3.'alter table '.$NAME.' comment="CREATE '.W_D.BLK.date('Y-m-d H:i').'";' .NL2.
              'truncate table '.$NAME.' ; /* erstellt: '.date('Y-m-d').' aus WIKI_create */'.NL.
              'insert '.BLK.' into '.BLK.$NAME.' values /* Spalten-Namen' .NL2.BLK2;
   $DLM = ;
   foreach($COLS as $C ){
      $TXT .= $DLM.sprintf('%-'.ATTRIB[$C][1].'s',strtoupper($C)); $DLM = ','.TAB; }
   $TXT .= ' */'.NL2 ;
   $LINES = file(ANKER.W_1); // /Wikipedia/Wiki-Liste_1.csv lesen
   $DLM = BLK;
   foreach($LINES as $N => $L ) if( $N ){
      if($N>1 and ($N-1)%500 ==0)
         $TXT.= '; /*[_END_]/* */'.NL2.'insert into '.$NAME.' values'.NL; $DLM = BLK;
      $TXT .= $DLM.'('.str_replace([NL,'";"'],[,'",'.TAB.'"'],$L).')';} $DLM = NL.',';
   file_put_contents( ANKER.W_D.$NAME.'.txt',BOM.$TXT.'; /*[_END_]/* */' );
   return ' ... Datenbank WIKI_create Tabelle der Liste als Input für den UPLOAD '.WIKI_zeit().NL.

          '

'.W_D.$NAME.'.txt ist geschrieben. '.
          'Eventuell my_error ... In diesem Fall'.NLBR.
          'als Nächstes "2 MySQL-Gestalt" starten in /RUN/ mit der Methode BOOTSTRAP.' .NLBR.
          'Test Odysseus = '.WIKI_beschr('Odysseus','BESCHREIBUNG').'

';

}
function WIKI_gestalt(){ // Tabelle G_LISTE auslesen und W_2 + W_G erstellen
   global $link;
   $ALLE = []; $MAXI = 0;
   $result = mysqli_query($link,$query='select TOT,PERSON,ANZ_R from G_LISTE');
   if($result){
      $ZEILEN = mysqli_num_rows($result);
      if(0==$ZEILEN){

         echo NL.'

Notice: Keine Einträge in der Tabelle G_LISTE.

'; exit(NL.'

Pgm WIKI_Gestalt

'); }

      while( $zeile = mysqli_fetch_array($result) ){
         $ANZ_R = $zeile['ANZ_R'];
         $ALLE[$zeile['TOT']] = array($zeile['PERSON'],$ANZ_R);
         $MAXI = max ( $MAXI, $ANZ_R);
      }
      mysqli_free_result($result);
   }
   $result = mysqli_query($link,$query=
      'select TOT,ABC,PERSON,BITMAP,NAME,GRIECHISCH,BKL,ANZ_R,BESCHREIBUNG,NACHWEIS,KBYTE from G_LISTE');
   my_error('WIKI_gestalt',$query);
   $OUT = BOM.'"Gestalt";"ABC";"TOT";"CP";"Wikipedia";"griechisch";"BKL";"KByte";"Bitmap";"Beschreibung";"Nachweise";'
                .'"Anzahl"';
   for($I=1;$I<=$MAXI;$I++)
      $OUT.=';"Rel. '.$I.'"';
   if($result){
      $ZEILEN = mysqli_num_rows($result);
      if(0==$ZEILEN){

         echo NL.'

Notice: Keine Einträge in der Tabelle G_LISTE.

'; exit(NL.'

Pgm WIKI_Gestalt

'); }

      while( $zeile = mysqli_fetch_array($result) ){
         $CP = html_entity_decode('&#'.($zeile['TOT']+190).';'); // Code-Punkt
         $TOT = $zeile['TOT']; // Nummer
         $BITMAP = $zeile['BITMAP']; // Relation
         $REFE = explode('|',$BITMAP); // Anzahl Erwähnungen in Artikeln
         $L = [];
         foreach( $REFE as $N => $R) if($R)
            if( isset($L[$ALLE[$R][0]]) ) $L[$ALLE[$R][0]]+= $ALLE[$R][1]*2; // $ALLE[$R][0] = Person
                                     else $L[$ALLE[$R][0]] = $ALLE[$R][1]; // $ALLE[$R][1] = relative Bedeutung
         arsort($L);
         $OUT .= NL.'"'.implode('";"',array_merge(
                          array($zeile['PERSON'], $zeile['ABC'], $TOT, $CP,
                                $zeile['NAME'], $zeile['GRIECHISCH'],
                                $zeile['BKL'], $zeile['KBYTE'], $BITMAP,
                                $zeile['BESCHREIBUNG'].'|',$zeile['NACHWEIS'],
                                $zeile['ANZ_R'] ),array_keys($L) ) ).'"';
      }
      mysqli_free_result($result);
   }
   if (file_put_contents(ANKER.W_2,$OUT)===false or
       file_put_contents(ANKER.W_G,$OUT)===false) return
       NL.'Fehler: EXCEL blockiert die Datei "'.W_2.'".';
   return ' ... export WIKI_gestalt als CSV-Datei für Download aus Wikipedia '.WIKI_zeit().','.NL.

          '

'.W_2.'

'.NL.
          '

'.W_G.'.

';

}
$TOT = 0; // $TOT = Anzahl Gestalten als Summe über alle Listen
function WIKI_import($NN,$ABC){ // gespeicherte Listen $ABC importieren und W_1 als Gesamtdatei 20x aufbauen
   global $TOT; // W_1 = Alle Gestalten
   $CSV = $ABC.'.csv';
   if(0== $NN){
      if(fopen(ANKER.W_1,'w')===false){
         echo BR.'Fehler: EXCEL blockiert die W_1 Datei "'.W_1.'", exit.'; return; }
      file_put_contents( ANKER.W_1,BOM.'"TOT";"BD";"ABC";"Ros";"R_N";"SP";"OK";"Datum";"R_S";'.
         '"Person";"griechisch";"BKL";"Anz_R";"Name";"RE";"Nachweis";"NWS";"Beschreibung";"Tag";'.
         '"Relatio";"BITMAP";"kByte"'.NL );
   }
   if(!file_exists(ANKER.W_0.$CSV))
      return;
   $DATUM = date ('Y-m-d H:i',filemtime( ANKER.W_0.$CSV ));
   $DLM = '";"';
   $BKL = $ANZ_R = $kByte = 0; // folgen mit UPDATE aus Wiki-6_Links.csv
   $BITMAP= ;
   $w1 = fopen( ANKER.W_1,'a'); // append
   $lines = file ( ANKER.W_0.$CSV);
   foreach ($lines as $N => $ZEILE) if($N){ // ohne Kopfzeile
      list($ABC,$NAME,$GRIECHE,$BESCHR,$NACHWEIS) = str_getcsv($ZEILE,';','"');
      $NAME = trim($NAME);
      $GRIECHE = trim($GRIECHE);
      $BESCHR = trim($BESCHR);
      $TAG = scan($BESCHR,1,',');
      $RELATIO = Rela($BESCHR,$TAG);
      $NACHWEIS= trim($NACHWEIS);
      $PERSON = LINK_ref($NAME);
      list($RE,$Ros,$R_N,$R_S,$NWS) = NWS( $NACHWEIS );
      $BD = substr ($R_S,0,1);
      $SP = scan ($R_S,2,',- ;');
      $IS_OK = SPALTEN($ABC,$Ros,$BD,$R_N,$SP);
      $EINTRAG = '"'.($TOT+$N).$DLM.$BD .$DLM.$ABC .$DLM.$Ros .$DLM.$R_N .$DLM.$SP.
                 $DLM.$IS_OK .$DLM.$DATUM .$DLM.$R_S .$DLM.$PERSON .$DLM.$GRIECHE .
                 $DLM.$BKL .$DLM.$ANZ_R .$DLM.$NAME .$DLM.$RE .$DLM.$NACHWEIS.$DLM.$NWS .$DLM.$BESCHR.
                 $DLM.$TAG .$DLM.$RELATIO.$DLM.$BITMAP .$DLM.$kByte .'"';
      fwrite($w1,$EINTRAG.NL); // in EXCEL
   }
   fclose($w1);
   $NUM = count($lines)-1;
   $TOT += $NUM;

   return ''.$ABC.''.$NUM.'';

}
function WIKI_kate($LEMMA,$WAS){
   global $link;
   $OUT = 'Kategorien '.$LEMMA.':';
   $result = mysqli_query($link,$query='select KATEGORIE from G_KATEG where PERSON="'.$LEMMA.'"');
   my_error('WIKI_kate',$query);
   if($result){
      $ZEILEN = mysqli_num_rows($result);
      if(0==$ZEILEN){

         echo NL.'

Notice: Keine Einträge in der Tabelle G_KATEG => zuerst "2 MySQL-Gestalt.bat" in /Run/ starten.

';
         exit(NL.'

Pgm WIKI_kate

'); }

      else while( $zeile = mysqli_fetch_array($result) )
         $OUT .= NLBR.$zeile[0];
      mysqli_free_result($result);
   }
   return $OUT;
}
function WIKI_katego($NAME){ // gültige Kategorien aus LEMMA lesen, in Tabelle $NAME = G_KATEG festhalten
   global $ANZ_R, $ANZ_K, $W_KAT, $NKA;
   $COLK = array('K_K','TOT','Person', 'NK','BKL','IS_OK', 'Kategorie' );
   $COLR = array('K_R','TOT','Person', 'NR','BKL','Referenz','Referenzen' );
   $COLT = array('K_T','TOT','Person', 'NT','BKL', 'Titel' );
   $COLL = array('K_L','TOT','Person', 'NL','BKL','Anz','Id','Wer', 'Link');
   $COLB = array('K_B','TOT','Person', 'NB','BKL', 'Bild' );
   $COLC = array('K_C','NK', 'Kategorie','KC', 'Person','TOT','One','KByte');
   $PRIM = $COLK[0];
   $TXT = '/* '.ANKER.'/DB> mysql l --default-character-set=utf8 -u root --password=xxx < '.$NAME.'.txt'.NL.
         BLK3.'hostpoint: phpMyAdmin - SQL-Textdatei laden'.NL.
         BLK3.'43 PHP_Pgm.sas / wiki.php'.NL2.
              '*/ drop table if exists '.$NAME.'; /*[_END_]/* */'.NL2.
         BLK3.'create table ' .$NAME.NL;
   $DLM= BLK3.'( ';
   foreach($COLK as $C ){
      $TXT .= $DLM.sprintf('%-15s',strtoupper($C)).sprintf('%12s',ATTRIB[$C][0]); $DLM = NL.BLK3.', '; }
   $TXT .= ' );'.NL2.
         BLK3.'alter table '.$NAME.' add primary key ('.$PRIM.');' .NL.
         BLK3.'alter table '.$NAME.' add index (TOT);' .NL.
         BLK3.'alter table '.$NAME.' add index (PERSON);' .NL.
         BLK3.'alter table '.$NAME.' add index (KATEGORIE);' .NL.
         BLK3.'alter table '.$NAME.' comment="CREATE '.W_D.BLK.date('Y-m-d H:i').'";' .NL2.
              'truncate table '.$NAME.' ; /* erstellt: '.date('Y-m-d').' aus WIKI_katego */'.NL.
              'insert '.BLK.' into '.BLK.$NAME.' values /* Spalten-Namen' .NL2.BLK2;
   $DLM = ;
   foreach($COLK as $C ){
      $TXT .= $DLM.sprintf('%-'.ATTRIB[$C][1].'s',strtoupper($C)); $DLM = ','.TAB; }
   $TXT .= ' */'.NL2 ;
   $O_K = WIKI_kopf(W_K,$COLK); $K_K=0; // Kategorien
   $O_R = WIKI_kopf(W_R,$COLR); $K_R=0; // Referenzen
   $O_T = WIKI_kopf(W_T,$COLT); $K_T=0; // Untertitel
   $O_L = WIKI_kopf(W_L,$COLL); $K_L=0; // Links
   $O_B = WIKI_kopf(W_B,$COLB); $K_B=0; // Bilder
   $O_C = WIKI_kopf(WCC,$COLC); $K_C=0; // Kate_complet
   $DLM = BLK; $D7 = '|';
   $DL = '";"'; $ALLE = $A_O= $KATE = [];
   $D2 = '",'.TAB.'"'; $dh = opendir(ANKER.W_I); // Verzeichnis /in WIKI/
   while(($file=readdir($dh))!==false)
      if( substr($file,0,1)!='.' ){
         $PERSON = str_replace('.txt',,$file);
         $ALLE[$PERSON] = array('TOT'=> WIKI_beschr($PERSON,'TOT'), // vollständig, mit ALLEN Gestalten
                              'KBYTE'=> WIKI_beschr($PERSON,'KBYTE'), // Grösse des WP Artikel
                                'ANZ'=> 0,
                                'MAP'=> ); // WER referenziert darauf
   }
   rewinddir();
   while( ($file=readdir($dh))!==false){
      $kByte = filesize(ANKER.W_I.$file);
      if( substr($file,0,1)!='.' and $kByte ){
         $PERSON = str_replace('.txt',,$file);
            $TOT = $ALLE[ $PERSON ]['TOT'];
         $TEXT = file_get_contents( ANKER.W_I.$file );
         $TEXT = mb_substr( $TEXT,mb_strpos($TEXT,NL) ); // ohne Kopfzeile
         if(strpos($TEXT,'


Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter Begriffe.
')!==false) $BKL = 1;

                                                    else $BKL =;
            $ALLE[ $PERSON ]['kB'] = $kByte;
         $BITMAP = ;
         $KATEGO = WIKI_referen($TEXT,NL.); // ebenso Normdaten. todo: ! todo: ! todo: ! todo:
         $REFER = WIKI_referen($TEXT,NL.'[1]'); // clustern, aber wie ?
         $TITEL = WIKI_referen($TEXT,NL.'== ', ' ==');
         $LINKS = WIKI_referen($TEXT, '', '');
         foreach( $KATEGO as $N => $K ){ // Kategorien
            if($K_K>1 and ($K_K-1)%500 ==0){
               $TXT .= '; /*[_END_]/* */'.NL2.'insert into '.$NAME.' values'.NL;
               $DLM = BLK;
            }
            $K = trim( $K);
            $ISOK = WIKI_KOK($K);
            $TXT .= $DLM.'("'.++$K_K.$D2. $TOT.$D2. $PERSON.$D2. $N.$D2. $BKL.$D2. $ISOK.$DL. $K.'")'; $DLM = NL.',';
            $O_K .= NL .'"' .$K_K.$DL. $TOT.$DL. $PERSON.$DL. $N.$DL. $BKL.$DL. $ISOK.$DL. $K.'"';
            $A_O[] .= str_replace(array('!','| ]]'),array(BLK,']]'),$K);
         }
         foreach( $REFER as $N => $K ){ // Referenzen
            $K2 = str_replace("'",,strip_tags(trim($K)));
            $LINK = WIKI_referen($K2,'|',']]');
            $K2 = str_replace($LINK,']]',$K2); // yyy entferne |yyy
            $O_R .= NL.'"'.++$K_R.$DL. $TOT.$DL. $PERSON.$DL. $N.$DL. $BKL.$DL. trim($K2,BLK.'„([{').$DL .trim($K).'"';
         }
         foreach( $TITEL as $N => $T ){ // Titel
            $T = trim($T);
            $LEN = mb_strpos($T,'==',1);
            $T = mb_substr($T,0,$LEN+2); // Tippfehler ohne BLK
            $ANKE = WIKI_referen($T,'Vorlage:','');
            $T = str_replace($ANKE,,$T); // entfernen
            $O_T .= NL.'"'.++$K_T.$DL. $TOT.$DL. $PERSON.$DL. $N.$DL. $BKL.$DL. strip_tags($T).'"';
         }
         $NB = $NL = 0;
         foreach( $LINKS as $N => $L ){ // Links und Bilder
            $L = trim ( $L );
            $WER = LINK_ref( $L );
            if( isset($ALLE[$WER]) ){ // also eine GESTALT
               $ID = $ALLE[$WER]['TOT'];
                    ++$ALLE[$WER]['ANZ'];
                      $ALLE[$WER]['MAP'] .= $D7.$TOT;
            } else
               $ID = ;
            if( isset($ALLE[$PERSON]) and $ID){ // also eine GESTALT
                    ++$ALLE[$PERSON]['ANZ'];
                      $ALLE[$PERSON]['MAP'].=$D7.$ID;
            }
            $DOT = mb_strpos($L,':');
            if( mb_substr($L,0,12)=='[[Kategorie:' )
               ; // bereits erledigt
            else if( $DOT and $DOT<=3 ) // ev. später
               ; // [[:en:xxx oder [[s: = https://de.wikisource.org/wiki/
            else if( $DOT and $DOT<=10 and in_array(mb_substr($L,0,7), // Bilder
                     array('[[Datei','[[Bild:','[[File:','[[Image','[[Porta')) ){
               $O_B .= NL.'"'.++$K_B.$DL. $TOT.$DL. $PERSON.$DL .++$NB.$DL .$BKL.$DL .$L.'"';
            } else { // Links
               if($NL == 0){ $ANZ ='$#'; $BKK =$BKL;} // $ALLE[$PERSON]['ANZ']
                      else { $ANZ = ; $BKK = ; }
               $O_L .= NL.'"'.++$K_L.$DL .$TOT.$DL .$PERSON.$DL .++$NL.$DL .$BKK.$DL .$ANZ.$DL .$ID.$DL .$WER.$DL .$L.'"';
               // 0 1 2 3 4 5 6 7 8
            }
         } // foreach
      } // if($zeile)
   } // while
   closedir($dh);
   $ELE = explode(NL,$O_L);
   $UPD = BOM.'/* mit BOM, erstellt am '.date('Y-m-d H:i:s').' mit Programm WIKI_katego in "wiki.php"'.NL.
            BLK3. 'Aufruf mit Browser: localhost / wiki.php */'.NL;
   $ANZ_R = 0;
   foreach($ELE as $N => $E) // update Liste der Gestalten
      if( strpos($E,'$#') ){
         $P = explode($DL,$E);
         $P[5] = $ALLE[$P[2]]['ANZ']; // Anz_R
         $ELE[$N] = implode($DL,$P);
         if($P[4]!= 1) $P[4] = 0; // BKL
         $ANZ_R += $P[5];
         $UPD .= NL.'update G_LISTE set BKL='.$P[4].', ANZ_R='.sprintf('%4d',$P[5]).
                      ', kByte='.sprintf('%7d',$ALLE[$P[2]]['kB']).
                      ', BITMAP="'.trim($ALLE[$P[2]]['MAP'],'|').'" '.
                      ' where G_LISTE.TOT='.sprintf('%5d',$P[1]).' limit 1; /* '.sprintf('%-35s',$P[2]).' */';
      }
   $OUT = implode(NL,$ELE); // update mySQL G_Liste
   sort($A_O);
   $A_O = array_unique($A_O); // Kateg_all
   $O_A = BOM.'"Kategorie_all";"IS_OK";"Kurz"';
   $NKA = 0;
   $LAST=;
   foreach( $A_O as $N => $E){
      $LINK = LINK_ref( $E ); // x statt y
      $KURZ = mb_substr($LINK,10); // ohne "Kategorie:"
      $ISOK = WIKI_KOK( $E );
      $O_A .= NL.'"'.$E.$DL.$ISOK.$DL.$KURZ.'"';
      if($ISOK==1){
         $ANZ = WIKI_LEMKA('Kategorie:'.$KURZ, 1); // Inhalt einer Kategorie als *.txt speichern
         if($LAST!=$KURZ) $W_KAT .=

               NL.''.++$NKA.'<a href="https://de.wikipedia.org/wiki/'.$LINK.'" target="new">'.
                  $KURZ.'</a>'.$ANZ.'Kategorie';

         $LAST = $KURZ;
      }
   }
   $dh = opendir(ANKER.W_C); // aus dem Verzeichnis /Kategorie/
   while(($file=readdir($dh))!==false)
      if( substr($file,0,1)!='.' ){
         $ANZ_K++;
         $TEXT = file_get_contents(ANKER.W_C.$file);
         $KATE = explode(NL,$TEXT);
         foreach( $KATE as $N => $K){
            $ELE = explode(TAB,$K);
            $PERSON = $ELE[2];
            if(isset($ALLE[ $PERSON ])){ $TOT=$ALLE[ $PERSON ]['TOT']; $KBYTE=$ALLE[ $PERSON ]['KBYTE'];
                                } else { $TOT=; $KBYTE=; }
            if($ELE[1]<0) $ONE =; // Unterkategorie
                     else $ONE = 1; // Element bzw. Gestalt
            $KATE[$N] = '"'.++$K_C.$DL.$ANZ_K.$DL.str_replace(TAB,$DL,$K).$DL.$TOT.$DL.$ONE.$DL.$KBYTE.'"';
         }
         $O_C .= NL.implode(NL,$KATE);
      }
   file_put_contents( ANKER.W_A, $O_A);
   file_put_contents( ANKER.W_K, $O_K);
   file_put_contents( ANKER.W_R, $O_R);
   file_put_contents( ANKER.W_T, $O_T);
   file_put_contents( ANKER.W_L, $OUT);
   file_put_contents( ANKER.W_U, $UPD);
   file_put_contents( ANKER.W_B, $O_B);
   file_put_contents( ANKER.WCC, $O_C);
   file_put_contents( ANKER.W_D. $NAME.'.txt', // Verzeichnis /Datenbank/ mit der neuen Tabelle $NAME = G_KATEG.txt
                      BOM.$TXT.'; /*[_END_]/* */' );
}
function WIKI_KOK($E){
   $KURZ = mb_substr(LINK_ref($E),10); // ohne [[Kategorie:
   if( in_array($KURZ,KATEG) or (stripos($E,'myth')!==false) ) $ISOK= 1 ;
                                                              else $ISOK='.';
   if( stripos($E,'römi')  !==false or stripos($E,'finni')!==false or
       stripos($E,'etrusk')!==false or stripos($E,'irani')!==false)$ISOK='.';
   return $ISOK;
}
function WIKI_kopf($DATEI,$COL){ // Kopfzeile schreiben
   if( fopen(ANKER.$DATEI,'w')===false )
      echo BR.'Fehler: EXCEL blockiert die Datei "'.$DATEI.'", exit.';
   else
      return BOM.'"'.implode('";"',$COL).'"';
}
function WIKI_LEMKA( $LEMMA, $LEV ){ // eine Kategorie als formatierte Textdatei speichern
   global $W_KAT, $NKA;
   if($LEV>1){ $LEMMA = RE_2(BLK,$LEMMA);
               $DET = '_'.$LEV;
               $FNAME = scan( $LEMMA,1,'&');
      } else { $DET = ;
               $FNAME = $LEMMA;
   }
   $FILE = ANKER.W_C.FileWindows($FNAME).$DET.'.txt'; // Windows Filename ohne :
   if($DET){
      $TEXT = WIKI_lesen($LEMMA,'katego'); $NEW=1; // Kategorie:Person_der_griechischen_Mythologie&pagefrom=Amphilochos+%28Sohn+des+Dryas%29
   } else if(file_exists($FILE)){
      $TEXT = file_get_contents( $FILE ); $NEW=0; // File ist bereits lokal gespeichert !
   } else {
      $TEXT = WIKI_lesen($LEMMA,'katego'); $NEW=1; // Kategorie aus WP lesen
   }
   $LENG = mb_strlen($TEXT);
   if( !$LENG or strpos($TEXT,'Diese Seite existiert nicht')!==false ){
      file_put_contents($FILE,);
      return 0;
   }
   $NEXT = strrpos($TEXT,'>nächste Seite</a>)');

   $KATE = explode( NL,trim(strip_tags($TEXT,'

'),NL.'.') ); // Kategorie mit Inhalt
   // echo NLBR.'Hallo:'.$LEV.BLK.urldecode($LEMMA); // Debug
   $NN = $KK = 0;
   if($NEW){
      foreach( $KATE as $N => $K){
         $ID = mb_strpos($K,'

');
         if($ID!==false)
            $KATE[$N] = mb_substr($K,0,$ID).mb_substr($K,strpos($K,'

')+5);

         if($DET and strpos($KATE[$N],'►')!==false)
            unset($KATE[$N]);
         else if(trim($KATE[$N])!= and !in_array(mb_substr($KATE[$N],0,9),
            array('Seiten in','Folgende ','Unterkate','Diese Kat','Es werden',
                  '(vorherig','Inhaltsve')) and mb_substr($KATE[$N],1,8)!='Commons:' ){
            if(strpos($KATE[$N],'►')!==false ) $NUM = --$KK ;
                                          else $NUM = ++$NN + 200*($LEV-1);
            $KATE[$N] = $FNAME.TAB.$NUM.TAB.$KATE[$N];
         } else unset($KATE[$N]);
      }
      file_put_contents($FILE, implode(NL,$KATE) );
      if($NEXT){
         $ANF = strrpos($TEXT,'<a href=');
         $NEW = WIKI_token(substr($TEXT,$ANF),'title=','#mw-pages',-1);
         // echo NLBR.'Next:' .$NEXT.', Len:'.strlen($TEXT).', Anf:'.$ANF.NLBR.'Hallo:'.$NEW .NL; // Debug
         $ANZ = WIKI_LEMKA($NEW, ++$LEV);

         $W_KAT.= NL.''.++$NKA.''.

                  '<a href="https://de.wikipedia.org/w/index.php?title='.str_replace('&','&',$NEW).'#mw-pages" target="new">'.

                  RE_2(BLK,scan($NEW,2,':&')).'</a> '.$LEV.''.$ANZ.'Kategorie';

      }
// https://de.wikipedia.org/w/index.php?title=Kategorie:Person_der_griechischen_Mythologie&pagefrom=Amphilochos+%28Sohn+des+Dryas%29#mw-pages
   }
   return count($KATE) + $KK;
}
function WIKI_LEMMA( $LEMMA){ // ein LEMMA lokal als Textdatei speichern, wie eine Standarseite im eLexikon
   $FILE = ANKER.$PFAD.FileWindows($LEMMA).'.txt'; // Windows ohne : im Filename
   if( file_exists ( $FILE) ) // File ist bereits lokal gespeichert !
      return 0;
   $TEXT = WIKI_lesen($LEMMA,'edit'); // Text zum Artikel lesen
   $LENG = mb_strlen( $TEXT );
   if( !$LENG or strpos($TEXT,'Diese Seite existiert nicht')!==false ){
      file_put_contents($FILE,);
      return 0;
   }
   $ELEM = WIKI_Version($LEMMA,);
   $REFE = WIKI_referen($TEXT,'[2]');
   file_put_contents($FILE,
      BOM.'WikipediA @ eLexikon.ch $ mod='.$ELEM[0][3].BLK.$ELEM[0][2].' $ by'.$ELEM[0][4].' $ size='.$ELEM[0][5].BLK.$ELEM[0][6].
          ' $ '.$LENG.' mb_char $ down='.date('Y-m-d H:i:s').' $ note='.$ELEM[0][7].
      NL2.$LEMMA.
      NL2.str_replace($REFE,'<rr>',$TEXT).NL.
      '$$$ https://de.wikipedia.org/w/index.php?title='.RE_B($LEMMA).'&action=edit $ Aufgaben/in WIKI/*.txt'.NL.
      array_TXT($REFE, NL) );
   return 1;
}
function WIKI_lesen( $LEMMA, $ACTION ){ // LEMMA in WP lesen mit 'edit','history','katego'
   global $RE_N;
   switch( $ACTION ){

      case 'history' : $VON='<ul id='; $BIS=''; $TOK= 1; $TAG=; break;

      case 'edit'  : $VON='<textarea'; $BIS='</textarea>'; $TOK=-1; $TAG=; break; // $TOK=1 ??
      case 'RE_edit' : $VON='<textarea'; $BIS='</textarea>'; $TOK=-1; $TAG=; break;

      case 'katego'  : $VON= '

'; $BIS='Abgerufen'; $TOK=-1; $TAG='

<a>'; break;
      case 'RE_kat'  : $VON='

'; $BIS='

';$TOK=-1; $TAG=; break;
      case 'RE_korr' : $VON=''; $BIS='';$TOK=-1; $TAG=; break;
      case 'Redirect': $VON=''; $BIS='';$TOK=-1; $TAG=; break; }

   $INP = file_get_contents( $GET = WIKI_URL($LEMMA,$ACTION) );
   if(in_array( $ACTION, ['RE_kat','RE_korr','Redirect']) ){
      $TEMP = mb_substr($INP, mb_strpos($INP,'vorherige Seite'));
      if($B = mb_strpos($TEMP,'#mw-pages') ) // %0A = NL, %3A = :
         $RE_N = mb_substr( $TEMP, $A = (mb_strpos($TEMP,'pagefrom=')+9),$B-$A);
      else { // $RE_N=
         echo NLBR.'WIKI_lesen '.$ACTION.': Bruch $RE_N=="" @ '.urldecode($LEMMA).NL;
         // $RE_N = mb_substr( $TEMP, 0, mb_strpos($TEMP, '&' ) );
   }}
   $INP = WIKI_token($INP,$VON,$BIS,$TOK);

   if($TOK<0) $INP = str_replace(['

  • ' ,'' ], // Kategorien
                                     ['
  • '.NL.'

  • ',''.NL.''],$INP);

       if($ACTION=='RE_edit')
          $INP = mb_substr($INP,mb_strpos($INP,'>')+1);
       return html_entity_decode( strip_tags($INP,$TAG), ENT_QUOTES|ENT_XML1, UTF8); // <textarea> < $
    }
    function WIKI_liste( $TEXT,$DATEI ){
       global $ANZ_R, $ANZ_K ;
       if($DATEI==W_U) $ANZ = $ANZ_R; else
       if($DATEI==W_C) $ANZ = $ANZ_K; else
                       $ANZ = count(file(ANKER.$DATEI))-1;

       return ''.$TEXT.''.$ANZ.''.$DATEI.''.NL;

    }
    function WIKI_read($NN,$ABC){ // W_0 Liste der Gestalten LDG schreiben
       global $BYTE;
       $Band = ROSCH[ $ABC ];
       $FILE = ANKER.W_0.$ABC.'.csv';
       if( file_exists(ANKER.W_0.$ABC.'.csv') ){ // mit oder ohne ONLINE Zugriff auf Wikipedia
          $L3 = filesize($FILE);
       } else {
          $INP = WIKI_lesen( LDG.'/'.$ABC, 'edit');
          $INP = WIKI_token($INP,'|Nachweise','[[Kategori',-1);
          $INP = str_replace(array('/mode/1up','','','|}',"'"."'"), // = kursiv in Wiki
                                   , strip_tags(html_entity_decode($INP)) ); // alles ohne Information
          $INP = str_replace(array('http://archive.org/stream/Roscher/Roscher' .$Band[0]. '#page/',
                               'http://www.archive.org/stream/Roscher/Roscher' .$Band[0]. '#page/',
                               'http://www.archive.org/stream/roscher1/Roscher'.$Band[0]. '#page/',
                               'http://www.archive.org/stream/ausfhrlicheslexi'.$Band[1].'rosc#page/',
                               'http://www.archive.org/stream/ausfhrlichesle' .$Band[1].'rosc#page/',
                               'http://www.archive.org/stream/ausfhrlichesle' .$Band[2].'rosc#page/',
                               'http://www.archive.org/stream/ausfhrlichesle' .$Band[1].'roscuoft#page/'),
                             array('Ro ','Ro ','Ro ','fh ','fh ','fh ','fh '), $INP );
          $INP = str_replace(array('|-'.NL.'| ',NL.'|'),
                             array( BR , '";"'),$INP); // Wiki => CSV
          $L3 = mb_strlen($INP);
          $OUT = trim(str_replace(NLBR,
                              '"'.NL.'"'.$ABC.'";"', $INP));
          file_put_contents($FILE, BOM.'"ABC";"Name";"griechisch";"Beschreibung";"Nachweise'.$OUT.'"');
       }
       $BYTE += $L3;
       $SEITE = SPALT[$ABC][0] + floor( (1+SPALT[$ABC][1])/2 );

       return ''.($NN+1).
             ''. $ABC .
             '<a href="http://archive.org/stream/Roscher/Roscher'.$Band[0].'#page/n'.$SEITE.

                                                             '/mode/1up">'.$Band[0].'</a>'.

             ''.SPALT[$ABC][1].
             ''.(1+$SEITE).
             ''.sprintf("%6s",number_format($L3/1024,1,',',"'")).
             ''.NL;
    }
    function WIKI_referen( $TEXT,$VON,$BIS){ // alle Tags auslesen, die mit $VON und $BIS eingeklammtert sind
       $ELE = explode($VON,'$'.$TEXT);
       unset($ELE[0]);
       foreach( $ELE as $N => $E){
          $POS = mb_strpos( $E,$BIS );
          if($POS!==false ) $ELE[$N] = str_replace(NL,BLK, $VON.mb_substr($E,0,$POS).$BIS );
                 else unset($ELE[$N]); }
       return $ELE;
    }
    function WIKI_run($MAX){ // $MAX neue LEMMA-ta lesen
       global $link;
       set_time_limit( (int)$MAX*3 );
       $result = mysqli_query($link,$query='select PERSON from G_LISTE');
       my_error('WIKI_run',$query);
       $OUT = ; $NN = $II = $EE = $FF = $GG = $BKL = 0;
       if($result){
          $ZEILEN = mysqli_num_rows($result);
          if(0==$ZEILEN){
             echo NL.'

    Notice: Keine Einträge zu PERSON in der Tabelle G_LISTE.

    '; exit(NL.'

    Pgm WIKI_run

    '); }

          else if(1)

             $OUT .= '

    diese Verarbeitung erfolgt hier OFFLINE, ohne Zugriff auf Wikipedia.';
          else while( $NN<$MAX and $zeile=mysqli_fetch_array($result) ){ $II++;
             if($NEW = WIKI_LEMMA($zeile[0]) ){
                $DAUER = substr(dauer(TIM),7);
                $OUT .= trim(scan($DAUER,1,'='),' ec').', '.(++$NN).'+ '.$zeile[0].', '.WIKI_beschr($zeile[0],'BESCHREIBUNG').NLBR;
             } else if( !file_exists(ANKER.W_I.$zeile[0].'.txt') )
                $OUT.= dauer(TIM).' ?+ '.$zeile[0].' F E H L T'.NLBR; }
          mysqli_free_result($result);
          clearstatcache(); }
       $ELIM = WIKI_referen($OUT,'|','');
       $OUT = str_replace($ELIM,'',$OUT).'

    '.NL2.BR.

           ' ... Statistik zur '.LDG.', '.date('d. M. Y').BLK.WIKI_zeit().':';
       $dh = opendir(ANKER.W_I); // Verzeichnis /in WIKI/
       while( ($file=readdir($dh))!==false)
          if( substr($file,0,1)!=='.' ){
             if( filesize(ANKER.W_I.$file) ) $FF++; else $EE++; // Anzahl echte Files, lokal gespeichert
             if(strpos(file_get_contents( ANKER.W_I.$file ),
                '


    Diese Seite ist eine Begriffsklärung zur Unterscheidung mehrerer mit demselben Wort bezeichneter Begriffe.
    ')!==false) $BKL++; }

       closedir($dh);
       $dh = opendir(ANKER.W_V); // Verzeichnis /Version/
       while( ($file=readdir($dh))!==false)
          if( substr($file,0,1)!=='.' ) $GG++; // Anzahl echte Files, lokal gespeichert
       closedir($dh);
       return

          $OUT.'

    '.
          NL. ''.$ZEILEN .' Gestalten sind in dieser Liste (= Lemmata), davon'.
          NLBR.''. $II .' online geprüft. In Summe sind'.
          NLBR.''. $FF .' Seiten erstellt mit konkretem Inhalt, dazu'.
          NLBR.''. $GG .' verfügbare Versionsgeschichten mit einer History. Die Differenz ist '.
          NLBR.''. ($GG-$FF) .' gelöschte(r) Artikel. Über '.
          NLBR.''. $BKL .' identifizierte Begriffsklärungen sind'.
          NLBR.''. $EE .' Seiten geplant, aber noch nicht erstellt. Das sind leere Files im Verzeichnis'.
               '/in WIKI/ ohne Versionsgeschichte in /Wikipedia/Version/ sowie'.
          NLBR.''.($ZEILEN-$FF-$EE).' nicht eindeutig bezeichnete Gestalten in der Liste, '.
                                                        'inkl. Begriffsklärungen '.WIKI_zeit().'.

    '.NL;

    }
    function WIKI_token($INP,$VON,$BIS,$N ){ // Token aus TEXT
       $L1 = mb_strpos( $INP,$VON); // $N: mit oder ohne die beiden Tags
       $L2 = mb_strpos( $INP,$BIS,$L1);
       if($L1===false or $L2 <= $L1) // das Anfangs- oder das End-Tag fehlt
           return ;
       if($N<0) $L1 += mb_strlen($VON); // $N<0: ohne Anfangs- und End-Tag
           else $L2 += mb_strlen($BIS); // else: mit ...
       $INP = mb_substr($INP,$L1,$L2-$L1);
       if($N>0) $INP = str_replace(NL,BLK,$INP ); // $N>0: NL => BLK
       return $INP;
    }
    function WIKI_URL( $LEMMA, $ACTION ){ // zu einem LEMMA die korrekte URL bilden
       $WIKIND = WS.'w/index.php?title=';
       if($ACTION=='RE_korr' ) return $WIKIND.'Kategorie:RE:Korrigiert&from=' .$LEMMA;
       if($ACTION=='RE_kat' ) return $WIKIND.'Kategorie:'.PAULY2 .'&from='.$LEMMA;
       if($ACTION=='Redirect' ) return $WIKIND.'Kategorie:RE:Redirect&pagefrom='.$LEMMA;
       if(strpos($LEMMA,'&page') and $ACTION=='katego') // Kategorie (nächste Seite) &pagefrom=
                                return $WIKIND.RE_B($LEMMA).'#mw-pages';
       if(substr($ACTION,0,2)=='RE' or substr($LEMMA,0,3)=='RE:' or strpos($LEMMA,'cyclopädie')!==false)
                 $URL = WS; else $URL = 'https://de.wikipedia.org/';
       $LEMMA = str_replace( BLK,'_', LINK_ref($LEMMA) ); // $ACTION = edit / exist / history / katego
       if( $ACTION=='RE_edit' ) $ACTION = 'edit';
       if( $ACTION=='RE_def' ) $ACT = ;
       else if( $ACTION=='RE_weiter') $ACT = '&redirect=no';
                                  else $ACT = '&action='.$ACTION;
       if( in_array($ACTION, ['exist','katego','RE_def']) and substr($LEMMA,3) == 'RE:' )
               $URL .= 'wiki/RE:'.str_replace('?','%3F',urlencode(substr($LEMMA,3) ));
          else $URL .= 'w/index.php?title='. urlencode( $LEMMA ).$ACT;
       return $URL;
    }
    function WIKI_Version ( $LEM, $ABC ){ // W_S history = Versionen eines LEMMA einlesen oder schreiben
       if($ABC==){$LEMMA= $LEM; $FILE= W_V. $LEMMA.'.csv' ;}
              else {$LEMMA= $LEM.'/'.$ABC; $FILE= W_S.str_replace('/','-',$LEMMA.'.csv');}
       if( file_exists( ANKER.$FILE) ){ // nur aktualisieren, wenn nötig
          $lines = file(ANKER.$FILE);
          foreach ($lines as $N => $ZEILE) if($N) // ohne Kopfzeile
             $ELE[$N-1] = explode('";"',trim($ZEILE,'"'.NL));
          return $ELE;
       }
       $OUT = ; $DLM = '; ';
       $INP = WIKI_lesen( $LEMMA, 'history');
       if( !$INP ) return;
       $INP = str_replace(array(BLK3,BLK2,';','"','AktuellVorherige',' Diskussion',' Beiträge‎','rückgängig','[automatisch gesichtet]'),
                          array(BLK, BLK, ',',"'", , $DLM, , , ),
                          trim($INP) );
       $ELE = explode(NL,$INP);
       foreach($ELE as $N => $E ){
          $D1 = 0;
          for( $I=1; $I<=4; $I++ )
             $D1 = strpos($E,BLK,$D1+1);
          $E = substr($E,0,$D1).$DLM.substr($E,$D1);
          $E = substr($E,1, 5 ).$DLM.substr($E,7);
          $D1 = strpos($E,'Bytes')+7;
          $D1 = strpos($E,BLK,$D1);
          $E = substr($E, 0 ,$D1).$DLM.substr($E,$D1);
          $E = $LEMMA.$DLM.$N.$DLM.str_replace(' Bytes ',$DLM,$E);
          $OUT.= '"'.str_replace($DLM,'";"',$E).'"'.NL;
          if($N==0) $ELEM[0] = explode($DLM,$E);
       }
       file_put_contents( ANKER.$FILE,
          BOM.'"LEMMA";"N";"Zeït";"Datum";"Autor";"Umfang";"Delta";"Zusammenfassung"'.NL.$OUT );
       return $ELEM;
    }
    function WIKI_zeit(){
       return '('.trim(scan(dauer(TIM),1,'=')).')';
    }
    /* //----------------Liste der Gestalten ------------------------
    head('+ 9_WIKI_Rohdaten', , );
    $RNN = 10;
    echo NL.'<style>table,th,td {text-align:right}</style>';
    $LOG = NL.BR2.NL.

           '

    Stammbaum zur griechischen Mythologie

    '.NL2.
           '
    '.
           '

    Programm: "localhost/meyers/Admin/code/wiki.php" aus "43 PHP_Pgm.sas" per '.date('Y-m-d H:i:s.').' mit Zugriff auf die <a href="'.
           'https://de.wikipedia.org/wiki/Liste_der_Gestalten_der_griechischen_Mythologie/A">Liste der Gestalten</a>.

    '.

            NL2.

           '<thead>'.NL.
           ''.NL.

           '</thead><tbody>'.NL;
    $NEW = $W_KAT = ;
    $BYTE = $ANZ_R = $ANZ_K = $NKA = 0;
    foreach (BUCH as $N => $ABC)
       $NEW.= WIKI_read($N,$ABC); // LDG lesen
    if($NEW==)

       $LOG.='';

    $LOG.= $NEW.
           '</tbody><tfoot>'.NL.

           ''.NL.
           '</tfoot>
    WIKI_read die Liste '.WIKI_zeit().'
    NABCBandSpalteSeitekByte
    Keine Daten gefunden
    Σ'.sprintf("%6s",number_format($BYTE/1024,1,',',"'")).'
    '.

            NL2.

           '<thead>'.NL.
           ''.
           ''.NL.

           '</thead><tbody>' .NL;
    foreach (BUCH as $N =>$ABC){

       $LOG .= WIKI_import ($N, $ABC); // ABC, #
       $ELEM = WIKI_Version(LDG,$ABC);
       if(count($ELEM) and isset($ELEM[0]) and count($ELEM[0])>=7 )
            $LOG.=''.
                  ''.NL;
       else $LOG.=''.NL;

    }
    $ELEM= WIKI_Version(LDG,);
    $LOG.= '</tbody><tfoot>'.NL.

           ''.
           ''.NL.
           ''.
           ''.
           ''.NL.
           '</tfoot>
    ... WIKI_import + WIKI_Version '.WIKI_zeit().',
    ABCGestaltenDatumZeitAutorDeltaBemerkung
    '.BLK_fix($ELEM[0][3]).'' .$ELEM[0][2] .''.BLK_fix($ELEM[0][4]).''.$ELEM[0][6] .''.str_replace('ELexikon','Hug',$ELEM[0][7]).'
    Σ'.$TOT.''.date('d. M. Y').''.W_1.'
    Einleitung'.$ELEM[0][3] .'' .$ELEM[0][2] .''.$ELEM[0][4].''.$ELEM[0][6] .''.$ELEM[0][7] .'
    ' .NL2.BR.

            WIKI_create ('G_LISTE').NL2.BR.
           WIKI_gestalt( ).NL2.BR.
           ' ... mit WIKI_run aus Wikipedia bis zu '.$RNN.' neue Seiten lesen ' .WIKI_zeit().','.NL.

                    '

    '.
           WIKI_run ( $RNN ).NLBR.
           WIKI_katego ('G_KATEG').
           ' ... nach WIKI_katego existieren bei den rund 3`200 Gestalten mit einer Seite '.WIKI_zeit().':'.NL2.
           '

    <tbody>'.NL.
           '<thead>'.
           '</thead><tbody>'.NL.
           WIKI_liste(' 4`900
    gefundenetags in den WP-SeitenZeilenDatei
    ', W_K).
           WIKI_liste(' 700
    Kategorie:Gestalt der griechischen Mythologie',W_A).
           WIKI_liste(' 100
    davon relevante Kategorien IS_OK', W_C).
           WIKI_liste(' 4`500
    Gestalten in einer Kategorie', WCC).
           WIKI_liste(' 8`900
    <ref> Einzelnachweise </ref>',W_R).
           WIKI_liste(' 7`000
    == Untertitel ==', W_T).
           WIKI_liste('72`000
    mit Text', W_L).
           WIKI_liste('44`000
    Links innerhalb der Gestalten', W_U).
           WIKI_liste(' 1`400
    mit Illustration', W_B).

           $W_KAT.

           '</tbody>
    '.NL2.BR.

           '... jetzt mit 2 MySQL-Gestalt.bat aktualisieren via '.W_U.'.'.NL2;
    echo $LOG.

           '

    '.date('H:i:s').' Ende Wiki, ' .dauer(TIM).'

    '.NL.
           '
    ' .NL.

           '</body></html>'.NL;
    $PGM = file(ANKER.AdminC.'wiki.php');
    $SAS = 6178; // Zeile im Code
    foreach( $PGM as $N => $P )
       $PGM[$N] = ($N+1).' / '.($SAS+$N).': '.BLK.trim($P);
    file_put_contents( ANKER.'/Aufgaben/Configuration/Runlog/a Wikipedia '.date('Y-m-d').'.txt',
                       strip_tags(str_replace(array('<th','<td'),TAB.'<x',$LOG)).NL.
                       trim(array_TXT($PGM,NL)) );

    • / ?>


    data _null_; /* wikiRE.php */
       %PHPCODE( "&DDNAM.www/meyers/Admin/code/wikiRE.php", SPACE=YES );
       datalines4;
    <?php // Zeile = 1273-1
    function RE_Starter ( $TODO ){ // $TODO = 0 = Abbruch
       echo RE_Anfang ( 0 ); // 0/1 = IS_PHP_D Details + <html><head>...
       echo RE_2mySQL(0,'LONG','Groessere_Art',); // 0/1 = off/on, Test-Beispiel für RE_2mySQL
       echo RE_Codierung ( ); // utf-8? BLK = Diskussion:RE-Werkstatt/Pipeline
       echo RE_crop ( 0 ); // aus einem Bild etwas ausschneiden
       echo RE_csv2wp (,';' ); // aus *.csv ins Wikipedia Format, (_Wiki, CSV/';' )
       echo RE_GALERY ( 0 ); // Schnittstelle zur Bildergallerie auf eLexikon.ch
       echo RE_JSON (0,'wikidata-lexemes.json'); //
       echo RE_PNG ( 0 ); // das Grafikformat *.tiff auf *.png wechseln
       echo RE_REN ( 0 ); // rename für viele Files *.txt
       echo RE_siehe_R ( 0,'$' ); // 0/1 = copy on/off, Lemma/$ = Mängel R-Text:$JSON-Register?
       echo RE_Statist ( 0 ); // nix
       echo RE_Tidy (0,,'a_tiny.txt'); // HTML ok? Filename in _Wiki, siehe RE:Barlaam 1
       echo RE_var_port (2,['x']); // 2 = Output RE-7, 'PHILO' = globaler Array
       echo RE_Wikidata ( 0 ); // Anlayse
    // ab hier => exit
       echo RE_NACHWEIS ( $TODO,'RE:Aemilianus 1'); // leer = alle Nachweise 20 min = 1'013'000 Zeilen
       echo RE_ABKURZ ( $TODO ); // /Admin/code/Philol.php ++ => :ws/Alle Abkürzungen
       echo RE_GROS ( $TODO ); // Grosse Artikel
       echo RE_Alle_Gly ( $TODO ); // Alle Glyphen aufzählen
       echo RE_Alle_Zch ( $TODO ); // Alle Zeichen der RE zählen
       echo RE_AutorWERK ( 0 ); // RE-0_Autoren+Werke_1.csv => /Admin/code/ALLaaw.php =WP:Liste
       echo RE_DKP ( 0 ); // RE-0_DKP-Abkürzungen.txt => /Admin/code/DerKleinePauly.php
       echo RE_Doppel ( 0 ); // Die Reihenfolge ist $ALLaaw+$DKP+$ALLart+$ALLart2+$PHILO2
    }
    function RE_finish ( $TODO ){ // Programme, die am Schluss laufen
                         if(!$TODO ) return;
      return RE_Source ( $TODO ). // Source Code konsolidieren
             RE_Artikel_n ( 0 ). // Register-Stammdaten für neue Lemma
             RE_THEbotIT ( 0,0 ). // Logfile einlesen ($OPT, $TODO)

          NL2.'

    '.date('H:i:s').' / Ende Wiki_RE am '.date('Y-m-d').
              ', '.dauer(TIM).'

    '.NL.''.NL.'</body></html>';

    }
    define( 'AdminC', '/www/meyers/Admin/code/');
    require_once 'C:/Users/info/Documents/www/meyers/code/Include.php'; // ANKER definieren
    require_once ANKER.AdminC.'compress_func.php';
    require_once ANKER.AdminC.'wiki.php';
    define( 'IS_R', false ); // $BAND=='R'
       $DATE_von = '2023'.'0815';
       $DATE_von = date("Ymd", filemtime( ANKER.R_R.'RE-4_Edit-Info_V1.csv') ); // Tag mit letztem crawl
    define( 'RUN', $DATE_von < date("Ymd") or 0 ); // RUN ist am Morgen
    define('RE_Spez_Lemma', NL. /* .csv File Scan Seite */
       'RE:Vorwort (Band I)' .';P_010002.png; III'.NL. // 1
       'RE:Abkürzungen' .';P_010008.png; XV'.NL. // 2
       'RE:Mitarbeiter-Verzeichnis (Band II)' .';P_040002.png; I'.NL. // 3
       'RE:Verzeichnis der Mitarbeiter nach dem Stand vom 1. Mai 1913;P_160001.png; III'.NL. // 4
       'RE:Register (Band XI)' .';P_220314.png;2529'.NL. // 5
       'RE:Register (Band XV)' .';P_300308.png;2521'.NL. // 6
       'RE:Wilhelm Kroll †' .';P_350001.png; I'.NL. // 7
       'RE:Register (Band XXIII)' .';P_460314.png;2521'.NL. // 8
       'RE:Vorwort (Supplementband I)' .';PS010001.png; III'.NL. // 9
       'RE:Abkürzungen (Supplementband I)' .';PS010003.png; III'.NL. // 10
       'RE:Alfred Druckenmüller †' .';PS110001.png; I'.NL. // 11
       'RE:Konrat Ziegler †' .';PS160003.png; I'.NL. // 12
       'RE:Vorwort (Register)' .';PS160011.png; XXI'.NL. // 13
       'RE:Vorbemerkung (Register)' .';PS160012.png; 1'.NL. // 14
       'RE:Benutzungshinweise (Register)' .';PS160013.png; 2'.NL. // 15
       'RE:Verzeichnis der Autoren (Register)' .';PS160014.png; 3' ); // 16 =: N_Spez_L
    define('N_Spez_L',count(explode(NL,RE_Spez_Lemma))-1);
    require_once ANKER.AdminC.'ALLaaw.php'  ; // $ALLaaw w:Abk.+Werke
    require_once ANKER.AdminC.'ALLart2.php' ; // $ALLart2 700/1700 Lemma
    require_once ANKER.AdminC.'ALLbox.php'  ; // $ALLbox 10'000 Infobox
    require_once ANKER.AdminC.'ALLjosef.php'; // JKrieg, JAnt, RE_JKJA()
    require_once ANKER.AdminC.'ALLweit.php' ; // $ALLweit = Weiterleitng
    require_once ANKER.AdminC.'DerKleinePauly.php'; // $DKP =
    require_once ANKER.AdminC.'Philol.php'  ; // $PHILO =
    if(file_exists( ANKER.AdminC.'ALLart.php')){ // $ALLart = 100'000
                          require_once ANKER.AdminC.'ALLart.php'  ; // RE_Mehrfach
         $FULL=explode(NL,file_get_contents(ANKER.AdminC.'ALLart.php'));} // Bootstrap
    else $FULL= $ALLart = [];
    define('OHNE',['Aktion','Alex','Ar','Ἀθηναιών','Alla','Atrytone',
       'Basel','Bell','Bis','Bordeaux','Brief','Buche',
       'Cal.','Cornelius','Diana','Echon','Ehe','El','Eos','Er','Ex','Fabia','Flaviae',
       'Fluß','Germ','Germanos','Gott','Hin','Igel','Indus','Index',
       'Jahr', 'K','L. 1','La','Lat.','Leben','Legion','Lex','Liber','Liste','Lix',
       'Maked','Maße','Megas','Men','M. 1','Met','Metellus','Monat','Monate','Mühle','Mut',
       'Neue','Nun',
       'Oe','Or','Ortes','Pall','Paris','Ptolemaios','Re','Res','Rom','Romanos',
       'Schrift','Scipio','Si','Sil.','Silv.','Sk','Soc.','St. 1','Stock',
       'Tages','Tan','Tur','Tus','Ver','Vir','Vol','Vorbemerkung','Vorwort','....']);
    define('OHN2',['Aphrodisias','Argos','As','Atticus','Auch','Auto', // Acta,
       'Bes','Blitz','Bonn','Brot','Buch','Claudius','Cornelius',
       'Dia','Epiklesis','Gaius','Ge','Griechen','Ham','Ionien','Iulia',
       'Karien','Knidos','Köln','Korinth','Leo','London','Los','Lykien',
       'Mainz','Male','Mel','Mus','Nymphe','Paulus','Pollus','Recht','Register','Rhetor',
       'Scheidung','Schrift','Sitten','Sol','Statue','Straßburg','Sueton','Sulla','Syn',
       'these','Tinos','Turin','Val.','Vas','York']); // Oder, Stein
    define('JOSCA',);
    define('JOSJA',);
    define('JOSJK',);
    define('EC_' ,'________ / ');
    foreach( OHNE as $LEM )
       if( isset($ALLart[$LEM])) unset( $ALLart[ $LEM], $ALLart2[$LEM] ); // unset RE:xy
          else echo NLBR.'$ALLart Fehler unset(): ' .$LEM  ;
    $ISOK = 0; $PHILO2 = $OPTI = $ALLw = $ISDONE = [];
    foreach ( $FULL as $LINE ){ // $OPTI[] = Kurztext = $ARTI['opti']
       $KEY = scan($LINE,1,"'"); $TXT = trim( scan( $LINE,2,'$') );
       if($KEY!=$TXT) $OPTI[$KEY] = $TXT; // Latein ergänzen
       if( hat_greek ($KEY) and !isset( $ALLweit[$LATI =to_latein($KEY)])) // Athe... => Ἀθη...
                                            $ALLweit[$LATI]= $KEY; }
    foreach($ALLweit as $KEY => $W ) // Weiterleitung als WS-Link
       if(isset($ALLart[$W]) )
            $ALLwei2[ $KEY ] = ''.$KEY.'';
       else if(0 and $W!='Redirect' and strpos($W,'#') === false ) // 3x: Ἀθηναιών, Ῥύμμοι, ...
            echo NLBR.'$ALLweit Irrtum: '.$KEY.' => '.$W;
    foreach($ALLart+$ALLweit as $KEY => $W ) // Artikel oder Weiterleitung
       if( !isset($ALLart[$KEY.' 1']) and
           !isset($ALLart[$KEY.' a'])) // RE:Antonius ist unerwünscht
            $ALLw['RE:' .$KEY]='a'; // aktiv
    unset ( $ALLw['RE:K'], $ALLart['K'] ); // ohne RE:K
    foreach($PHILO as $KEY => $TXT){ $OPT=; // Z i m m e r und Z i m m e r s
       $TXT = str_replace(,,$TXT);
       $PHILO2 [$KEY] = $TXT ;
       if( strpos( $TXT, ;
          else if( substr($TXT,-2)==']]' and substr($TXT,0,5)!=='[[RE:' )
                 $PHILO2 [$KEY] .= ;
          else $PHILO2 [$KEY] .= ; }
       if( $ISOK and substr($KEY,-1)!='.' ){ // +Genitiv ab Götter ff.
          if(substr($KEY,-1)=='s') $NEW = $KEY."'"; else $NEW=$KEY.'s';
          if(strpos($TXT, ;
       } elseif($CUT===false and isset($OPTI[$KEY]) and $OPTI[$KEY]!='(-)')
          $PHILO3[$KEY].= ; // optimiert
       if($CUT) $TXT = substr($TXT,0,$CUT); // SHIFT ?
       $LAB = trim( substr($TXT,strrpos($TXT,'|')+1),']}'); // Plin.]] n. h.
       $LAB =ltrim(str_replace(['}',']'],,$LAB), "̓" ); // 'Ραρία 3x
       if($LAB!= $KEY and substr( $KEY,0,6)!=='_Grp =' )
          echo NLBR.'$PHILO3 hat SHIFT: _'.$KEY.'_ != _'.$LAB.'_ @ '.$TXT; } // nicht plausibel!
    $OUT = substr(str_replace(NL.BLK4,NL, print_r($PHILO3,true) ),8,-3);
    $TXT = $KEY = ; $N=0;
    foreach( explode(NL,$OUT) as $LIN ){ // rE/RE-8_Alle-Links_V4
       if( strpos($LIN,],[$KEY,],$LIN); }
    if(0)file_put_contents(ROOT.'/meyers/project/rE/RE-8_Alle-Links_V4.txt', BOM. // $allPHILO3.txt
       '$PHILO3 = array ... [_Grp'.BLK4.BLK4.BLK4.BLK3.'Stand '.date('Y-m-d H:i').$TXT);

    $TXT = $OUT = ; // echo NLBR.'
    # '.print_r(array_count_values($PHILOq),1).'
    ';

    //---------------------------------------------------------Paulys Funktionen ------------
    function array_sumb ( $TOT ){
       return (int)$TOT['UNK']+$TOT['KOR']+$TOT['FER'] + $TOT['STOP']+$TOT['VOR'];
    }
    function FileWindows( $LEMMA ){
       if($LEMMA=='briva')$LEMMA = 'briva_';
       return str_replace(array(':','?','/','|','*'),
                          array('_','$','£','€','¢'),$LEMMA);} // Windows ohne :?/|* im Filenamen
    function hat_akzent( $TXT ){ // Διδάσκαλος
       foreach(mb_str_split($TXT ) as $T)
          if( mb_strpos(Akzent,$T)!==false ) return 'j' ;
                                                     return false;}
    function has_Band( $LEMMA, $BAND ){ // Band ist erfasst
       global $ALL;
       if( isset ( $ALL[ $LEMMA]) )
          foreach( $ALL[ $LEMMA] as $ARR) // über alle Nachträge
             if( $ARR[ 'Band'] == $BAND and isset($ARR['Data']) ) return 1; // Edit-Info existiert
                                                                    return false;}
    function J_Bd( $LEMMA, $BAND ){ // ist $Band,1 geplant?
       global $ALL;
       if(isset( $ALL[ $LEMMA]) )
          foreach( $ALL[ $LEMMA] as $J => $ARR)
             if( $ARR[ 'Band'] == $BAND) return 1 ; return 0 ;}
    function J_Bdk( $LEMMA, $BAND ){ // ist $Band geplant?
       global $ALL;
       if(isset( $ALL[ $LEMMA]) )
          foreach( $ALL[ $LEMMA] as $J => $ARR)
             if( $ARR[ 'Bdk' ] == $BAND) return 1 ; return 0 ;}
    function J_Band( $LEMMA, $BAND ){ // Index $J zum Band
       global $ALL; $N = 0;
       if(isset( $ALL[ $LEMMA]) )
          foreach( $ALL[ $LEMMA] as $J => $ARR) // Register existiert
             if( $ARR[ 'Band'] == $BAND ) return $J; else $N++; // das erste Kapitel
                                                     return $N;}
    function Jok_Band ( $LEMMA, $BAND ){ // Register-Kapitel erstellt
       global $ALL;
       foreach( $ALL[ $LEMMA] as $J => $ARR)
          if(isset($ARR[ 'Band']) and $ARR['Band']==$BAND) // alle Kapitel
                   $ALL[ $LEMMA][$J]['Data']='ok';
                                                     return 'ok';} // wahr
    function hat_greek ( $TXT ){ // Διδάσκαλος
       if( strpos($TXT,'')!==false and strpos($TXT,'') )
          $TXT = substr($TXT,strpos($TXT,'|') ); // S. 32
       foreach(mb_str_split($TXT ) as $T)
          if (mb_strpos(Greek.Asper,$T)!==false ) return true ;
                                                     return false;}
    function has_greek( $LEMMA) { // RE:Διδάσκαλος
       if( hat_greek(mb_substr($LEMMA,3) ) ) return 'j' ;
                                                     return false;}
    function mytrim ( $INP, $NACH){ // Interpunktion rechts ##
       $TXT = rtrim ( $INP, $NACH);
       if(in_array( mb_substr($TXT,-1),['’','‘','.'])) $TXT=mb_substr($TXT,0,-1);
       $TXT = rtrim ( $TXT, $NACH);
       $END = substr( $INP,strlen($TXT));
       if( substr($END,0,1)=='.' // and strlen($END)>1
                    and strpos($NACH,'.')===false ) $TXT .= '.'; // "Abk.),"
       if( $SUP=strpos($TXT,'') ) $TXT = substr($TXT,0,$SUP);
       return $TXT; }
    function leftrim ( $TXT ){ // Interpunktion links
       $TXT = ltrim ( $TXT,'"');
       if(in_array( mb_substr($TXT,0,1),['’','‘'])) $TXT=mb_substr($TXT,1);
       return ltrim ( $TXT,'"');}
    function no_akzent($TXT ){ // υπο απο
       $TXT = leftrim ($TXT );
       return str_replace(mb_str_split( Akzent. Asper),
                          mb_str_split(NoAkzent.NoAsper),$TXT);}
    function no_halb ( $TXT ){ // strip ,1 und ,2
       return str_replace([',1',',2'],,$TXT);}
    function nx_halb ( $TXT ){ // ,1 => ,2
       return str_replace(',1',',2',$TXT);}
    function RE_artt ($ARTIK ){
       $POS = strrpos($ARTIK,BLK);
       if($POS and (int)substr($ARTIK,$POS+1) ) // Empedokles 3
          return substr( $ARTIK, 0, $POS ); // Empedokles
       return $ARTIK;
    }
    function RE_JSON( $TODO, $NAME ){
       if(  !$TODO ) return;
       $FILE = file_get_contents( ANKER.'/_Wiki/'.$NAME );
       echo NLBR.'#'.substr($FILE,0,1000);
       $JSON = preg_replace('/cntrl:/', , $FILE);
       $JSON = json_decode( $JSON, true );
       echo NLBR.'#JSON: '.json_last_error().BLK.json_last_error_msg().
            NLBR.'# ';
       var_dump( $JSON );
       // print_r2( $JSON );
       exit;
    }
    function RE_same( $A,$B ){ // A A oder b b
            $A =mb_substr( $A,0,1);$B =mb_substr( $B,0,1);
       if( ($A==mb_strtoupper($A) and $B==mb_strtoupper($B)) or
           ($A==mb_strtolower($A) and $B==mb_strtolower($B)) ) return true; else return false;
    }
    function URL_exists($url){
        return str_contains(get_headers($url)[0],"200 OK");
    }
    function RE_OO($MAIN, $NEW, $NIG, $SD ){ // RE output Link
       return strip_tags(
             RE_O( $MAIN, $NEW, $NIG, $SD ), TAGS );
    }
                   $NIG_1=$NIG_2=[];
    function RE_O( $MAIN, $NEW, $NIG, $SD ){ // RE output Link
       global $NIG_1,$NIG_2,$LEGG;
       if($NIG<10) $NN= BLK3; elseif ( $NIG<100)$NN=BLK2;elseif($NIG<1000)$NN=BLK;else $NN=;
       $NEW2 = RE_genitiv ( $NEW );
       $KEYS = array_keys ($NIG_1,$NEW2 );
       $LK = array_key_last($KEYS );
       if($LK!==null) $LAST = $KEYS[ $LK ]; else $LAST= 0  ; // 1 Spalte = 68 x 6 Wörter
       if($LAST and ($NIG-$LAST)<2000)$DLM='--'; else $DLM = BLK2; // ab 2000 Wörter = Link wiederholen
    // if($SD and ($NIG-$LAST)> 100) $DLM = BLK2; // ? ab 100 W = $SD oder SperrSchrift
       if($SD ) $DLM = BLK2; // immer $SD
       if($LAST) $LLL = sprintf('%4d', $LAST); else $LLL = BLK4; // __23
       if(isset($NIG_2[$NIG])) $NIG++;
       $NIG_2[$NIG] = $NN.$LLL.$DLM.$MAIN.sprintf('%'.max(0,9-mb_strlen($MAIN)).'s',).'— '.$NEW2; // Debug
    //
       if( $POS = strpos( $NEW, .substr($NEW,$POS1);
          else return $NEW;
    }
    function mb_ucfirst($T ){
      return mb_strtoupper(mb_substr($T,0,1)).mb_substr($T,1);
    }
    function to_greek( $T ){
       return rtrim(str_replace( LAT_k, GRE_k, $T.BLK));
    }
    function to_lat ( $T ){
       return rtrim(str_replace( GRE_k, LAT_k, $T.BLK));
    }
    function to_latein ( $T ){
       $U1= $T == mb_ucfirst( $T );
       $T2= scan( $T,2,BLK);
       $U2= $T2== mb_ucfirst( $T2);
       $T= mb_strtolower(trim($T ));
       $T=str_replace([ 'αἱ', 'εἱ', 'οἱ', 'υἱ', 'αὑ', 'εὑ','οὑ'],
                      ['hai','hei','hoi','hui','hau','heu','hu'] ,$T);
       $T=str_replace([ 'αἷ', 'εἷ', 'οἷ', 'υἷ', 'αὗ', 'εὗ','οὗ'],
                      ['hai','hei','hoi','hui','hau','heu','hu'] ,$T);
       $T=str_replace([ 'ἁ', 'ἑ', 'ὅ', 'ἑ', 'ἱ' ,'ὑ','γκ','γγ','γχ', 'ῥ', 'ϋ'],
                      ['ha','he','ho','he','hi','hy','nk','ng','nch','rh','u'] ,$T);
       $T=str_replace(['α','ά','ὰ','ᾶ','ἀ','ἁ','ἄ','ἂ','ἆ','ἅ','ἃ','ἇ','ᾷ'], /* für αy = u */ 'α',$T);
       $T=str_replace(['ε','ϵ','έ','ὲ','ε','ἐ','ἔ','ἒ','ἕ','ἓ' ], /* für εy = u */ 'ε',$T);
       $T=str_replace(['η','ῃ','ή','ὴ','ῆ','ῇ','ἠ','ἡ','ἤ','ἢ','ἦ','ἧ','ᾗ','ἥ','ἣ','ἧ','ᾗ','ῇ'],'e',$T);
       $T=str_replace(['ι','ί','ὶ','ῖ','ΐ','ἰ','ἴ','ἲ','ἶ','ἵ','ἳ','ἷ','ϊ'], 'i',$T);
       $T=str_replace(['ο','ό','ὸ','ὀ','ὁ','ὄ','ὃ','ὅ','ὃ','ô' ], /* für oy = u */ 'ο',$T);
       $T=str_replace(['ρ','ϱ','ῤ','ῥ','ë','ï','j','v','w','(',')','’' ],
                      ['r','r','r','r','e','i','j','v','w', , , ] ,$T);
       $T=str_replace(['υ','ύ','ὺ','ῦ','ὐ','ὔ','ὒ','ὖ','ὕ','ὓ','ὗ' ], 'y',$T);
       $T=str_replace(['ω','ῳ','ώ','ῴ','ὼ','ῲ','ῶ','ῷ','ὠ','ὡ','ὤ','ὢ','ὦ','ὥ','ὣ','ὧ' ], 'o',$T);
       $T=str_replace(['β','γ','δ','ζ','θ', 'κ','λ','μ','ν','ξ','π','ρ','σ','ς','τ','φ', 'χ', 'ψ' ],
                      ['b','g','d','z','th','k','l','m','n','x','p','r','s','s','t','ph','ch','ps'],$T);
       $T=str_replace(['αy','εy','οy','α','ε','ο','ä', 'ö', 'ü', 'â','ç','é','è','-','ʿ'],
                      ['au','eu','u', 'a','e','o','ae','oe','ue','a','c','e','e',, ] ,$T);
       $T= to_lat($T );
       if($T2 and $U2){$P = strpos($T,BLK ) ;
                       $T = substr($T,0,$P+1).mb_ucfirst(substr($T,$P+1));}
       if( $U1) return mb_ucfirst( $T );
                       return $T  ;
    }
    function to_latin ( $TEXT ){ // sortierbar + ucfirst
       $LT = BLK;
       for($N=1; $N <= mb_strlen( $TEXT ); $N++){ // Aer8 => Aer 8
          $T = mb_substr($TEXT,$N,1);
          if( is_numeric($T) ){
             if( $LT != BLK )
                $TEXT = mb_substr($TEXT,0,$N).BLK.mb_substr($TEXT,$N);
             break;
          } else $LT = $T;
       }
       if($STRI=mb_strpos ($TEXT,'–')) $TEXT = mb_substr($TEXT,0,$STRI); // 127-138
       $TEXT = str_replace(['Abgar, Abgaros','Aqua, Aquae','Ara, Arae','Castra, Castrum'],
                           ['Abgar', 'aquae', 'AraArae', 'CastraCastrum' ],$TEXT);
       $TEXT = to_latein($TEXT);
       if( mb_substr($TEXT,1,1)==BLK ) $TEXT = mb_substr($TEXT,2); // a, e, o
       else if( mb_substr($TEXT,2,1)==BLK ) $TEXT = mb_substr($TEXT,3); // ad, ab, L., I.
                            return $TEXT ;
    }
    function myDEF( $DEFI, $K, $ANZ){ $ATTR=$KOMM = ; // Def mySQL Variable
       if( isset( $DEFI[$K]['len']) ){
          if($LEN=$DEFI[$K]['len'] ) $LLL = '('.sprintf('%4d',$DEFI[$K]['len']).')';
                                   else $LLL = '(0000)';
          if( $K == 'Key' ){ $TYP = 'int '; $ATTR='unsigned';} // add primary key
          else if($LEN >= 200 ){ $TYP = 'varchar'; $KOMM='Länge '.$LEN;}
          else $TYP = 'char'; }
                  $OUT =sprintf('%8s' ,$TYP ).$LLL.BLK.
                        sprintf('%-10s',$ATTR).' not null /* '.sprintf('%4d',$ANZ );
       if( $KOMM) $OUT.= ', '.$KOMM;
       return $OUT.' */';
    }
    function myVAR( $VAR, $ART ){ // Eigenschaften $VAR
       if($ART=='len' and is_string($VAR) ) return mb_strlen($VAR); else return 1;
    }
    function strip_tags_content($text,$tags=, $invert = FALSE) {
       preg_match_all( '/<(.+?)[\s]*\/?[\s]*>/si',trim($tags),$tags);
       $tags = array_unique( $tags[1] );
       if( is_array($tags) and count( $tags) > 0 ){
          if ( $invert == FALSE) return preg_replace
             ('@<(?!(?:'.implode('|', $tags).')\b)(\w+)\b.*?>.*?</\1>@si',,$text);
          else return preg_replace
             ('@<(' .implode('|', $tags). ')\b.*?>.*?</\1>@si',,$text);}
       elseif( $invert == FALSE) return preg_replace
             ('@<(' .'\w+)\b.*?>.*?</\1>@si',,$text);
                                 return $text;
    }
    //---------------------------------------------------------Paulys Realencyklopädie ------
    function RE_Anfang( $DET ){
       RE_var_port( 1, ['ALL'] ); // global
       define ( 'IS_PHP_D', $DET ); // 0/1=Details nein/ja

       echo BR2.NL2.'

    '.Pauly_RE.'

    ' .NL2.
           '
    ' .NL.
           '

    Programm wiki_RE am '.wochentag(date('w')).' '.date('d.m.Y').' mit '.
           'Zugriff auf die Register von <a href="'.WIKI.PAULY2.'">Paulys RE.</a>

    '.NLBR.

            date('H:i:s',TIM).' / Start ... '.dauert() .NL;
       if( RUN ){
          $S = '?Typ=RE&Text=RE-0_Stand.htm'; $WAR = 'wiki/Kategorie:RE:Wartung';
          $TAR = '" target="_blank"'; $PAU = 'wiki/Kategorie:'.PAULY2;
          echo NLBR.EC_.'RUN = true, '.
             '»Hello World« und '.'Guten Morgen :-)' .NL. // RUN = true

             '
      ' .NL.
      '
    1. ' .'PyCharm aktualisieren' .'
    2. '.NL.
      '
    3. <a href="'.WS.$WAR.$TAR.'>RE:Wartung</a> und ' .'
    4. '.NL.
      '
    5. <a href="'.WS.BEOB.$TAR.'>Beobachtungsliste 🟊</a> sowie ' .'
    6. '.NL.
      '
    7. <a href="'.ELEX.$S.$TAR.'>RE-Werkstatt/Stand</a> neu laden (FTP)' .'
    8. '.NL.
      '
    9. <a href="'.WS.$PAU.$TAR.'>Kategorie:Pauly RE</a> ab und zu kontrollieren.
    10. '.NL.
               '
    ';}

    }
    function RE_Codierung($TXT) {
       if( $TXT== ) return;
       else if( trim($TXT) ){ // Analyse der Codierung
          require_once ANKER.'/www/meyers/code/UTF8_BERO.php';

          echo BR2.NL.'
    Input: '.$TXT.NL.' => RE_OKK(): ';
          if( ($REOKK = RE_OKK($TXT)) ) echo 'Ist ein Link
    ' .NL;

                                   else echo 'Kein Link' .NL;
          $OUT = $COD = ;
          $PHILO = PHILO ($TXT, , , , ); // PHILO ($MAIN, $HAT, $ARTIK, $NIG, $SD)
          for( $I=0; $I < mb_strlen($TXT); $I++)
             if( ( $NUM = mb_ord($C=mb_substr($TXT,$I,1),UTF8)) < 128 ){ // ASCII
                   $OUT .= $C ; if($C==',') $COD.=NL.'_____: ';}
             else{ $OUT .= '*'; $CPT = strtoupper( dechex($NUM) ); // Unicode utf-8
                                $CPT = substr('00000',0,5-strlen($CPT)).$CPT;
                   $COD .= NL.TAB.$C.BLK.UTF8_BERO('U+'.$CPT); }

          echo '
    ASCII: '.$OUT.NL.' => PHILO (): '.$PHILO.'
    '.NL.
               '
    Codes: '.$COD.'
    ';

       } else if( $TXT==BLK ){ // Test der Pipeline
          $INP = file_get_contents(WS.'w/index.php?title='.
                           'Wikisource_Diskussion:RE-Werkstatt/Pipeline&action=edit' );
          $INP = substr($INP=WIKI_token($INP,'<textarea','</textarea>',-1), strpos($INP,'>')+1);
          if( $DLM='€1' )
             while( ($POS=strpos($INP,""))!==false ){
                $INP = substr($INP,0,$POS).BLK.$DLM.BLK.substr($INP,$POS+3);
                if( $DLM=='€1' ) $DLM='€2'; else $DLM='€1'; }
          $OUT = str_replace(["",'[',']','{','}', NL],
                              [ ,'(',')','(',')',BLK.NL],$INP);
          $OUT = POLYTRN($OUT, , 0, );
          echo str_replace([NL,'€1','€2',],[NLBR,'',''],NL.$OUT);}
       exit;
    }
    function RE_csv2wp($NAME,$ART){ // Begrenzungszeichen $ART: CSV, ';', 'x' 2 Spalten
                    if($NAME== ) return;
       $DIR ='C:\Users\info\Documents\_Wiki/';
       $DATEI = explode( NL, mb_substr(file_get_contents( $DIR.$NAME.'.csv'),mb_strlen(BOM) ));
       $NEW = scan ( $NAME,1,'.' ). '.txt';
       $NEW2 = scan ( $NAME,1,'.' ).'_2.txt';
       $DLM = '!'; $OUT='{|class="wikitable sortable" style="text-align:right;"';
       foreach( $DATEI as $LINE ){
          if($LINE) $OUT .= NL.'|-'.
                            NL.$DLM ;
          if( $ART=='x'){$ELE = ltrim(substr($LINE,strpos($LINE,';')+1),"'");
                            if(substr($ELE,0,1)=='"') $ELE = substr($ELE,1,-2);
                            $ELEM= [scan($LINE,1,';'), $ELE];}
          elseif($ART==CSV) $ELEM= explode( $ART,mb_substr($LINE,1,-1));
          else $ELEM= explode( $ART, $LINE );
          foreach( $ELEM as $J => $SPALTE )
             if($J==0) $OUT .= $SPALTE;
                  else $OUT .= $DLM.$DLM.$SPALTE; $DLM = '|';}
       if( $ART=='x') $OUT =
          str_replace(['£','->||','|-'.NL.'|{|class',NL.'|Artikel||','->!!','_'],
                      ['"','->' ,'|}'.NL. '{|class',NL.'!Artikel!!','->' ,BLK],substr($OUT,5));
       $OUT .= NL.'|}';
       file_put_contents( $DIR.$NEW, BOM.$OUT );
    /* $OUT = strtr ( $OUT,['
    '=>'
    ',NL.'|-'=>NL.'|- ',
                                '||'=>' || ', NL.'|' =>NL.'| ']);
       $OUT = POLYTRN($OUT,'Aal',1);
       $POS = strpos( $OUT,'{|');

       $OUT = substr( $OUT, $POS, strpos($OUT,'


       $GROLAS= $LAST; // Anzahl Teil-Artikel
       if( $OUT ) return str_replace('$','
    ',trim($OUT,'$'.BLK) );
                  else return RE_GROSUM( $ALL[$LEMMA], 'S tot', $PRT ); // $J = 0 .. x
    }
    function RE_GROSJ ( $ARTIK ) { $JJ = $TOT = 0; // $J zum Hauptartikel
       foreach( $ARTIK as $J => $ARTI )
          if( isset( $ARTI['S tot'] ) and $ARTI['S tot'] > $TOT ) {
              $JJ = $J; $TOT = (int) $ARTI['S tot'] ; }
       return $JJ;
    }
    function RE_GROSUM( $ARTIK, $TYP, $PRT){ $SUM = 0; // 'S tot', 'KB'
       foreach( $ARTIK as $J => $ARTI ){ // $J = 0 .. x
          if( 'S tot' == $TYP ) $SUM += RE_GMAX($ARTI)-(int)$ARTI['S von']+1;
          else if( isset( $ARTI [$TYP]) ) $SUM += $ARTI [$TYP];
          if( 0 and $PRT ) echo ', '.$J.'='.$SUM; }
       return $SUM; // 'KB'
    }
    function RE_GMAX ( $ARTI ){ // # Spalten je $J
       if( $MAX = (int)$ARTI ['S bis'] ); else
              $MAX = (int)$ARTI ['S von']  ;
       return $MAX;
    }
    function RE__GROSSE(){ // nicht verwendet
       $src = 'C:\Users\info\Documents\_Wiki/';
       $DIR = array_diff(scandir($src), array('..', '.')); $FILE = $NEW = ;
       foreach($DIR as $fil)
          if(strpos($fil,'.htm')){ $FILE = $src.$fil;
                                   $BD = scan($fil,1,'_' );} // V,2
       if(!file_exists($FILE)) return;
       $INP = file_get_contents($FILE);
       $OUT = substr($INP,strpos($INP,'<body>'));
       $OUT = strip_tags ($OUT, );
       $OUT = '|-'.NL.
              '|'.$BD.'||colspan="2"|'.str_replace([' (' ,')', NL ],
                                                   [']]||', , NL.'|-'.
                                                                NL.'|' .$BD.'||[[RE:' ],trim($OUT) );
       $WORD = explode(NL, $OUT ); // |II,1||Ηνίοχοι||Kiessling
       foreach( $WORD as $TXT ){
          if($POS = strpos($TXT,'RE:')){
             $END = strpos($TXT,']]||');
             $ART = substr($TXT,$POS+3,$END-$POS-3); // Hera, Heros
             $SPL = explode(',',$ART);
             $TWO = ;
             foreach($SPL as $ONE)
                $TWO .= ''.trim($ONE).', ';
             $TWO = trim($TWO,'[, ');
             $TXT = substr($TXT, 0, $POS ).$TWO.substr($TXT,$END+2); }
          $NEW .= NL.$TXT; } // Hera, Heros
       return $NEW.NL.'|-'.NL;
    }
    function RE_GR_POLY_($IN){ // Die 1600 grössten Artikel mit xxx ergänzen
       $LINE = explode(NL,$IN);
       $OUT = ;
       foreach($LINE as $TXT)
          if(hat_greek ($TXT) and strpos($TXT,'Polytonisch')==false){
             $POS = strpos ($TXT,'RE:');
             $POS = strpos ($TXT,'|',$POS)+1;
             $END = strrpos($TXT,']]');
             $TEIL = ''.substr($TXT,$POS,$END-$POS).'';
             $OUT .= NL.substr($TXT,0,$POS).$TEIL.substr($TXT,$END);
          } else $OUT .= NL.$TXT;
       return $OUT;
    }
    function loch($F,$BAND,$VON,$LEMMA){
       global $STAR, $ENDE;
       $BDSE = sprintf('%9s',$BAND).sprintf('%5d',$VON);
       if( $BAND=='R' ) $ENDE=1;
       if( $ENDE ) $EX = BLK; else
       if( 0 and in_array(trim($BDSE),array('IX A,2 1540','XXIII,2 1439','XXIII,2 1702',
           'VIII A,1 172','VIII A,1 239')) )
                   $EX = '✓'; else
       if($F < 15){$EX = '*'; $STAR++;} else $EX = BLK;
       $T = sprintf('%3d',$F);
       if($F==100) $OUT = BLK3;
              else $OUT = substr($T,0,2).str_replace(
          array('0','1','2','3','4','5','6','7','8','9'),
          array('₀','₁', '₂','₃', '₄','₅', '₆', '₇','₈', '₉'),substr($T,2,1) );
       return $OUT.BLK.$EX.$BDSE.BLK.mb_substr($LEMMA,3,20);
    }
    $MNK = 0 ; $MENGE= $KREUZ =[];
    function RE_Menge( $LEMMA, $NACHT, $TEXT, $TEST ){ // Anzahl Zeichen etc.
       global $MENGE, $KREUZ, $MNK;
       return;
       if(isset($KREUZ[$LEMMA.BLK.$NACHT ]) ) $START = $KREUZ[ $LEMMA.BLK.$NACHT ];
                                         else $START = 'I,1: 0';
       if( $NACHT == 0 ) $LEMLEN = mb_strlen($LEMMA);
                                         else $LEMLEN = strlen($NACHT)+1; // = Länge Stichwort
       $BAND = scan($START,1,':'); $SEITE = trim(scan($START,2,':'));
       $VON = (int)scan($SEITE,1,'-'); $MELD = 0;
       $BIS = scan($SEITE,2,'-'); if(!$BIS) $BIS = $VON;
       $TEXT .= '['.($BIS+1).']'; $ETC = strpos($TEXT,' etc. etc.');
       if($TEST)echo NLBR.'Test '.$LEMMA.' /'.$NACHT.'= '.$START.' | '.$ETC.' = '.NLBR.$TEXT.NLBR;
       for($S=$VON; $S<=$BIS; $S++){ $PBR = '['.($S+1).']';
          $SPALTE = $BAND.': '.z4($S); $LEN = mb_strpos($TEXT,$PBR);
          if(!$LEN){ $PBR=substr($PBR,0,-1); $LEN = mb_strpos($TEXT,$PBR); }
          if(!$LEN and !$ETC and !$MELD){
             echo NLBR.(++$MNK).BLK.'Trennung über '.($BIS-$VON+1).' Seiten | '.
                  $LEMMA.' /'.$NACHT.'= '.$START.' | '.$PBR.']'; //.NLBR.$TEXT.NLBR;
             $MELD = 1; }
          if(!isset($MENGE[$SPALTE])) $MENGE[$SPALTE] = 0;
                                      $MENGE[$SPALTE]+= $LEN + $LEMLEN;
          $TEXT = mb_substr($TEXT,$LEN+strlen($PBR));
          $LEMLEN = 0; }
    }
    $OAUTO = []; $NNEU = 0;
    function RE_Neuland( $LANG, $LEMMA, $J, $ARTI ){
       global $ALL_LEMMA,$OAUTO,$NNEU;
       $AUTOR = trim($ARTI['Autor']); $ISOK = $ANF = ;
       if( $AUTOR == 'OFF' ) $NAME = ;
                                       else $NAME = ;
       if( $AUTOR == 'OFF' ) $ARTI['Verweis'] = 'ON';
       else if(isset($OAUTO[$AUTOR]) ) $AUTOR = $OAUTO[$AUTOR];
            else if( substr($AUTOR,-1)!='.')$AUTOR .= '.';
       if( $ARTI['Verweis']=='ON' and $ARTI['Text']  != '(-)'
                             or substr($ARTI['Text'],0,2)=='s.' ){
           $ARTI['Text'] = str_ireplace('vgl.', 's.', $ARTI['Text'] );
           $ANF = substr( $ARTI['Text'],0,strpos($ARTI['Text'],'s.'));
           $TEXT = substr( $ARTI['Text'], strlen($ANF) );
           $LLL = trim(str_replace('s.', , $TEXT));
           $LL = str_replace('Nr.',, $LLL );
           $START ='s. '.str_replace('Nr.','Nr. ',$LLL).'.';
           if(!isset($ALL_LEMMA[$LL]) ) $ISOK ='?????????';
           else if( $ALL_LEMMA[$LL] == 2 ) $ISOK =' => online';
           if( isset($ALL_LEMMA[$LL.' 1'])){$ISOK .=' => auch Nr. 1)';
                                            $START = str_replace('|{',' 1|{',$START);}
           $IND = strpos($START, ' Nr. ');
           if($IND){$I2 = strpos($START,'}',$IND);
                  $START= substr($START, 0 ,$IND).'}}}}'.substr($START,$IND,$I2-$IND).'.';}
       } else if( $ARTI['Verweis']=='ON' ) $START = 's. d. Suppl.';
                                       else $START = ;
       if( has_greek( $LEMMA ) ) $SORT = to_latin(substr($LEMMA,3));
                                       else $SORT = substr($LEMMA,3);
       if(substr($SORT,0,1)=='J' ) $SORT = 'I'.substr($SORT,1);
       if(substr($SORT,0,1)=='U' or substr( $SORT,0,1)=='W')$SORT = 'V'.substr($SORT,1);
           $LEN = strpos( $SORT, BLK );
       if( $LEN and !is_numeric ( substr ( $SORT, $LEN+1, 1) ))
                                            $SORT = substr($SORT,0,$LEN).strtolower(substr($SORT,1+$LEN));
       if( 0 and $SORT==substr($LEMMA,3) ) $SORT = ; // muss Lemma in Griechisch gewandelt werden?
       if( $ARTI['Band'] [0] == 'S' ) $SORT = ;
       if( 0 < $ARTI['Nachtrag']
            and $ARTI['Band'] [0] == 'S' ) $KURZ = ;
                                       else $KURZ = RE_2( BLK, trim( $ARTI['Text' ],BLK.'='));
       if(isset($ARTI[ 'WP' ]) ) $WP = $ARTI['WP'];
                                       else $WP = ;
       if( trim($ARTI['S bis'])==) $ARTI['S bis'] = 'OFF';
       if( trim($ARTI['S bis'])!='OFF' ) $UMBRUCH= NL.'['.((int)$ARTI['S von']+1).'] '.NL;
                                       else $UMBRUCH= ;
       if( trim($ARTI['R-Vor' ])==)$ARTI['R-Vor'] = 'OFF';
       if( trim($ARTI['R-Nach'])==)$ARTI['R-Nach']= 'OFF';
       if( $ARTI['liber' ] > 2022 ){ $SCHOPF = 'ON'; $STARB = $ARTI['liber'] - 71; }
                                     else { $SCHOPF = 'OFF'; $STARB = ; }
       if(isset($ARTI[ 'Tod' ]) ) $STARB = $ARTI['Tod'];
       if( $ARTI['liber' ] ==
            and $ARTI['Geburt'] >=JJ52-78){ $SCHOPF = 'ON'; $GEBURT= trim($ARTI['Geburt']);}
                                     else $GEBURT= ;
       if(isset($ARTI['Schopf']) ) $SCHOPF = $ARTI['Schopf'];
       if( $LANG > 800 ) $SCHOPF = 'OFF';
       if(isset($ARTI['Stand']) and
         substr($ARTI['Stand'],0,2)!='un') $KORR = $ARTI['Stand' ];
                                     else $KORR = 'korrigiert';
       if( $LANG > 100 ) $VERWEIS= 'OFF';
                                     else $VERWEIS= $ARTI['Verweis'];
       if( $LANG ) $OUT = NL; else $OUT = $ISOK .NL;
       if( $LANG == 1 ){ $OUT .= "".$LEMMA." (".++$NNEU.') $s ';
          if( $ARTI['mist'] ) $OUT .= '******* Meldung '.$ARTI['mist'].BLK;
          if(  !$ARTI['Bd-R'] ) $OUT .= NL;
                                     else $OUT .= '******* bestehend *******'.NL;}
       $OUT.= '{{REDaten'
          .NL.'|BAND=' .trim($ARTI['Band' ] )
          .NL.'|SPALTE_START=' .trim($ARTI['S von'] )
          .NL.'|SPALTE_END=' .trim($ARTI['S bis'] )
          .NL.'|VORGÄNGER=' .trim($ARTI['R-Vor'] )
          .NL.'|NACHFOLGER=' .trim($ARTI['R-Nach'])
          .NL.'|SORTIERUNG=' .$SORT
          .NL.'|KORREKTURSTAND=' .$KORR
          .NL.'|KURZTEXT=' .$KURZ
          .NL.'|WIKIPEDIA=' .$WP
          .NL.'|WIKISOURCE='
          .NL.'|GND='
          .NL.'|KEINE_SCHÖPFUNGSHÖHE='.$SCHOPF
          .NL.'|TODESJAHR=' .$STARB
          .NL.'|GEBURTSJAHR=' .$GEBURT
          .NL.'|NACHTRAG=' .$ARTI['Nachtr' ]
          .NL.'|ÜBERSCHRIFT=' .$ARTI['Übersch']
          .NL.'|VERWEIS=' .$VERWEIS
          .NL.'}}';
       if( $LANG == 0 ) $OUT .=
           NL."".str_replace(' 1)','. 1)',$ARTI['fett'])." ".$ANF.$START.$UMBRUCH

          .NL.'
    ' .$AUTOR.'

    '.$NAME
          .NL. $J.TAB.' „'.$LEMMA.'“'
          .NL.'--------------------' .NL;
       if( $LANG == 1 ){
          if( $ARTI['kopf'] != ) $OUT .= NL. $ARTI['kopf' ].NL;
          if( $ARTI['name'] != ) $OUT .= NL.$ARTI['name'].BLK.$ARTI['RText'];
                                  else $OUT .= NL. $ARTI['RText'];

                                       $OUT .= NL.'
    '.$AUTOR.'

    '  ;}
       return $OUT;
    }
    function RE_Regi_at( $BAND, $AT ){
       if( strlen( $BAND) == 1 ) $NB = NBSP; else $NB =;
       if(in_array($BAND,RE_ABC) and $BAND!='z'){$BB='';$NXT=' ↦ '.RE_ABC[RE_ABCN[$BAND]+1];}
                             else if($BAND=='z'){$BB='';$NXT='';}
                                            else $BB= $NXT=  ;
       return '<a href="'.WIKI.PAULY2.'/Register/'.
               str_replace(CH160,'_',$BAND).
              '#'.urlencode(RE_B($AT)).'" target="_blank">'.$BB.$BAND.$NB.$NXT.'</a>';
    }
    function RE_REN ( $TODO ){ // rename im DIR für viele Files
       $N = 0; if(!$TODO ) return;
       $DIR = "C:\Users\info\Documents\www\meyers\RE";
       $D2 = "c:/Users/info/Documents/www/Band R";
       if( is_dir($DIR) and ($dh = opendir($DIR) )
                        and ($NUMB=count(scandir($DIR))-2 ) )
          while( $N < 150000 and($file=readdir($dh)) !==false )
             if($file!='.' and $file!='..' ){
                $TEIL = scan ( $file,2,'_.');
                $NR = (int)$TEIL;
                if(trim($TEIL,'0123456789')) echo NLBR.$TEIL;
                $NEW = 'R_'.($NR+1).'.png';
                if(!file_exists( $D2.'/'.$NEW) ){
                // rename ( $DIR.'/'.$file, $D2.'/'.$NEW );
                   $N++;
                // echo NLBR.$file.' => '.$NEW ;
                }
                set_time_limit( 3 ); // CPU pro File
             }
       return NLBR.date('H:i:s').' / RE_REN(): '.$NUMB.' Elemente sind in '.$DIR.', rename von '.
                                                    $N.' Files.' ;
    }
    /* foreach(RE_ORDER as $BD=>$B) $ORIG[ RE_BAND[$BD][0] ] = $BD; // !!! to do !!!
                $KEY = $ORIG[ substr($file,0,4) ];
                if($KEY=='I,2' and $file < 'P_010330') $KEY = 'I,1'; // stimmt nicht
                if($KEY=='V,2' and $file < 'P_090385') $KEY = 'V,1';
                $FNR =((int)substr($file,4,4)- RE_BAND[$KEY][1])*4 + RE_BAND[$KEY][2] + 2;
                if($FNR==-3)$FNR = 0;
                if($FNR>=0) $NEW = $KEY.BLK.$FNR .'.png';
                       else $NEW = $KEY.BLK.substr($file,4,4).'.png'; */
    function RE_PNG ( $TODO ){ // *.tiff => *.png
                     if(!$TODO ) return;
       $fmt = 'png'; $N = 0;
       $src = 'C:\Users\info\Documents\www\meyers\RE/';
       $out = 'C:\Users\info\Documents\www\meyers\REk/';
       $files= array_diff(scandir($src), array('..', '.'));
       foreach( $files as $fil )
          if(!file_exists($NEW = $out.scan($fil,1,'.').'.'.$fmt) and ++$N < 30000){
             $image = new Imagick($src.$fil );
             $image -> setImageFormat( $fmt ); // .xyz => .png
             $image -> thumbnailImage( 0,150); // (breit, hoch) 0,150 oder 1000,0
    // $image -> setImageType( 2 ); // schwarz-weiss
             $image -> writeImages ( $NEW, 0); // incremental files
             set_time_limit( 4 ); }
       return NLBR.date('H:i:s').' / RE_PNG(): '.$N.' Elemente in '.$out.' erstellt.';
    }
    function RE_TT( $PFAD, $NAME ){
       return NL2. '== '. $NAME.' == NewFile '.NL.
          file_get_contents($PFAD.$NAME) .NL;
    }
    function RE_Source ( $TODO ){ // PHP-Code Versionen
       if(  !$TODO ) return;
       $PFAD = ANKER .'/My SAS Files/9.4/';
       $BAK2 = ANKER.R_R .'save-csv/RE_Source_-2.txt'; // 2. Backup
       $BAK1 = ANKER.R_R .'save-csv/RE_Source_-1.txt'; // 1. Backup
       $HEUT = ANKER.R_R .'save-csv/RE_Source_00.txt'; // Guten Morgen
       $AKTU = 'C:/Users/info/Desktop/RE_Source.txt'; // Werkstatt
       $OUT = 'Backup vom '.date('Y-m-d H:i:s').str_replace(TAB,BLK4,
          RE_TT( $PFAD, '42 Include.sas' ).
          RE_TT( $PFAD, '43 PHP_Pgm.sas' ).
          RE_TT( $PFAD, '44 Main_Pgm.sas').
          RE_TT( $PFAD, '45 Home.sas' ).
          RE_TT( $PFAD, '46 Frames.sas' ) );
       if( RUN ){
          file_put_contents( $BAK2, file_get_contents( $BAK1 )); // Backup -2 Tage
          file_put_contents( $BAK1, file_get_contents( $HEUT )); // Backup -1 Tag
          file_put_contents( $HEUT, $OUT ); } // heute Morgen
       file_put_contents( $AKTU, $OUT ); // aktuell
       return NLBR.date('H:i:s').' / RE_Source mit dem täglichen Backup'.dauert();
    }
    function RE_THEbotIT( $OPT, $TODO ){
       if( !RUN and !$TODO ) return;
       $REF = WS.'w/index.php?title='.( $PAG = 'Benutzer:THEbotIT/Logs/ReScanner' );
       $INP = file_get_contents($REF.'&action=edit' );
       $INP = substr($INP=WIKI_token($INP,'<textarea','</textarea>',-1), strpos($INP,'>')+1);
       $LIN = explode(NL,$INP); $START=$DATE=$TXT=;
       foreach ($LIN as $I => $LINE)
         if(substr($LINE,0,2)=='=='){ $START = $I; $DATE = '20'.substr($LINE,2,8); }
       foreach ($LIN as $I => $LINE)
          if($I>$START and trim($LINE) and strpos($LINE,'opening task' )===false
                                       and strpos($LINE,'closing task' )===false
                                       and strpos($LINE,'Persist ' )===false
                                       and strpos($LINE,'[Start the bot Re')===false
                                       and strpos($LINE,'[Start the bot Re')===false
                                       and strpos($LINE,'--[[Benutzer:THEb')===false
            ) if($OPT) $TXT .= NLBR. ''.$LINE.'';
              else $TXT .= NLBR.EC_.''.$LINE.'';

       $TXT = BLK4.'

    ',BLK,'',''], $TXT) .'

    ';
       if( $OPT ) $TXT = NL2.'
    ' .NL.$TXT.NL.'
    '.NL; // RE-0_Stand
                  else $TXT = NL2.'
    ' .NL.$TXT.NL.'
    '; // Logfile

       if($TODO){ echo $TXT.NLBR.NLBR; exit; } // Test
           else return $TXT; // Produktion
    }
    function CHARBR( $UTF8_COD, $UTF8_SubBl ){ // Character

       if( defined('CHARBR') ) return; // Zwischentitel utf-8
       $DLM=$LALF=$LSUB=$SUB=; $I=$N=$OK=0;
       foreach( $UTF8_COD as $CHAR => $ARR ){ $N ++;
          if( $LALF!=($ALFA= UTF8_BERO ('U+'.$ARR[0] )) ) $I =0;
          if( isset( $UTF8_SubBl[ $ARR[0] ]) and
              $LSUB!=($SUB =$UTF8_SubBl[ $ARR[0] ]) and
                      $N > 200 ) $OK=1;
          $TXT= BLK.str_replace('LETTER ',,$ARR[1]).BLK; $I ++;
          foreach(['A','ALPHA'] as $BUCH )
             if( strpos( $TXT,'CAPITAL '.$BUCH.BLK)!==false or
                 strpos( $TXT,'SMALL '.$BUCH.BLK)!==false or
                 strpos( $TXT,'SYMBOL ' .$BUCH.BLK)!==false ){ $OK=1; break; }
          if( strpos( $TXT, ' ZERO ' )!==false or
                 strpos( $TXT, ' ONE ' )!==false and
                 strpos( $TXT, ' DIGIT ' )!==false ) $OK=1;
          if( $OK and $I>8) { $DLM .= $CHAR; $I=0; }
          $LALF=$ALFA; $LSUB=$SUB; $OK=0; }
       define ( 'CHARBR', $DLM ); // 'AaÀàǍǞǺȦΑάαϊẠὰᾰ'
    }
    function RE_count_chars( $INPUT ){
       $LINES = explode(BLK, $INPUT ); $unique=[];
       foreach( $LINES as $LINE )
          if($LINE =='---------' or substr ( $LINE,0,3)=='RE:') continue; else {
             $LINE = str_replace([TAB,NL,BLK],,$LINE); // gekürzt
             while( $LINE ) {
                $CHAR = mb_substr($LINE, 0, 1 );
                $LINE = mb_substr($LINE, 1 );
                if(array_key_exists($CHAR,$unique)) $unique[ $CHAR ]++;
                                               else $unique[ $CHAR ]=1; }}
       foreach( $unique as $CHAR => $ANZ )
          if( ! normalizer_is_normalized( $CHAR )){
             $NEW = normalizer_normalize( $CHAR, Normalizer::FORM_C );
             unset( $unique[ $CHAR ] );
             if(isset($unique[ $NEW ]) ) $unique[$NEW]++;
                                     else $unique[$NEW] = $ANZ;
             echo NLBR .'_'.$CHAR.'_=> _'.$NEW.'_ / wird '.$ANZ.'x normalisiert.';}
       return $unique;
    }
    function RE_diacritic( $ALFA, $CTXT ) {
       return in_array ( $ALFA,['Cyrillic Extended-A','Arabic Extended-A','Hebrew']) or
              stripos ( $CTXT, 'arabic' ) or
              stripos ( $CTXT, 'combining') or
              stripos ( $ALFA, 'diacritic') or
              stripos ( $ALFA, 'modifier' ) ;
    }
    function rechts($T){
       return 'style="text-align:right"|'.$T;
    }
    function RE_rtl( $CHAR, $ALFA ){
       if( in_array($ALFA,['Hebrew']) or in_array(
          IntlChar::charDirection($CHAR), [ IntlChar::CHAR_DIRECTION_RIGHT_TO_LEFT_ARABIC ,
          IntlChar::CHAR_DIRECTION_RIGHT_TO_LEFT,IntlChar::CHAR_DIRECTION_RIGHT_TO_LEFT_EMBEDDING,
          IntlChar::CHAR_DIRECTION_ARABIC_NUMBER,IntlChar::CHAR_DIRECTION_RIGHT_TO_LEFT_OVERRIDE ,
       ] )) return '|style="text-align:right"|';
       else return '|';
    }
    function RE_strip_text ( $NAME ){ // RE-9a_Nur-Text
       if( !file_exists($FILE = ANKER.R_R.$NAME) ){
          echo NLBR.'Datei '.$FILE.' fehlt.'; return; }
       $LININ = file($FILE);
       foreach( $LININ as $I => $LINE ) // ohne Überschriften
          if(in_array($T = mb_substr($LINE,1,5),['_____','—————'])) {
             unset( $LININ[$I ], $LININ[$I+1]);
             if( isset($LININ[$I-1]) and $T== '—————' ) $LININ[$I-1].= NL;}
          else if( $I < 5 or $T== '.....' ) unset($LININ[$I] );
       $INPUT = implode(, $LININ);
       // file_put_contents( ANKER.R_R.'RE-9a_Nur-Text-t.txt',$INPUT); // Beleg
       return [$INPUT,substr_count($INPUT,NL2)];
    }
    function RE_UTF8B( $COD, $TYP){
       if( !isset(UTF8_BLOCK($COD)[$TYP]) or
            == UTF8_BLOCK($COD)[$TYP] ) return;
       if($TYP == 'Grp' ) $ART = 'Group'; else
       if($TYP == 'Spr' ) $ART = 'Language'; else
       if(in_array($TYP,['Key',,'Typ']) ) $ART = ; else
                                                   $ART = trim($TYP,"'");
       if(in_array($TYP,['Key',,'Anz','TxT']) ){ $DLM = ; $END=  ; }
       else if( $ART == ){ $DLM = ", "; $END=""; }
       else { $DLM = ', '.$ART.": "; $END=""; }
       return $DLM.UTF8_BLOCK($COD)[$TYP].$END;
    }
    function RE_Alle_Gly ( $TODO ){
       if( RUN or  !$TODO ) return;
       global $unique; $istok=[];
       $ZEIL=$NUM=$LALF=$LSUB=$NTOT=$LCPT=0; $TAB='1 '; $NPAU =$GRP=1; $FCPT='0020';
       set_time_limit( 60 ); // RE-Display hat 2 sec
       require_once ANKER.'/www/meyers/code/UTF8_BERO.php';
       require_once ANKER.'/www/meyers/code/UTF8_Block.php';
       require_once ANKER.'/www/meyers/code/UTF8_COD.php' ;
       require_once ANKER.'/www/meyers/code/UTF8_CODE.php';
       require_once ANKER.'/www/meyers/code/UTF8_SubBl.php';
       CHARBR( $UTF8_COD, $UTF8_SubBl );
       if(!count( $unique )){
          $ANALY = RE_strip_text( 'Input/RE-9a_Nur-Text.txt' ); // Input
          $INPUT = $ANALY[0];
          $unique = RE_count_chars ( $INPUT ); } // 810 Glyphen
       echo NLBR.EC_.'RE-Alle_Gly: Nutzbare Zeichen für Paulys RE' .NLBR.
       EC_.'"Input/RE-0_Alle-Glyphen.txt" nach „Wikisource:RE-Werkstatt/Alle Glyphen“,'.NLBR.
       EC_.'"Input/RE-0_Liste-Glyphen.txt" nach „Wikisource:RE-Werkstatt/Liste'.
       ' Glyphen“ kopieren!' .NLBR.NL2;
       $OUT = str_replace('$','Alle Glyphen Unicode',LinkZch) .NL.
       'Verzeichnis der verfügbaren Glyphen (Zeichen) für '.PAULY0.' (RE),' .NL.
       'gegliedert nach Sub-Block.' .NL.
       "Fett markiert sind Glyphen, die in der RE verwendet werden." .NL2.
       '== 1. Alle Glyphen Unicode ==' .NL2.'' .NL.
       '{| class="wikitable tabelle-kopf-fixiert"' .NL.
       '!Block||Alle Glyphen Unicode (Anzahl / in RE / Codepunkte)' .NL.'|-'.NL.
       '|style="vertical-align:top;"|ASCII Zeichensatz ' .
       '[3]' .NL.
       '|TAB NL SPACE'.BRNL;
       foreach( $unique as $CHAR => $ANZ ){
          if( isset($UTF8_COD[$CHAR]) ) $COD = 'U+'.$UTF8_COD[$CHAR][0]; // Block ist in RE
          if( isset($istok[ $ALFA = UTF8_BERO($COD)]) ) $istok[$ALFA] += $ANZ;
                                                   else $istok[$ALFA] = $ANZ; }
       foreach( $UTF8_COD as $CHAR => $ARR ) // <control xy>
          if( $CHAR!='!' ) unset( $UTF8_COD [$CHAR] ); else break;
       foreach( $UTF8_COD as $CHAR => $ARR ){
          if(isset($UTF8_COD [$CHAR])) $CPT = $UTF8_COD[$CHAR][0]; else $CPT= '0022'; // \"
          if(isset($UTF8_SubBl[$CPT])) $SUB = $UTF8_SubBl[$CPT];
          if( strlen($CPT)==4 ) $COD ='U+0'.$CPT; else $COD='U+'.$CPT;
          if($LALF!= ($ALFA=UTF8_BERO( $COD )) and $LALF ) { // neue Gruppe
             if(isset( $istok[$ALFA])) $LINK = '[['.KopfZch.'Alle Zeichen#Box '.$ALFA. // $LINK
                                             '|'.$ALFA.']] ';
                                  else $LINK = $ALFA. ' ';
             $REF ='<ref'.NL.'name="A'.++$GRP.'">' .NL."".$LINK."" .NL. // Cite error: Ungültige <ref>-Verwendung: „ref“ ohne Namen muss einen Inhalt haben.
                    '('.str_replace([": ,",", ,"],
                                    [':' ,',' ],RE_UTF8B($COD,'Anz').
                     RE_UTF8B($COD,'Typ').ucwords(RE_UTF8B($COD,'Spr')).',' .NL.
                    '[https://symbl.cc/en/unicode/blocks/'.RE_UTF8B($COD,'Key').
                    ' symbl.cc])' ) .BRNL.
                     str_replace(CRLF,BR2,RE_UTF8B($COD,'TxT')).BR.NBSP.NL.'</ref>';
             $OUT .= BRNL.'
    ('.$ZEIL." / ".$NPAU." / [[".KopfZch. // Zwischensumme
                    'Liste Glyphen#'.$LALF.'|U+'.$FCPT.'–U+'.$LCPT.']])' .NL;
             if( $ALFA ) $OUT .= '|-'.NL.'|style="vertical-align:top;"|'.$LINK.BLK.$REF .NL.
                                 RE_rtl($CHAR,$ALFA).''; // (94 / U+00A0)
             $NUM += $ZEIL; $NTOT+=$NPAU; $ZEIL=$NPAU =0; $FCPT=$CPT; }
          else if(  !$LALF ) /* nix im Anfang */ ;
          else if( mb_strpos( CHARBR, $CHAR) !== false) $OUT .= BRNL;
          else if( $LSUB  != $SUB or // Subblock
                  RE_diacritic($ALFA,$UTF8_CODE[$CPT])) $OUT .='   '; $ZEIL++; // Diakritische
          if(isset($unique[$CHAR])){ $BOLD="'"; $NPAU++; } else $BOLD=;
          if( $ALFA ) $OUT.= $BOLD.str_replace('|','|',$CHAR).$BOLD.BLK; // = 1 Zeichen
          $LALF=$ALFA; $LSUB=$SUB; $LCPT=$CPT; }
       $SUMMA = gg($NUM).' / '.($NTOT-1).' verschiedene, benannte Glyphen / in RE sind '.
              'in '.($GRP-1) .' / '.count($istok).' Blöcke gegliedert.' .NL;
       $OUT = str_replace(" ",BLK,$OUT). '|-'.NL. // bereinigen
              '!style="vertical-align:top;text-align:left;" colspan="2"|'.$SUMMA .'|}'.NL2.// Schluss

              '== 2. Anmerkungen =='.NL.'
    1. ', '
    2. ','
    3. '.NL. "ASCII Zeichensatz" .
         ' = American Standard Code for Information Interchange.' .
         str_replace(CRLF,BR2,UTF8_BLOCK('U+0030')['TxT']).BRNL.NBSP.'
    ' .NL;

       file_put_contents(ANKER.R_R.'Input/RE-0_Alle-Glyphen.txt',BOM.$OUT); ///////////////////////
       $OUT = str_replace('$','Liste der Glyphen',LinkZch) .NL.
       '== Liste der Glyphen ==' .NL2.
       "Die grosse Liste zeigt alle benannten Glyphen mit ihrer Häufigkeit".
       ' (Anzahl oder keine) in der RE.' .NL2.
       "Fett markiert sind Glyphentexte, die in der RE verwendet werden." .NL2.
       '' .NL.
       '{| class="wikitable tabelle-kopf-fixiert" style="line-height:1.1em;"' .NL.
       '!Glyphen' .NL.
       '!style="text-align:left"|Liste 1: ASCII Zeichensatz'.NL.
       '!Anzahl';
       $GRP = 1; $ZEIL= $NPAU=$NTOT=$LSUB=0;
       foreach( $UTF8_COD as $CHAR => $ARR ){ $CPT = $UTF8_COD[ $CHAR ][0];
          if( $CHAR == '\"' ) $CHAR= '"' ; // \"
          if( strlen($CPT )==4 ) $COD ='U+0'.$CPT; else $COD='U+'.$CPT;
          if( $LALF!=($ALFA=UTF8_BERO( $COD )) and $LALF ){ if( $ZEIL-1 ) // neue Gruppe
             $OUT .= NL.'|-'.NL.'!' .$ZEIL.' / '.$NPAU.
                '||colspan="2" style="text-align:left"|'.$LALF.''; // Zwischensumme
             if(isset( $istok[$ALFA]) ) { $LANZ = 'Anzahl';
                        $LIN1 = 'Glyphen';
                        $LIN2 = ''.$ALFA.''; } // $LINK
                 else { $LIN1 = 'Glyphen'; $LIN2 = $ALFA; $LANZ = 'keine'; }
             if( $ALFA ) $OUT .= NL.'|-'.NL.'!' .$LIN1 .NL. // Neuer Block
                    '!style="text-align:left"|Liste '.++$GRP.': '.$LIN2.NL.'!'.$LANZ;
             $NUM += $ZEIL; $TO1=$ZEIL=$NPAU=0; }
          if(isset($unique[$CHAR])){$BOLD=""; $NPAU++;
                                    $ANZP='||' .rechts(g2($unique[$CHAR])); }
                              else {$BOLD= ; $ANZP='||';}
          if( $ALFA ){
             if(isset($UTF8_SubBl[$CPT]) and $LSUB!=($SUB=$UTF8_SubBl[$CPT]) ) // Subblock
                $OUT .= NL.'|-'.NL.'|colspan="2"|     '.$SUB.'||';
             $OUT .= NL.'|-'.NL. // = 1 Zeichen
                '|'.str_replace('|','|',$CHAR).'||'.
                $BOLD.trim(str_replace(['small',BLK3],['small  ',BLK],ucfirst(
                strtolower( $UTF8_CODE[$CPT] ))),'<>').$BOLD.$ANZP; }
          $LALF=$ALFA; $LSUB=$SUB; $ZEIL++; }
       $OUT .= NL.'|-'.NL.'!colspan="3" style="text-align:left;"|'.$SUMMA .'|}'.NL; // Endsumme
       file_put_contents(ANKER.R_R.'Input/RE-0_Liste-Glyphen.txt', BOM.$OUT);
       echo NLBR.dauer(TIM).NL; exit;
    }
    define('KopfZch' ,'Wikisource:RE-Werkstatt/');
    define('LinkZch','

    Realencyclopädie der classischen Altertumswissenschaft'.NL.

                     '

    [[Bild:{{{BILD}}}|220px|Realencyclopädie der classischen Altertumswissenschaft'.NL.
                     ']]
    $
    {{{SONSTIGES}}}
    [[c:{{{COMMONS}}}|Bilder und Medien bei Commons]]
    [[q:{{{WIKIQUOTE}}}|Zitate bei Wikiquote]]
    Eintrag in der GND: {{{GND}}}
    Weitere Angebote

    ' .NL.
                     'Alle Zeichen der RE |' .NL.
                     'Alle Glyphen Unicode |' .NL.
                     'Liste Glyphen' .NL.'-----'.NL );
    $unique = [];
    function RE_Alle_Zch ( $TODO ){ // Alle Zeichen
       if( RUN or  !$TODO ) return;
       global $unique;
       $TOT=$TO1=$ZEIL=$NUM=$LALF=0; $TAB='1 '; $GRP=1;
       set_time_limit( 60 ); // RE-Display hat 2 sec
       require_once ANKER.'/www/meyers/code/UTF8_BERO.php' ;
       require_once ANKER.'/www/meyers/code/UTF8_Block.php';
       require_once ANKER.'/www/meyers/code/UTF8_COD.php'  ;
       require_once ANKER.'/www/meyers/code/UTF8_CODE.php' ;
       require_once ANKER.'/www/meyers/code/UTF8_SubBl.php';
       CHARBR( $UTF8_COD, $UTF8_SubBl );
       $ANALY = RE_strip_text( 'Input/RE-9a_Nur-Text.txt'); // Input
       $INPUT = $ANALY[0]; $NNL = $ANALY[1]; // Anzahl Absätze
       if(!count($unique ))
                 $unique = RE_count_chars ( $INPUT );
       ksort( $unique, SORT_STRING );
       echo NLBR.EC_.'RE-Alle_Zch: Häufigkeit der Zeichen in Paulys RE' .NLBR.
                 EC_.'"Input/RE-0_Alle-Zeichen.txt" nach „Wikisource:RE-Werkstatt'.
                 '/Alle Zeichen“ kopieren!' .NLBR.NL2;
       $OUT = str_replace('$','Alle Zeichen der RE',LinkZch) .NL.
         'Das Verzeichnis aller Zeichen in '.PAULY0.' (RE) – nur Text ohne ' .NL.
         'Formatierung – in der Codierung utf-8 (Unicode) ist wie folgt zu lesen:' .NL.
         '* Quelle ist eine ['.ELEX.'?Typ=RE&Text=RE-9a_Nur-Text_V3.zip Textdatei]'.
         ' (37 MB als .zip) aus dem Download in der'.
         ' RE-Werkstatt (Juni 2023) und symbl.cc' .NL.
         '* '.g2($SUM=mb_strlen($INPUT)).' Multibyte-Zeichen, im Total ~100 MB' .NL.
         '* Sortiert nach Alphabet (Block) mit Link zur Codetabelle und Fussnote als Erläuterung'.NL.
         '* Glyphen als konkrete Darstellung eines Zeichens.' .NL2.
         '== 1. Alle Zeichen der RE ==' .NL2.'' .NL.
         '{| class="wikitable tabelle-kopf-fixiert"' .NL.
         '!Alphabet (Block)||Alle Zeichen der RE (Häufigkeit / Anzahl)' .NL.'|-'.NL.
         '|style="vertical-align:top;"|ASCII Zeichensatz '.
         '[1]' .NL.
         '|TAB NL SPACE (nicht gezählt)'.BRNL."";
       foreach( $unique as $CHAR => $ANZ ){
          if( isset($UTF8_COD[$CHAR])) $CPT = $UTF8_COD[$CHAR][0]; else $CPT='0022'; // \"
          if( strlen($CPT)==4 ) $COD ='U+0'.$CPT; else $COD='U+'.$CPT;
          if( $LALF!=($ALFA=UTF8_BERO( $COD )) and $LALF ){
             $LINK=''.str_replace(BLK,NBSP,$ALFA) .
                    '
    ';
             $REF ='[2]';
             $OUT.=NBSP."
    (".gg($TO1).' / '.$ZEIL.')' .NL.'|-'.NL. // Zwischensumme
                   '|style="vertical-align:top;"|'.$LINK.BLK.$REF .NL.
                   RE_rtl( $CHAR, $ALFA ).""; // Neuer Block
             $NUM += $ZEIL; $TOT+=$TO1; $ZEIL = $TO1=0; }
          else if(  !$LALF ) /* nix im Anfang */ ;
          else if( mb_strpos( CHARBR,$CHAR )!==false ) $OUT .= "".BRNL."";
          else if(RE_diacritic($ALFA,$UTF8_CODE[$CPT])) $OUT .='   '; // Diakritische
          $OUT .= str_replace('|','|',$CHAR).BLK; // = 1 Zeichen
          $LALF = $ALFA; $ZEIL++; $TO1 +=$ANZ; }
       $SUMMA = '!style="vertical-align:top;text-align:left;" colspan="2"|'.g2($TOT). // Endsumme
          ' Glyphen sind in Paulys RE digitalisiert, gegliedert in ' .$NUM.
          ' verschiedene Glyphen in '.$GRP.' Blöcken'.BRNL .''.g2($SUM-$TOT).
          ' Leerzeichen
    (SPACE Wortgrenze, TAB Tabulator, NL neue Zeile),' .NL.
          'davon '.gg($NNL).' Absätze (NL)'.NLBR.gg($SUM).' Zeichen'; // -'.NL.$SUMMA .NL.'
       else $OUT = BOM.'"'.date('Y-m-d H:i:s').CSV.'S'.CSV.'Link zu einer Wikipedia'.CSV.'Hinweis'.CSV.'Kurztext"';
       echo ' ab dem Lemma '.$ANFA.' ('.$OPTI[$ANFA].') auf Zeile '.substr_count(NL.$OUT,NL).':'.NLBR;
       foreach( $ELEM as $LINE ){ // alle Lemmata
          set_time_limit( 15 ); // getrusage() nutzen?
          $DEF = explode( CSV, $LINE );
          $LEMMA = $LEM = substr($DEF[0], 4 );
          if($ANFA) if($ANFA!=$LEMMA) continue;
                 else {$ANFA = ; continue;}
          if($WP = $DEF[4] ){
             $OUT .= NL.'"RE:'.$LEMMA.CSV .CSV.$WP .CSV.'✓' .CSV.$OPTI[$LEMMA].'"';
             echo '+, '; continue; }
          if($LAUF =(int)substr($LEMMA,strrpos($LEMMA,BLK)) and $LAUF!=1){
             $OUT .= NL.'"RE:'.$LEMMA.CSV .CSV .CSV.'#' .CSV.$OPTI[$LEMMA].'"';
             echo $LEMMA.'#, '; continue; }
          if( $LAUF==1 and isset( $OPTI[$LEM=substr($LEM,0,strrpos($LEM,BLK))] )){
             $OUT .= NL.'"RE:'.$LEMMA.CSV .CSV .CSV.'1' .CSV.$OPTI[$LEMMA].'"';
             echo $LEMMA.'#, '; continue; }
          $ISOK= 0;
          if(hat_greek($LEM)){ $S = 'el'; // Test: $LEM = 'Αντήνωρ ο Μιλήσιος';
             if( URL_exists( $URL = 'https://'.$S.'.wikipedia.org/wiki/'.RE_B($LEM) ))
                $ISOK = $S; }
          else foreach(SPRA as $S => $SPRACHE) if($S!='el')
             if( URL_exists( $URL = 'https://'.$S.'.wikipedia.org/wiki/'.RE_B($LEM) )){
                $ISOK = $S; break; }
          if($ISOK){$OUT .= NL.'"RE:'.$LEMMA.CSV.$S.':'.CSV.$URL.CSV.SPRA[$S].CSV.$OPTI[$LEMMA].'"';
                    echo $LEMMA.'✓ '; $NN++;}
             else { $OUT .= NL.'"RE:'.$LEMMA.CSV .CSV .CSV.'nix' .CSV.$OPTI[$LEMMA].'"';
                    echo $LEMMA.', '; }
          if( fmod(++$I,10)==0 ) file_put_contents( ANKER.R_R.$FILE, $OUT );
          if( $I >= 20 ) break; }
       return NLBR.NLBR.date('H:i:s').' / '.$FILE.' => '.$NN.' neue Referenzen bei '.($I+1).
              ' geprüften Lemmata, bis Zeile '.substr_count(NL.$OUT,NL).'.';
    }
    function SPERR( $INP, $TAG, $NEW1,$NEW2, $TY ){ // TAG aus HTML => WIKI-Code umwandeln
       $NXT = $INP; $OUT = ; $NN = 0; // Loops
       if( $TY == 0 ) { $TYP = ''; $TY2 = $TYP;} // In/Out ist HTML
                  else { $TYP = '}}'; $TY2 = ; } // In/Out ist Wiki-Format
       if($TYP=='') $GT = '>'; else $GT = ;
       $PLUS = strlen( $TYP);
       $LEN = strlen( $TAG); // ' style="font-weight:bold;">'
       $POS = strpos($INP,$TAG);
       while($POS!==false and $NN++ < 700999){
          $END = strpos($INP,$TYP,$POS); // das schliessende Span
          $OBJ = substr($INP,$POS+$LEN,$END-$POS-$LEN);
          $NXT = substr($INP,$END+$PLUS);
          if(substr($OBJ,-1)==BLK){ $OBJ =rtrim($OBJ); $NXT = BLK.$NXT;}
          if($NEW1==$NEW2 and hat_greek($OBJ) ) // greek + kursiv
             $OUT.= substr($INP,0,$POS).$GT .$OBJ.$TY2; // nix tun
          else {
             if( strpos($OBJ,'$$$') ){
                $OBJ = str_replace( ' $$$', '$$$' ,$OBJ);
                $OBJ = str_replace( '$$$',$NEW2.'$$$'.$NEW1,$OBJ);}
             $OUT.= substr($INP,0,$POS).$GT .$NEW1. $OBJ.$NEW2.$TY2 ;}
          $INP = $NXT;
          $POS = strpos($INP, $TAG); }
       return $OUT.$NXT;
    }
    function newLEMMA($ISNEW, &$LEMMA, &$ARTIK ){ // ein neues Lemma bestimmen
    // echo 'L/'.$ISNEW.'/'.$LEMMA.'/'.$ARTIK.'';
       global $ALLw, $ALLweit, $ALLart;
       if( $P =strpos($ISNEW,'{{SperrSchrift') ) $ISNEW = substr($ISNEW,0,$P);
       $ISNEW = trim($ISNEW,'[:]'); $ISOLD = $ISNEW;
       if( isset( $ALLweit[$ISNEW]) ) $ISNEW = $ALLweit[$ISNEW]; // Weiterleitung
       if( (int)$ISNEW or in_array( trim ( $ISNEW,'])'),['a','aa','aaa','b','c', // Unterartikel
                               'd','e','f','g','h','i','j','k','l','m','n','o','p']) ){
          $ISNEW = str_replace( [BLK,'.'],[,')'], $ISNEW ); // 1 a => 1a, 23.36 => 23)
          if( $P= strpos($ISNEW,')'))$ISNEW = substr($ISNEW,0,$P); // 3) => 3
          if(($P=strrpos($ARTIK,BLK)) and (int)substr($ARTIK,1+$P) ) // Aqua, Aquae 7
               $LEMMA = 'RE:'.substr($ARTIK,0,$P).BLK.trim($ISNEW,']),.');
          else $LEMMA = 'RE:'. $ARTIK .BLK.trim($ISNEW,']),.');
          if( isset($ALLw[$LEMMA ]) ) return; // Narses 13
          if( isset($ALLw[$LEMMA.'.']) ) { $LEMMA.='.'; return;} // Sempronius 88ff.
          $TT = 'RE:'.substr($ARTIK,0,strrpos($ARTIK,BLK)).BLK.scan($ISNEW,1,'-');
          if( isset($ALLw[$TT ]) ) { $LEMMA =$TT; return;} // Neilos 1a-f
          $TT = 'RE:'.to_latein( substr($LEMMA,3) );
          if( isset($ALLw[$TT ]) ) { $LEMMA =$TT; return;} // Ἀνδρών 9a
          if( substr($LEMMA,0,7)=='RE:Aal ') $LEMMA ='RE:Aal'; // nicht RE:Aal 2
          return; } // nix gefunden (int)
       if( (int)scan($ISNEW,2,BLK) ) // Aal 2)
            $T1 = trim(scan($ISNEW,1,BLK) ,'.,').BLK.trim(scan($ISNEW,2,BLK),')');
       else if( (int)scan($ISNEW,3,BLK) ) // Aqua, Aquae 3
            $T1 = trim(scan($ISNEW,1,BLK).BLK.scan($ISNEW,2,BLK),'.,').BLK.trim(scan($ISNEW,3,BLK),')');
       else $T1 = 'xy';
            $T2 = trim( $ISNEW,'(),. ');
       foreach([$T1,$T2] as $T) if($T!='xy' ){ $ARTIK= $T  ;
          if(isset($ALLart[ $ARTIK])) break;
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= $ISNEW  ;
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= $T .' 1';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= $T .' 2';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= $T .' 3';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= $T .' a';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK=str_replace('ff.',,$T);
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= to_latein ($T)  ;
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= to_latein ($T).' 1';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= to_latein ($T).' 2';
          if(isset($ALLw['RE:'.$ARTIK])) break; $ARTIK= RE_greek ($T, 0);
          if(isset($ALLw['RE:'.$ARTIK])) break;}
       if($ARTIK )
          $LEMMA = 'RE:'.$ARTIK;
    }
    function RE_ltr( &$TXT, $HAT ){ // left trim NL.'([,'
                      $TMP = leftrim (ltrim($TXT,NL."'([," ));
       if($TMP!=$TXT){$KLA = mb_substr($TXT, 0 ,mb_strlen( $TXT)-mb_strlen($TMP));
                      $TXT = $TMP;}
                 else $KLA = ;
       if(substr($TXT,0,15)=='
       foreach( $GRUEN as $LINE ){ // hat Links
          $DEF = explode( CSV, mb_substr($LINE,1,-1) ); $LEMMA = $DEF[0];
          if(isset( $ALL[$LEMMA][0] ) ) $ALL [$LEMMA][0]['grün'] = $DEF[1];
          else if($MSG) echo NLBR.'Lemma grün '.$LEMMA.' fehlt?'; }

       $NNH2=120000; $NAMEN=[]; $TD=''; $NN2=0;
       if($MSG) echo '';
       foreach( $INFOS as $LINE){ // c. Info Lua-Fehler in Modul:RE, Zeile 445: Es wurde der Parameter BAND nicht gesetzt, dieser ist notwendig
          $DEF = explode( CSV, mb_substr($LINE,1,-1) ); $NEW=0; // $J = $DEF[ 2]
          $J = J_Band ( $LEMMA=$DEF[0],$DEF[16] ); // Band = $DEF[16]
          if( strpos(RE_Spez_Lemma,$LEMMA.';')!==false and !isset($ALL[$LEMMA][0]['n_abc']) ){
                                         $ALL[$LEMMA][0]['n_abc'] = ++$NNH2; $NEW=1;
          }else if(!isset($ALL[$LEMMA])){$ALL[$LEMMA] = [];
             if($MSG) echo NLBR.z2(++$NN).': Warnung: Ein Lemma fehlt im Register '.
                           RE_Regi_at($DEF[12],substr($LEMMA,3)).' unter '.$LEMMA; $NEW=1;}
          if(!isset($ALL[$LEMMA][$J]) ){ $ALL[$LEMMA][$J] = [];
             if( $J and strpos(RE_Spez_Lemma, $LEMMA.';')===false and $MSG )
                echo NLBR.z2(++$NN).': Info: Der Band '.RE_Regi_at($DEF[12],substr($LEMMA,3)).
                             ' hat auch einen Nachtrag '.$J.' zu '.$LEMMA; $NEW=1;}
          $ALL[$LEMMA][$J]['Quell' ] = 'RE-4_Info';
          $ALL[$LEMMA][$J]['Data' ] = Jok_Band($LEMMA,$DEF[16]); // alle Beiträge sind ok
          $ALL[$LEMMA][$J]['Nachtrag'] = $J ;
          $ALL[$LEMMA][$J]['Nr' ] = $DEF[ 1];
          $ALL[$LEMMA][$J]['RE Autor'] = $DEF[ 3];
          $ALL[$LEMMA][$J]['KB' ] = $DEF[ 5];
          $ALL[$LEMMA][$J]['Plaus' ] = $DEF[ 7];
          $ALL[$LEMMA][$J]['Diskus' ] = $DEF[ 9];
          $ALL[$LEMMA][$J]['Sperre' ] = $DEF[10];
          $ALL[$LEMMA][$J]['Wleit' ] = $DEF[11];
          $ALL[$LEMMA][$J]['Datum' ] = $DEF[12];
          $ALL[$LEMMA][$J]['Anfang' ] = $DEF[13];
          $ALL[$LEMMA][$J]['Band-1' ] = $DEF[16];
          $ALL[$LEMMA][$J]['S von-1' ] = $DEF[17];
          $ALL[$LEMMA][$J]['S bis-1' ] = $DEF[18];
          $ALL[$LEMMA][$J]['Vor-1' ] = $DEF[19];
          $ALL[$LEMMA][$J]['Nach-1' ] = $DEF[20];
          $ALL[$LEMMA][$J]['SORTIERUNG'] = $DEF[21];
          $ALL[$LEMMA][$J]['Stand' ] = $DEF[22];
          $ALL[$LEMMA][$J]['Text' ] = $DEF[23]; // Kurztext aktuell
          $ALL[$LEMMA][$J]['Schopf' ] = $DEF[27];
          $ALL[$LEMMA][$J]['ist†' ] = $DEF[28];
          $ALL[$LEMMA][$J]['ist*' ] = $DEF[29];
          $ALL[$LEMMA][$J]['NACHTRAG'] = $DEF[30];
          $ALL[$LEMMA][$J]['ÜBERSCHRIFT']= $DEF[31];
          $ALL[$LEMMA][$J]['VERWEIS' ] = $DEF[32];
          if($NEW){
             $ALL[$LEMMA][$J]['Scan' ] = $DEF[ 6];
             $ALL[$LEMMA][$J]['Band' ] = trim($ALL[$LEMMA][$J]['Band-1' ]);
             $ALL[$LEMMA][$J]['S von'] = $ALL[$LEMMA][$J]['S von-1'] ;
             $ALL[$LEMMA][$J]['S bis'] = $ALL[$LEMMA][$J]['S bis-1'] ;
             $ALL[$LEMMA][$J]['liber'] = ;
             $ALL[$LEMMA][$J]['R-Vor'] = ;
             $ALL[$LEMMA][$J]['italic'] = ;
          } else if(str_replace('OFF',,$ALL[$LEMMA][$J]['Vor-1' ]) != $ALL[$LEMMA][$J]['R-Vor' ] or
                    str_replace('OFF',,$ALL[$LEMMA][$J]['Nach-1']) != $ALL[$LEMMA][$J]['R-Nach'] )
             if($MSG and $ALL[$LEMMA][$J]['R-Vor'] and $ALL[$LEMMA][$J]['R-Nach'] and $J==0)
                echo NL.'';
          $ARTI = $ALL[$LEMMA][$J];
          if(isset($ARTI['greek'])and $ARTI['greek' ]=='j' and $ARTI['Text'] and
                              stripos($ARTI['Text'],to_latin(substr($LEMMA,3)) )!==0 ){
                                      $ALL[$LEMMA][$J] ['Lücke'] = 'λ'; // Griechisch => Latein
                    // echo NLBR.to_latin(substr($LEMMA,3)).' # '.$ARTI['Text'];
          }
          if($ARTI['Vor-1' ]=='OFF' and $LEMMA!='RE:Vorwort (Band I)' ) // Kein Vorgänger
                                     $ALL[$LEMMA][$J] ['Lücke'] = 'Vor';
          if($ARTI['Nach-1']=='OFF' and $LEMMA!='RE:Verzeichnis der Autoren (Register)')
                                     $ALL[$LEMMA][$J] ['Lücke'] = 'Nach'; // Kein Nachfolger
                                     $ALL_LEMMA[substr($LEMMA,3,99)] = 2;
          if( isset( $ARTI['Autor']) and isset($ARTI['RE Autor']) and
                              $ARTI['Autor'] and $ARTI['RE Autor'] != 'OFF'){
             if(!isset($NAMEN[$ARTI['Autor']]) ) $NAMEN[$ARTI[ 'Autor']] = [];
             if( isset($NAMEN[$ARTI['Autor']] [$ARTI['RE Autor']]) )
                       $NAMEN[$ARTI['Autor']] [$ARTI['RE Autor']]++;
             else $NAMEN[$ARTI['Autor']] [$ARTI['RE Autor']] = 1; }
          $DEF = explode('|', $ARTI['Datum'] );
          if( isset($DEF[2]) )
             $ALL[$LEMMA][$J]['Mod' ] = z2($DEF[2]).'.'.$DEF[1].'.'.((int)$DEF[0]-2000);
          if($ALL[$LEMMA][$J]['Band-1'] != $ALL[$LEMMA][$J]['Band' ] )
             echo NLBR.'#Band['.$J.'] '.$LEMMA.': '.$ALL[$LEMMA][$J]['Band' ].
                                             ' != '.$ALL[$LEMMA][$J]['Band-1'];
       }
       foreach( $NAMEN as $AUTO => $LISTE ){ // Autoren
          arsort( $LISTE ); // zuerst der Häufigste
          if( $AUTO.'.' != key($LISTE) )
             $OAUTO[$AUTO] = key($LISTE);}
       foreach( $ELEM as $LEMMA){ // d. RE-1_Lemmata
          $ALL[$LEMMA][0]['Quell'] = 'RE-1_Lemma';
          if(isset($ALL[$LEMMA][0]['Vor-1']) and $ALL[$LEMMA][0]['Band']!='R' and
                                          substr($ALL[$LEMMA][0]['Band'],0,1)!='S'){
             $VOR = 'RE:'.$ALL[$LEMMA][0]['Vor-1' ];
             $NACH = 'RE:'.$ALL[$LEMMA][0]['Nach-1'];
             if($MSG and isset($ALL[$VOR] [0]['Nach-1']) and 'RE:'.$ALL[$VOR] [0]['Nach-1']!=$LEMMA)
                echo NL.'';
             if($MSG and isset($ALL[$NACH][0]['Vor-1']) and 'RE:'.$ALL[$NACH] [0]['Vor-1']!=$LEMMA)
                echo NL.''; }}
       if($MSG) echo '
    N'.$TD.'_Band_'.$TD.'S'.$TD.'Lemma /N'.
          $TD.'vor man'.$TD.'nach Register'.$TD.'nach man'.$TD.'nach Register'.'
    '.(++$NN2) .$TD.

                   $ALL[$LEMMA][$J]['Band' ].$TD.$ALL[$LEMMA][$J]['S von'].$TD.$LEMMA.' /'.$J.$TD.
                   $ALL[$LEMMA][$J]['Vor-1' ].$TD.$ALL[$LEMMA][$J]['R-Vor'].$TD.

                   $ALL[$LEMMA][$J]['Nach-1'].$TD.$ALL[$LEMMA][$J]['R-Nach'].'
    A_vor: '.$TD.$ALL[$LEMMA][$J]['Band'].$TD.$ALL[$LEMMA][$J]['S von'].
                     $TD.$LEMMA.$TD.$VOR.'
    A_nch: '.$TD.$ALL[$LEMMA][$J]['Band'].$TD.$ALL[$LEMMA][$J]['S von'].
                     $TD.$LEMMA.$TD.$NACH.'
    ';

       foreach( $WEITER as $LINE){ // e. Weiterleitung
          $DEF = explode(';', $LINE ); // RE:Abalas limen; RE:Ἀβάλας λιμήν
          if( isset ( $ALL[$LEMMA=$DEF[1] ] )){
             if(isset($ALL[$LEMMA][0]['Redir'])) $ALL[$LEMMA][0]['Redir'].=';'.$DEF[0]; // increment
                                            else $ALL[$LEMMA][0]['Redir'] = $DEF[0];}
          else NLBR.'Redir ins Leere '.$LINE;
          $W_Leit[$DEF[0]] = 'j'; }
       $NeuLem = implode( $NeuLemma=[] );
       foreach( $VERSI as $LINE ){ // f. Version
          $DEF = explode( CSV, mb_substr($LINE,1,-1) ); $LEMMA = $DEF[0];
          if( isset( $ALL[$LEMMA]) ){
             if( $DEF[1] == 0 ) // letzte Bearbeitung
                foreach($ALL[$LEMMA] as $J => $LINE ) // Nachträge
                        $ALL[$LEMMA][$J]['Benutzer'] = $DEF[7];
             if( $DEF[11] == 'j') // Datum Ersterfassung
                foreach($ALL[$LEMMA] as $J => $LINE )
                        $ALL[$LEMMA][$J]['first']=z2($DEF[4]).'.'.$DEF[5].'.'.((int)$DEF[6]-2000);}}
       foreach( $KORRI as $LINE ){ // g. korrigieren
          $DEF = explode(';',$LINE); $LEMMA = $DEF[0];
          if( isset ( $ALL[$LEMMA]) ){
             foreach( $ALL[$LEMMA] as $J => $LINE )
               if(isset($ALL[$LEMMA][$J]['Benutzer']) and
                        $ALL[$LEMMA][$J]['Benutzer'] != 'ELexikon' )
                        $ALL[$LEMMA][$J]['k'] = 'k';
          } else if( strpos( $LEMMA,'/' ) === false ) // RE:Herakles/IV
             echo NLBR.EC_.'Woher die Korrektur? '.$LEMMA; }
       $LN=0;
       foreach( $TOP10 as $LINE ){ // h. grösste Artikel
          $DEF = explode(';',$LINE);
          if( strpos($LINE,'colspan=') )
             $LONG[$LN++] = ['Band'=>$DEF[0],'Text'=>$DEF[1] ];
          else {
             $GROSS = str_replace('[[RE:', '$[[RE:', $DEF[1] );
             $BIGER = explode('$',$GROSS);
             foreach( $BIGER as $BBB) if($BBB){
                $LEMMA = trim(scan($BBB,1,'[|' ));
                $BIG = trim(scan($BBB,2,'[|]'));
                $LONG[$LN++] = ['Band'=>$DEF[0], 'Lemma'=>$LEMMA, 'Big'=>$BIG, 'BigA'=>trim($DEF[2]) ];
                if(!isset($ALL[$LEMMA]) ) echo NLBR.'Grosse Artikel: '.$DEF[0].' ?= '.$LEMMA.' — '.$DEF[2];
                   else { $ALL[$LEMMA][0]['Big' ] = $BIG; // üblicher Name
                          $ALL[$LEMMA][0]['BigA'] = trim($DEF[2]); }}}} // Autor
       $FIRST = 'RE:Vorwort (Band I)';
       $HTTP = ELEX.'?Typ=RE&Text='; // Option
       $LOCAL // = '../../../www/meyers/RE/'; // C$1
                               = ELEX .'RE/'; // C$1
       $PAULY = PAULY.'/Register/';
       $ALL[$FIRST][0][ WIKI ] = 'hyperlink(B$1&wechseln(A2;""?"";""%3F"")&""#""'.
                                              '&wechseln(H2;"" "";""_"")  ;""x"")'; // B2
       $ALL[$FIRST][0][$LOCAL] = 'hyperlink(C$1&F2  ; M2 )'; // C2
       $ALL[$FIRST][0][$PAULY] = 'hyperlink(B$1&D$1&H2&""#""&wechseln(TEIL(A2;4;99);'.
                                                    '"" "";""_""); TEIL(F2;1;LÄNGE(F2)-4))'; // D2
       $ALL[$FIRST][0]['Alfa'] = 'hyperlink(B$1&D$1&J2&""#""&wechseln(TEIL(A2;4;99);'.
                                                                      '"" "";""_""); J2 )'; // E2
       $SPALTEN = [ WIKI, $LOCAL, $PAULY, 'Alfa', 'Scan', 'Nachtrag','Kapi',
                    'Band', 'BdN', 'Bdk', 'abc', 'S von', 'S bis', 'S tot', 'red', 'Status',
                    'Lücke', 'Autor', 'Geburt','liber', 'RE Autor','frei', 'color',
                    'ist*', 'ist†', 'Schopf','VERWEIS','siehe', 'is_redir','Redir',
                    'Wiki', 'Wiki2', 'WD-j', 'WS',
                    'SORTIERUNG', 'greek', 'Quell', 'Data', 'Big', 'BigA',
                    'Stand', 'k', 'KB', 'Plaus', 'Mod', 'Benutzer','first', // ++ date of download
                    'touch', 'Diskus', 'Sperre','Wleit', 'LaufA', 'Lauf', 'Lauf2',
                    'n_abc', 'n_scan', 'grün', 'Anfang', 'Text', ];
       $SPALTE2 = ['Band', 'S von', 'S bis', 'WP', 'WS','WD', 'Autor', 'Status','Text'];
                                $OUT = '"'.date('Y-m-d H:i'); // Lemma
                                $OUT2 = '"'.date('Y-m-d');
       foreach($SPALTEN as $SP) $OUT .= CSV.$SP;
       foreach($SPALTE2 as $SP) $OUT2.= CSV.$SP;
       $OUT .= '"'.NL; $OUT2.= '"'.NL; $NEUES = ;
       $ALLart = '<?php $ALLart = array( // von localhost genutzte Vorverarbeitung: HTML => WIKI-fmt';
       $ALLart2 = '<?php $ALLart2 = array( // Grössere Artikel, wenn Key != Lemma: HTML => WIKI-fmt';
       $ALLbox = '<?php $ALLbox = array( // Stichworte der Infobox als Link';
       $RBDE = RE_BAND; $JAHR = (int)date('Y'); // mit 2x4 = 8 Arrays
       $CHECK ='"Scan'.CSV.'Nr.'.CSV.'Spalten'.CSV.'Band'.CSV.'Link'.CSV.'Scan'.CSV.'Anfang"';
       foreach( $RBDE as $BD => $ATTR ){ // Key = Spalte je Band
                $RBDE[$BD]['conN'] = []; $RBDE[$BD]['conN'][0] = 'Bd:'.$BD; // nächste Lemma-Nr.
                $RBDE[$BD]['cont'] = []; $RBDE[$BD]['cont'][0] = 'Bd:'.$BD; // das $LEMMA
          if( $BD=='R' ) $DIV = 2; else $DIV = 4; // Spalten je Doppelseite
          $LAST = RE_BAND[$BD][2]+(RE_BAND[$BD][3]-RE_BAND[$BD][1]+1)*$DIV;
          $RBDE[$BD]['cont'][-1] = $LAST; // Nr. des letzten Lemmas
          $CHECK.= NL.'"'.RE_BAND[$BD][3].CSV.RE_BAND[$BD][0]. CSV.($LAST-1).CSV.$BD.CSV.CSV
                         .RE_BAND[$BD][0]. z4(RE_BAND[$BD][3]).CSV. RE_BAND[$BD][5].'"'; }
       $NNH3 = 130000; $N=$F=$P=$STAR=$ENDE=$NNH=0; $LBAND='I,1'; $K=$OF1=$OFF=$OFFSET=30; $LIM=80;
       $KOPF = '×100, | = 10 Artikel, . 1 Artikel, ₀ gemeinfrei, ■ blau, / neuer Band, '.
                   '1₈ = 18% erstellt, * wenig, ✓ fertig '.BLK4.' Band Spalte Artikel';
       $INIT = ; for($i=0; $i++<$OFF;) $INIT .='-';
       $UNDER = ; for($i=0; $i <=100;) if(!fmod($i++,10))$UNDER.='|';else $UNDER.='_';
       $LOCH = $KOPF.NL.BLK3.'0 '.$INIT; $LFC='A'; $WP=$NACHT=0;
       echo NLBR.date('H:i:s').' / Mitte ... '.dauert().NL; // Mitte
       foreach($ALL as $LEMMA => $NACHTRAG ) // i. Werkstatt
          foreach( $NACHTRAG as $J => $LINE ){
             $ARTI = $LINE; // lokale Variable $ARTI
             $ARTI['N'] = ++$N;
             if( $LAUF = substr($LEMMA,strrpos($LEMMA,BLK)) and (int)$LAUF ){
                $ARTI['Lauf' ]= (int) $LAUF; $ARTI['LaufA'] = trim($LAUF );
                $ARTI['Lauf2']= ltrim( $LAUF ,'0123456789 ');}
             if( $J==0 ) RE_Plaus_Art( $NACHTRAG, $LEMMA );
             if( isset($TOUCH[$LEMMA]) ){
                $ARTI['WD-j' ]= $TOUCH[$LEMMA][0]; // Wikidata
                $ARTI['touch']= substr($TT=$TOUCH[$LEMMA][1],6,2).'.'.substr($TT,4,2). // tt.mm.yy
                                                                  '.'.substr($TT,2,2); }
             if( isset( $ARTI['Band']) ){ $VON =(int)$ARTI['S von'];
                $BAND = $ARTI['Band']; $BIS =(int)$ARTI['S bis'];
                if( $J == 0 ){ $CHAR = '.'; // Hauptartikel
                   $FC = mb_substr(to_latin(mb_substr($LEMMA,3,1)),0,1);
                   if($FC < $LFC or ord($FC)> ord($LFC)+2 ) $FC = $LFC;
                   if(isset($ARTI['frei'])and $ARTI['frei']=='mint') $CHAR = '₀';
                   if(isset($ARTI['red']) and $ARTI['red'] =='blau') {
                      if( $ARTI['Status'] == 'FER' ) $CHAR = '■';
                      elseif($ARTI['Status']== 'KOR' ) $CHAR = '▬';
                      else $CHAR = '□';
                      if( fmod($K, 100) < $LIM ) $F++; }
                   if($FC  != $LFC and $LBAND != 'R' ) $CHAR = $FC;
                   if($BAND != $LBAND and $LBAND != 'R' ) $CHAR = '/';
                   $LOCH .= $CHAR; $LFC = $FC;
                   if( !fmod(++$K, 100) ) { $P += $F;
                      $LOCH .= loch($F+$OF1,$BAND,$VON,$LEMMA).NL;
                      if( $STAR ) $ST = BLK2.$STAR; else $ST = ;
                      if( !fmod($K,2e3) ) { $LOCH.= BLK4.$UNDER.BLK4.
                         round(($P+$OFF)/20).'% erfasst 👍'.$ST.NL; $P = 0; $OFF=0;}
                      $LOCH .= sprintf('%4d',$K/100).BLK; $F = 0; $OF1 = 0;}
                   if( $LBAND  != 'R' ) $LBAND = $BAND;
                } else $NACHT++; // Nachträge
                if( !isset( $ARTI['n_num'] ) ) $ARTI['n_num'] = 0;
                if( !isset( $ARTI['n_abc'] ) ){$ARTI['n_abc'] = ++$NNH3;
                   echo NLBR.EC_.'prüfe im ABC '.gg($NNH3).BLK.$ARTI['Quell'].' => Band '.
                       $BAND.'
    : '.$LEMMA.' Vorgänger/Nachfolger';}
                if( $ARTI['n_abc' ] < 120000 ) ++$NNH ;
                if( !isset( $ARTI[ 'abc' ]) ) $ARTI[ 'abc' ] = '_';
                if( !isset( $ARTI['R-Nach']) ) $ARTI['R-Nach'] = ;
                if( $ARTI[ 'S bis'] == 'OFF' ) $ARTI['S bis' ] = ; // Spalten optimieren
                if( (int) $ARTI[ 'S bis'] > (int) $ARTI['S von' ]+1 )
                            $ARTI[ 'S tot'] = (int) $ARTI['S bis' ]-(int)$ARTI['S von'];
                elseif(isset($ARTI['S nxt']) and is_numeric($ARTI['S von']) and // keine 'Spalte bis'
                      (int) $ARTI[ 'S nxt'] > (int) $ARTI['S von' ]+1 )
                            $ARTI[ 'S tot'] = (int) $ARTI['S nxt' ]-(int)$ARTI['S von'];
                if( isset($ARTI[ 'S tot']) and  !$ARTI['S bis' ] )
                            $ARTI[ 'S bis'] = (int) $ARTI['S von' ]+(int)$ARTI['S tot'];
                            $S = $VON; // $S = Spalte von = key
                if( !isset( $RBDE[$BAND]['ersN'][$S ] ) // erstes Lemma in der Spalte
                        or $RBDE[$BAND]['ersN'][$S ] > $ARTI['n_num']
                        ) { $RBDE[$BAND]['ersN'][$S ] = $ARTI['n_num']; // ersN = Laufnr erstes Lemma
                            $RBDE[$BAND]['erst'][$S ] = $LEMMA; // erst = Text erstes Lemma
                            $RBDE[$BAND]['e_aN'][$S ] = $ARTI['n_abc']; // e_aN = Laufnr nach ABC
                            $RBDE[$BAND]['e_AA'][$S ] = $ARTI[ 'abc']; } // e_AA = im Register ('ar')
                if( !isset( $RBDE[$BAND]['conN'][$S ] ) // continue = letztes Lemma in Spalte
                        or $RBDE[$BAND]['conN'][$S ] < $ARTI['n_num']
                        ) { $RBDE[$BAND]['conN'][$S ] = $ARTI['n_num']; // conN = Laufnr Lemma im Band
                            $RBDE[$BAND]['cont'][$S ] = $LEMMA; // cont = Text letztes Lemma
                            $RBDE[$BAND]['c_aN'][$S ] = $ARTI['n_abc']; // c_aN = Laufnr nach ABC
                            $RBDE[$BAND]['c_AA'][$S ] = $ARTI[ 'abc']; } // c_AA = im Register ('ak')
                if( isset( $ARTI['S tot']) and 2<=(int)$ARTI['S tot']) { // Lemma hat 3 oder mehr Spalten
                            $S2 = $S + 2; // die übernächste Spalte
                  if(!isset($RBDE[$BAND]['ersN'][$S2] )
                        or $RBDE[$BAND]['ersN'][$S2] > $ARTI['n_num'] // in Supplementen nach
                        ) { $RBDE[$BAND]['ersN'][$S2] = $ARTI['n_num']; // einem Zwischenkapitel
                            $RBDE[$BAND]['erst'][$S2] = $LEMMA;
                            $RBDE[$BAND]['e_aN'][$S2] = $ARTI['n_abc'];
                            $RBDE[$BAND]['e_AA'][$S2] = $ARTI[ 'abc']; }
                  if(!isset($RBDE[$BAND]['conN'][$S2] )
                        or $RBDE[$BAND]['conN'][$S2] < $ARTI['n_num'] // Anfang UND Ende füllen
                        ) { $RBDE[$BAND]['conN'][$S2] = $ARTI['n_num'];
                            $RBDE[$BAND]['cont'][$S2] = $LEMMA;
                            $RBDE[$BAND]['c_aN'][$S2] = $ARTI['n_abc'];
                            $RBDE[$BAND]['c_AA'][$S2] = $ARTI[ 'abc']; }}
                                                        $ARTI['Bdk' ]= no_halb( $BAND );
                if( isset( $W_Leit[$LEMMA]) ) $ARTI['is_redir']= 'j';
                if( !isset( $ARTI['Scan']) ) $ARTI['Scan' ]= RE_SCAN( $BAND,$VON,$LEMMA,0);
                if( !isset( $ARTI['Autor']) ) $ARTI['Autor' ]= ; // Autor optimieren
                if( trim( $ARTI['Autor']) == ){$ARTI['Autor' ]= 'OFF';
                                                        $ARTI['RE Autor']= 'OFF';}
                elseif(!isset( $ARTI['RE Autor'])) {
                    if( isset($OAUTO[$ARTI[ 'Autor']]))$ARTI['RE Autor']= $OAUTO[ $ARTI['Autor'] ];
                                                   else $ARTI['RE Autor']= $ARTI['Autor'].'.';}
                if( $ARTI['Autor'] == 'OFF' ){$ARTI['RE Autor']= 'OFF';
                                                        $ARTI['liber' ]=  ;}
                if( isset($ARTI['ist†' ])and $ARTI['ist†']>JJ52) $ARTI['liber'] = $ARTI['ist†' ] + 71 ;
                if( $ARTI['liber'] == ) $ARTI['Geburt' ]= RE_Geburt($ARTI['Autor' ] )  ;
                if( $J ) $ARTI['Nachtr' ]= 'ON';else $ARTI['Nachtr' ]='OFF';
                if( $J == 1 ) $ARTI['Übersch' ]= 'ON';else $ARTI['Übersch']='OFF';
                if( $ARTI['italic'] =='kursiv') $ARTI['Verweis' ]= 'ON';else $ARTI['Verweis']='OFF';
                if( isset($ARTI['Status']) and $ARTI['Status'] != 'UNK' ) $ARTI['n_scan' ]=  ;
                $ORT = RE_ort( $LEMMA );
                if( trim($ORT[1]) and $ORT[1]!=1 ) $ARTI['fett' ] = trim($ORT[1].BLK.$ORT[2]).')';
                               else if($ORT[1]==1 ) $ARTI['fett' ] = substr($LEMMA,3) .')';
                               else $ARTI['fett' ] = substr($LEMMA,3);
                if(!isset($ARTI['Text'] ) ) $ARTI['Text' ] = ;
                          $ARTI['Text'] = str_replace ( ['Nr.' ,BLK2 ], // ON = Ort
                                                        ['Nr. ',BLK ],trim($ARTI['Text']));// PN = Person
                if( isset($ARTI['SORTIERUNG'])and isset($ARTI['greek' ]) and
                          $ARTI['Text']== and $ARTI['greek' ] == 'j' )
                          $ARTI['Text'] = $ARTI['SORTIERUNG'];
                $ARTI['Text'] = RE_strip( $ARTI['Text'] ); // yy => yy
                if($J){if($ARTI['Text']== ) $ARTI['Text'] = '_'.$J; // Default-Kurztext
                } else { /* $J==0 */ $LEM2 = substr($LEMMA,3); // ohne Nachträge
                   if( isset($ARTI['Anfang']) ) $LL1 = ''.$LEM2.''; // Lemma verfügbar
                                            else $LL1 = '' .$LEM2.'';
                   $TEMP = NL."'".$LEM2."' =>'" .$LL1."', // ".$BAND.'_'.$VON.'_'.$BIS;
                   if(substr($TEMP,-2) == '_0' ) $TEMP = substr($TEMP,0,-2).' $ '; // $BIS = 0
                                            else $TEMP.= ' $ ';
                   if( $ARTI['Text'] == '(-)') $KUR0 =  ; // Kurztext
                                            else $KUR0 = $ARTI['Text'];
                   if((in_array($KUR0,[,'ON','PN','Ort','Person']) or mb_strlen($KUR0)<9) and
                      isset( $ARTI['Anfang']) ){$KUR0 = $ARTI['Anfang'];
                                                 $NRK = scan($KUR0,1,BLK);
                      if(strlen(trim($NRK,'0123456789)[]'))<=1 and strpos($LEMMA,trim($NRK,')[]')) )
                                                 $KUR0 = trim(substr($KUR0,strlen($NRK)),BLK);
                      if(scan($KUR0,1,BLK)=='s.')$KUR0 = trim( $KUR0, '.');
                   } else $KUR0 = str_replace(['ON','PN'],['Ort','Person'],$KUR0);
                   if(mb_strlen($KUR0) > 80 ){$KUR0 = mb_substr( $KUR0,0,80);
                                                 $KUR0 = substr( $KUR0,0,strrpos($KUR0,BLK));}
                   if( $KUR0 == ) $KUR0 = '(-)';
                   if( substr( $KUR0,0,1)=='=') $KUR0 = "'".$KUR0  ; // ! EXCEL-Formel '=
                   $ALLart .= RE_justA( $TEMP .$KUR0 );
                   if( strpbrk( $LEM2, '(),=/') ) // Elaphia, Elaphiaia
                      for($I=1; $I<=4; $I++) { // Iapygia (geogr.
                         $TT0 = trim( scan( $LEM2, $I, '(),=/') );
                         if(mb_strlen($TT0)>3 and substr($TT0,0,1)!=='-'){ // Hinuleius, C.
                            $TTT = str_replace(["'".$LEM2, '}}',$LEM2.']]'],
                                                   ["'".$TT0 ,'|'.$TT0.'}}',$TT0 .']]'],$TEMP.$KUR0);
                            $UP = mb_substr ( $TT0 , 0 , 1 );
                            if( $UP == mb_strtoupper( $UP ) ) // Iapygia (geogr.
                               $ALLart .= RE_justA( $TTT ); }
                         $TT0 = str_replace(['(',')'],,trim(scan($LEM2,$I, ',=/') ));
                         if( mb_strlen($TT0)>3 and substr($TT0,0,1)!=='-'){ // Krom(m)yon, Kremmyon
                            $TT1 = str_replace(["'".$LEM2, '}}',$LEM2.']]'],
                                                   ["'".$TT0 ,'|'.$TT0.'}}',$TT0. ']]'],$TEMP.$KUR0);
                            $UP = mb_substr ( $TT0 , 0 , 1 );
                            if($TT1 != $TTT and $UP == mb_strtoupper($UP) ) // (geogr.
                               $ALLart .= RE_justA( $TT1 ); }}
                   if(hat_greek($LEMMA)){ $TT0 = scan( $TEMP,2,"'"); // NL.'xxx'
                                           $TT1 = to_latin($TT0);
                      if(!isset($ALL['RE:'.$TT1]) ){
                         $TT2 = "'".$TT1.substr( $TEMP, strpos($TEMP,"'",2));
                         $TT2 =NL.str_replace('|'.$TT0,'|'.$TT1,$TT2);
                         $ALLart .= RE_justA( $TT2).$KUR0; }}
                   if( isset( $ARTI['Big'] ) and $LEM2  != $ARTI['Big']){
                      $ALLart2 .=NL."'".$ARTI['Big']."'".sprintf('%'.max(0,30-mb_strlen($ARTI['Big'])).'s',' => ');
                      if(isset($ARTI['Anfang'])) $ALLart2 .= "''.$ARTI['Big'].'';
                                            else $ALLart2 .= "''.$ARTI['Big'].'';
                      $ALLart2 .= ,"; }
                   if(isset($ARTI['Wiki2']) and trim( $ARTI['Wiki2']) ) // Wikipedia, ergänzender Schlüssel
                      foreach( explode ( BLK, $ARTI['Wiki2'] ) as $WORD){
                         if( substr($WORD,0,2)=='w:') $ARTI['WP'] = RE_2(BLK,$WORD); else
                         if( substr($WORD,0,2)=='s:') $ARTI['WS'] = RE_2(BLK,$WORD); else
                                                      $ARTI['WD'] = RE_2(BLK,$WORD);
                         if( substr($WORD,0,3)!='d:Q' and trim( $WORD)) {
                            $QUEL = substr($WORD, 0, $POS = strrpos ( $WORD,':'));
                            $WORD = substr($WORD, 1 + $POS );
                            $WIKI = trim( str_replace( ["'",'_'], ['‘',BLK], $WORD));
                            $TMP2 = NL. "'".$WIKI."'".str_replace(
                                       '|'.$LEM2, '|'.$WIKI, substr($TEMP,strpos($TEMP,'=>')) );
                            if( $WORD  != $LEM2 ){
                               $ALLbox .= RE_just( RE_just( RE_just($TMP2.$QUEL.BLK.$KUR0,
                                          '=',55,0,1), '//',130,0,1), '$',152,0,1);
                               if( strpos( $WIKI,'(')!==false ){
                                  $WIKI = str_replace( ['(',')'], , $WIKI );
                                  $TMP2 = NL. "'".$WIKI."'".str_replace (
                                       '|'.$LEM2, '|'.$WIKI, substr($TEMP,strpos($TEMP,'=>')) );
                               $ALLbox .= RE_just( RE_just( RE_just($TMP2.$QUEL.BLK.$KUR0,
                                          '=',55,0,1), '//',130,0,1), '$',152,0,1); }} }}
                                                                  $OUT2 .= '"'.$LEMMA;
                   foreach($SPALTE2 as $SP) if(isset($ARTI[$SP])) $OUT2 .= CSV.$ARTI[$SP];
                                                             else $OUT2 .= CSV;
                                                                  $OUT2 .= '"'.NL; }
                $NEUES .= RE_Neuland(0, $LEMMA,$J,$ARTI ); } // Neuland erstellen
             if(isset($ARTI ['S von']) ){
                if( $LEMMA != $FIRST)$ARTI[$LOCAL] = $ARTI['S von']  ; // Linktext im EXCEL
                                       $ARTI[$PAULY] = substr( $ARTI['Scan' ],0,-4);
                                       $ARTI['Alfa'] = $ARTI[ 'abc' ]  ;
                                       $ARTI['BdN' ] =RE_ORDER[$ARTI['Band']]+1  ;}
             $ALL[$LEMMA][$J] = $ARTI; // $ARTI speichern
             $OUT .= '"'.$LEMMA;
             foreach($SPALTEN as $SP) if(isset($ARTI[$SP]))$OUT.=CSV.$ARTI[$SP];else $OUT.=CSV;
             $OUT .= '"'.NL; } // foreach $LEMMA & $NACHTRAG
    /* // Generalformel: Scan = RE_BAND[$BD][1] + floor( ($SEITE-RE_BAND[$BD][2]) /4 ) Seite-Scan
       $FORML = 'wenn($a8=0;hyperlink($b$7&$b$5&""/""&c$4&text(1;$b$6)&"".""&$b$5;c$1)'.
               ';wenn(und(c$6-2<=$a8;$a8<=(c$7-c$5)*4+c$6+3)'. // Orig==c8
               ';hyperlink($b$7&$b$5&""/""&c$4&text(c$5+ganzzahl(($a8-c$6)/4);$b$6)&"".""&$b$5;b!c8);t($b$2)))';
       $BLATT = '"S.' .CSV.'$'; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.$BD; // IX,2 1
       $BLATT.='"'.NL.'"ab' .CSV.$FORML; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][5]; // Aal 2
       $BLATT.='"'.NL.'"Jahr'.CSV.$LOCAL; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][4]; // 1893 3
       $BLATT.='"'.NL.'"Scan'.CSV.$HTTP; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][0]; // P_02 4
       $BLATT.='"'.NL.'"Anf.'.CSV.'tif'; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][1]; // Anfang 5
       $BLATT.='"'.NL.'"off' .CSV.'oooo'; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][2]; // Offset 6
       $BLATT.='"'.NL.'"bis' .CSV.$LOCAL; foreach(RE_ORDER as $BD=>$N) $BLATT.=CSV.RE_BAND[$BD][3]; // max 7 */
       $KOPF = NL2. $KOPF. NL2.NL2.NL2.$STAR.' Sterne @ Offset '.$OFFSET.NL2.NL2.NL2.date('H:i:s');
       // echo NLBR.EC_.'@'.$OFFSET.' Offset => '.$STAR.BLK.substr('********',0,min($STAR,8));
       // print_rbde($RBDE['S IX'], 1220 ); // debug
       foreach( RE_ORDER as $BD => $N ) // leere Seiten mit vorangehendem Lemma füllen
          for($S=RE_BAND[$BD][2]-2; $S<=$RBDE[$BD]['cont'][-1]; $S++) if( $S>1 ){
             if( !isset($RBDE[$BD]['cont'][$S]) and isset($RBDE[$BD]['cont'][$S-1]) ) {
                        $RBDE[$BD]['cont'][$S] = $RBDE[$BD]['cont'][$S-1]; // cont = Lemma ff.
                        $RBDE[$BD]['c_aN'][$S] = $RBDE[$BD]['c_aN'][$S-1]; // c_aN = 'n_abc'
                        $RBDE[$BD]['c_AA'][$S] = $RBDE[$BD]['c_AA'][$S-1]; } // c_AA = 'abc'
             if( !isset($RBDE[$BD]['erst'][$S]) and isset($RBDE[$BD]['cont'][$S-1]) ) {
                        $RBDE[$BD]['erst'][$S] = $RBDE[$BD]['cont'][$S-1]; // erst = erstes Lemma
                        $RBDE[$BD]['e_aN'][$S] = $RBDE[$BD]['c_aN'][$S-1]; // e_aN = 'n_abc'
                        $RBDE[$BD]['e_AA'][$S] = $RBDE[$BD]['c_AA'][$S-1]; }} // e_AA = 'abc'
       if(0) for($S=0; $S<=2908; $S++){ // Version 0 zum
          $BLATT .= '"'.NL.'"'.$S.CSV.($S - $S%100); // grossen EXCEL
          foreach( RE_ORDER as $BD => $N )
             if( isset( $RBDE[$BD]['cont' ][$S]) ) $BLATT .= CSV.substr( $RBDE[$BD]['cont'][$S], 3);
                                              else $BLATT .= CSV; }
       $BLATT = 'Band;ABC;Artikel;Seite;NUM'; $LABC = ;
       foreach( RE_ORDER as $BD => $N ) // $RBDE = input global
          for( $S = 0; $S <= 2908; $S++ )
             if( isset( $RBDE[$BD]['erst'][$S]) ){ // statt : cont
                $LEMMA = $RBDE[$BD]['erst'][$S];
                $BDSEL[ no_halb($BD).'_'.$S ] = $RBDE[$BD]['cont'][$S]; // $BDSEL= output global
                if( mod($S+1,4)==0 or $S==1 or $BD=='R' ){
                   if(isset($RBDE[$BD]['e_AA'][$S])) $ABC = $RBDE[$BD]['e_AA'][$S];
                   if( $ABC == '_' ) $ABC = $LABC;
                   if( $S == 1 ) $NR = -1; else $NR =$S ;
                   if(isset($RBDE[$BD]['e_aN'][$S])) $N_ = $RBDE[$BD]['e_aN'][$S]; else $N_ = 0 ;
                   $BLATT .= NL.$BD.';'.$ABC.';'.substr($LEMMA,3).';'.$NR.';'.$N_.';'; // erstes Lemma
                   $LABC = $ABC; }}
    /* file_put_contents( ANKER.R_R.'RE-5_Wikidata.csv' ,BOM.$OUT2 );
       file_put_contents( ANKER.R_R.'RE-7_Löcher.txt' ,BOM.$LOCH.$KOPF );
       file_put_contents( ANKER.R_R.'RE-7_NeuLemm.txt' ,BOM.$NeuLem );
       file_put_contents( ANKER.R_R.'RE-7_Neuland.txt' ,BOM.$NEUES );
       file_put_contents( ANKER.R_R.'RE-8_Check-Band.csv' ,BOM.$CHECK ); */
       file_put_contents( ANKER.R_R.'Input/RE-0_Seiten-in.csv' ,BOM.$BLATT );
       file_put_contents( ANKER.AdminC.'ALLart.php' , $ALLart .NL.');?>');
       file_put_contents( ANKER.AdminC.'ALLart2.php' , $ALLart2.NL.');?>');
       file_put_contents( ANKER.AdminC.'ALLbox.php' , $ALLbox .NL.');?>');
       file_put_contents( ANKER.R_R.'Input/RE-6_Werkstatt.csv' ,BOM.$OUT );
       RE_var_port( 0, ['BDSEL','ALL','RBDE','LEGEN','LONG'] ); // Variable speichern
       $TXT = NLBR.date('H:i:s').' / RE-6_Werkstatt => '.
          gg( $N_A= count($ALL ) ).'
    Artikel sind geplant, die Werkstatt.csv hat '.
          gg( $N_O=(substr_count($OUT,NL)-1)).'
    +1 Zeilen, also:' .NLBR.EC_.'';
       if( $DIFF = $N_A -N_Spez_L + $NACHT -$NNH ) $DELTA=', also '.NLBR.EC_.
          gg($N_A).' $ALL - '.N_Spez_L.' Spez-Lemma + '.gg($NACHT).' Nachträge != '.
          gg($NNH).' $NNH( n_abc )'; else $DELTA= ;
       $TXT .= gg( $NNH ).'
    (+'.N_Spez_L.') Teilartikel bis RE:Zythos'.
                        ' / Benutzungshinweise (Register), die Bilanz ist '.
          n0(-$NNH + $N_O-N_Spez_L).'.' .NLBR.EC_.''.
          gg( $NNH - $N_A-N_Spez_L).'
    (+'.N_Spez_L.') Nachträge in den '.
                            'Teilartikeln (Supplemente), Bilanz ' .
          n0(-$NNH + $N_A-N_Spez_L + $NACHT).$DELTA.'.' .NLBR.EC_.''.
          gg( $NNH2-120000)."
    Vorwort, Nachruf   120'xxx = RE_Edit_Info: ".
                            ' Teilartikel sind Artikel oder Nachträge.' .NLBR.EC_.
          n0( $NNH3-130000)." Diverse Nachträge  130'xxx = Lemma existiert".
                            ' in WS, fehlt aber im Register ABC.' .NLBR;
       return $TXT;
    }
    head('+ 9_WIKI_RE',,);
    echo RE_Starter ( 0 ); // Abkürzungen, Nachweis 20 min 0/1 = off / on +exit
    echo NLBR.NLBR.
         RE_1_Lemmata ( 0 );
    echo OCR_WIKI ( 0 ). // Text ab OCR => Wikisource 0/1 = skip / Todo +exit
         RE_1_crawl ( 0 ). // 1 increment 0/1 = kurz / vollständig
         RE_2_Register ( 0 ). // 2 Register Band 84x + 44x ABC 0/1 = off / ToDo +exit
         RE_3_Display ( 0 ). // 3 Webseiten 2 min Register ABC

         RE_4_Edit_Info( 0 ). // 4 Text 1 min => netto z.B.
      Die Vorlage bzw. der Scan für diese Textseite ist fehlerhaft oder fehlt gänzlich. Hilf mit, den Scan aus einer dritten Quelle zu besorgen! Allgemeine Hinweise dazu findest du in der Einführung.
    intern WS

         RE_5_Weit_Vers( 0 ); // 5 Geschichte 2 min +Weiterleitung
    echo RE_6_Werkstatt( 1,0). // 6 Main=>EXCEL $TODO 0/1, $MSG 0/1 = ohne / mit Meldungen
         RE_finish ( 1 ); ?>


    </nowiki>

    1. '.NL."ASCII Zeichensatz, ".
           'American Standard Code for Information Interchange.'.
                    str_replace(CRLF,BR2,UTF8_BLOCK('U+0030')['TxT']).BR.NBSP.'
    2. '.NL."".$LINK."" .NL.
                     '('.str_replace([": ,",", ,"],[':',','],RE_UTF8B($COD,'Anz') .
                     RE_UTF8B($COD,'Typ').ucwords(RE_UTF8B($COD,'Spr')).',' .NL.
                     '[https://symbl.cc/en/unicode/blocks/'.RE_UTF8B($COD,'Key') .
                     ' symbl.cc])' ) .BRNL.
                     str_replace(CRLF,BR2,UTF8_BLOCK($COD)['TxT']).BR.NBSP.'
    3. [[#cite_ref-A'.++$GRP.'_6-0|↑]] Cite error: Ungültiges <ref>-Tag; kein Text angegeben für Fußnote mit dem Namen A'.++$GRP.'.