WordPress: wpautop(), der einfachere Weg

Hallo!

Ich melde mich mal wieder, diesmal mit etwas relativ wichtigem. Vor kurzem wurde WordPress 2.6 freigegeben, im Zuge des Updates musste ich mal wieder den wpautop()-Fix einspielen.

Dabei sind mir einige Unzulänglichkeiten aufgefallen, unter anderem dass er sinnlos kompliziert ist 😉

Die neue Version kommt mit grade mal 7 neuen und einer geänderten Zeile aus.

Hier die Diff (wir sind wieder in wp-includes/formatting.php):

@@ -65,10 +65,15 @@
 }
 
 function wpautop($pee, $br = 1) {
+	$preserving = strpos($pee, '<preserve>') !== false;
+	if ($preserving) {
+		$pee = preg_replace_callback('!<preserve>(.*?)</preserve>!is', create_function('$matches', 'return "<revert>".base64_encode($matches[1])."</revert>";'), $pee);
+	}
+
 	$pee = $pee . "n"; // just to make things a little easier, pad the end
 	$pee = preg_replace('|<br />s*<br />|', "nn", $pee);
 	// Space things out a little
-	$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
+	$allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr|revert)';
 	$pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "n$1", $pee);
 	$pee = preg_replace('!(</' . $allblocks . '>)!', "$1nn", $pee);
 	$pee = str_replace(array("rn", "r"), "n", $pee); // cross-platform newlines
@@ -99,6 +104,9 @@
 	$pee = preg_replace( "|n</p>$|", '</p>', $pee );
 	$pee = preg_replace('/<p>s*?(' . get_shortcode_regex() . ')s*</p>/s', '$1', $pee); // don't auto-p wrap shortcodes that stand alone
 
+	if ($preserving) {
+		$pee = preg_replace_callback('!<revert>(.*?)</revert>!is', create_function('$matches', 'return base64_decode($matches[1]);'), $pee);
+	}
 	return $pee;
 }

Bei der Gelegenheit habe ich den Tag von <nowpautop> in <preserve> geändert, hier gegebenfalls betreffende Posts/Seiten anpassen.

Die angesprochenen anderen Unzulänglichkeiten hatten damit zu tun, dass nur p und br-Tags verhindert wurden. Alles andere wurde trotzdem munter verändert. Jetzt ist das Verhalten das erwartete: per php generierter HTML-Code wird genau so übernommen wie er aus dem Interpreter kommt. Technisch liegt das daran, dass ich jetzt nicht mehr einzelne Zeichen schütze, sondern alles, indem der Code base64-Codiert vor wpautop() versteckt wird.

Viel Spaß damit 😉
Martok

Demo1 – Release

Hallo!

Meine angekündigte Demo ist trotz ersten Problemen doch noch irgendwie fertig geworden. In Konkurrenz zu Farbrausch trete ich hier nicht gerade, aber immerhin zeigt sie, dass man mit Delphi auch recht kleine Demos schreiben kann, auch ohne wie blöd zu optimieren. Interessant finde ich ja, dass die ganzen Funktionen die ich in den letzten paar Tagen eingebaut habe sich kaum in der Dateigröße niederschlugen: immer noch 47KByte, nach UPX allerdings.

Musik hab ich allerdings keine drin, was aber nur da dran liegt, dass ich keine Lust hab noch was zu komponieren. Den Tracker gibt es ja in Form von BlitzTracker bereits.

Download hier (42 KByte ZIP)
Einfach auspacken und starten. Wer sie im Vollbild-Modus genießen will, kann treeD.exe mit dem Parameter -fullscreen aufrufen.
Ach ja, und die Wartezeit am Anfang ist kein Crash, sondern da werden die Texturen & das Terrain generiert.

Für die, die es interessiert: der ganze Spaß basiert auf einem Timeline-System, dass Kamerafahrten, Scene-Renderer und Overlay-Renderer entsprechend der aktuellen Zeit (angezeigt als DT im Window-Mode) auswählt und ggf. interpoliert.
Der Inhalt ist übrigens an keiner stelle statisch, jedes mal wenn man die Demo startet, sieht man eine komplett andere Welt 😉

Tja. Dann sagt mal was dazu. Aber bitte nicht nur die künstlerischen Aspekte bewerten, ich weiß dass das nicht sooo der Renner ist… 🙄

mfg
Martok

Prozedurale Texturen….

Mal wieder was von mir 😉

In der letzten Zeit habe ich mich mal wieder einem Projekt aus dem bereich der 3D-Grafik gewidmet. Und zwar bastle ich an einer Demo. Beziehungsweise an einem Testprojekt für ein Delphi-Demo-Framework, so wirklich Demo nennen kann man das heutzutage fast nicht mehr.

Sieht auch alles schon ganz nett aus, aber mit den Texturen hab ich noch so meine Probleme. Prozedurale Texturen sind ja eine ganz tolle Erfindung, aber so gut bin ich dann auch nicht…

Und zwar benutzt mein Framework Callback-Routinen à la

procedure _GroundTexGen(X,Y:single; var Value: TRGBA);

X und Y erstrecken sich von 0 bis 1, sind also gleichwertig den OpenGL-Texturkoordinaten. TRGBA ist ein array[0..3] of single, dessen Komponenten die einzelnen Farben Rot, Grün, Blau und Alpha (hier nicht benutzt) wieder im Bereich von 0 bis 1 enthalten.

Was ich bräuchte wären Texturen bzw. die Prozeduren für Himmel (Y>0.5 -> Oberirdisch), Holz/Baumrinde und „Boden“, also Gras, Erde usw. Wären alles prima Kandidaten für Perlin Noise, aber da blick ich nicht so ganz durch… 😕

Falls jemand Langeweile haben sollte und gern in die Credits möchte… sagt Bescheid!

mfg
Martok

Das Brain – Chatbot

Eigentlich hab ich den ja schon länger in meiner ICQ-Liste… aber nachdem ich mich fast weg geschmissen hab grade bei einigen Dialogen, sag ich euch jetzt auch mal was über diesen Chatbot. Zuerst aber der Link: Das Brain – Chatbot

Brain ist ein deutschsprachiger selbstlernender Chatbot. Brain besitzt künstliche Intelligenz: Während du mit ihm chattest, lernt er ständig hinzu – er merkt sich dabei jedes von dir geschriebene Wort!

Dadurch gibt Brain zum Teil verblüffend passende Antworten, manchmal aber auch völlig abwegiges, oder einfach nur bizarres, amüsantes und witziges.

Ein paar Dialoge:
Continue reading „Das Brain – Chatbot“

Call for Graphics

Hallihallo!

Während ich noch am Design Document schreibe, hat sich eins ganz deutlich gezeigt: alleine schaffe ich das nicht. Dazu reichen meine Grafiker-Kenntnisse einfach nicht aus.

Daher poste ich hier einfach mal meine Wunschliste:
3D-Modelle (als .blend oder .3ds). Dargestellt werden sie mit ca 32*32 Pixel, also macht die Auflösung nicht so hoch.

  • Planet (ok, eher die Texturen. Eine Kugel krieg ich auch noch hin)
  • Raumstation: Normal, Angriff verbessert, Verteidigung verbessert, Beides verbessert, Homebase
  • Raumschiff (Symbol für „Flotte“, stellt dar: Kleine/Große Flotte)

Avatare (128*128) für

  • verschiedene Planeten (mit Name)
  • Stationen
  • Flotten: Klein, Groß

Wer mir helfen kann, bitte PM im Delphiforum, bei DelphiGL, ein Kommentar hier oder ICQ. Mail bitte nur, wenn der Rest nicht geht 😉

Danke euch schonmal! Ich werd dann mal weiter am DD schreiben. Das bringt übrigens wirklich was, ich hab jetzt schon einen grundlegenden Fehler meiner bisherigen Versuche gefunden…

–Martok