==== Funktion zum Herausfischen von Vorschriften im Artikeltext ==== === 1. Schritt 1: den Text im Artikel als Verweis auf Vorschrift identifizieren === Dazu werden benötigt: - Kürzel des Gesetzes - hard-codiert oder (besser) aus der Datenbank - regulärer Ausdruck, der auf eine Funktion verweist, die Kürzel checkt Findet in der Datei /handlers/edit/edit.php statt - irgendwo sind folgende Zeilen zu sehen: %% // ****************************************************************************** // Transformation der Angaben zu Vorschriften in WikiActions "{{pu oder du}}" // ****************************************************************************** function replaceNorms($values) { global $wakka; $complete = $values[0]; $mark = $values[1]; $norm = $values[2]; $addin = $values[3]; $akt = $values[14]; //$closing = $values[4]; $rsstr = "SELECT lang, id_akty FROM akty_aliases WHERE alias='".$akt."';"; if ($aktdata = $wakka->LoadSingle($rsstr)) { // skrot istnieje, zamień switch ($aktdata["lang"]) { case "pl": $replace = "{{pu przepis=\"".$mark." ".$norm." ".$addin.$akt."\"}}".$values[15]; break; case "de": $replace = "{{du przepis=\"".$mark." ".$norm." ".$addin.$akt."\"}}".$values[15]; break; } // zusätzlich: in der DB notieren, dass die Vorschrift gerade zitiert wird (nur für polnisches System) $bodyForTitle = $_POST["body"]; $strona = $wakka->tag; $rsstr = "SELECT * FROM links_pu WHERE akt='".$akt."' AND przepis='".$norm."' AND strona='".$strona."';"; if ($wakka->LoadAll($rsstr)) { // dann ist der Link zwischen dem Artikel und der Vorschrift bereits gesetzt (nur PL) } else { $title = ""; if (ereg( "(=){3,5}([^=\n]+)(=){3,5}", $bodyForTitle, $title)) { $formatting_tags = array("**", "//", "__", "##", "''", "++", "#%", "@@", "\"\""); $title = str_replace($formatting_tags, "", $title[2]); } if ($title) $title = strip_tags($wakka->Format($title)); # fix for forced links in heading else $title = $page; $rsstr = "INSERT INTO links_pu SET strona='".$strona."', przepis='".$norm."', akt='".$akt."', tytul='".$title."', last_search=now();"; $wakka->Query($rsstr); } } else { // Abkürzung existiert nicht, in Ruhe lassen $replace = $complete; } return $replace; } // Schreibweise "art. 12 § 2 KC" bereits berücksichtigt !!! // OLD: $pattern = "/(art\.|§|artykuł)\040(\S*?)\040((ust\.|§|zd\.)\040\d+\S*?\040|)(.*?)(\.|\;|\,|\:|\?|\!|\)|\s)/i"; // NEW: $pattern = "/(art\.|§|artykuł)\040(\S*?)\040((§{1,2}\040\d+\S*?(\040?\-\040?\d+\S*?|)\040)*(ust|Abs|\.?\040\d+\S*?(\040?\-\040?\d+\S*?|)\040)*(pkt\.?\040\d+\S*?(\040?\-\040?\d+\S*?|)\040)*(zd\.?\040\d+\S*?(\040?\-\040?\d+\S*?|)\040)*((i\040nast.{0,6}|in\040fine)\040)?)(.*?)(\.|\;\s|\,|\:|\?|\!|\)|\s|\>)/i"; $body = preg_replace_callback($pattern, "replaceNorms", $body); // noch andere Testfassungen: //$body = preg_replace_callback("/(art\.?|§) ([a-zA-Z0-9]*) (ust\.|§).* ([a-zA-Z0-9]*?)([\.,;\)]*\s)/i", "replaceNorms", $body); //$body = preg_replace_callback("/(art\.?|§) (.*?) ([0-9a-zA-Z]) ==([\.,;\)]*\s)==/i", "$1 $2 $3", $text); // **************************************** // ****** Ende der Transformation ********* // **************************************** %% === 2. Schritt 2: die tags werden in der //action// interpretiert ""{{du przepis=""}}""===