Hi,
ich möchte hier mein Tool Farbeimer vorstellen.
Farbeimer formatiert Code so, dass er im Forum mit Syntaxhighlightning angezeigt wird.
Es macht also nichts anderes, als den eingegebenen Text nach Schlüsselwörtern zu durchsuchen und diese mit Color-Tags zu
versehen. Das Tool ist etwas umfangreicher geworden als geplant, daher eine bebilderte Doku:
1. Code Feld: Hier kann man den Code einfügen und bei Bedarf noch editieren. Der formatierte Code wird hier ebenfalls angezeigt.
2. ZeichenCounter: Zeigt an, aus wievielen Zeichen der eingegebene Code besteht (hier im Forum gibts übrigens eine 180000er Begrenzung)
3. Optionen: Offnet das Optionenfenster, in dem man Farbprofile laden und bearbeiten kann.
4. Löschen: Leert das Code Feld (1)
5. Einfügen: Fügt den aktuellen Inhalt der Zwischenablage in das Code Feld (1)
6. Kopieren: Kopiert den aktuellen Inhalt des Code Felds(1) in die Zwischenablage
7. Auto-Einrücken: Rückt automatisch zwischen { und } ein. Ist sinnvoll, wenn man irgendwie vergessen hat den eigenen Code beim Schreiben einzurücken und anderen Leuten beim Lesen einen gefallen tun will.
8. Sicherung: Stellt den ursprünglichen inhalt des Code Felds (1) wieder her. Bei Aktionen, die den Inhalt des Code-Felds ändern, wird nämlich ein Backup angelegt.
9. Färben: Formatiert den aktuellen Inhalt des Code Felds mit Color-Tags und fügt den formatierten Code in die Zwischenablage ein. Der formatierte Code wird automatisch in Code-Tags eingefügt, sodass man ihn beim Verfassen eines Beitrags nur einfügen muss.
1. Profil-Combobox: Hier werden alle gefundenen Profildateien (.fep) aufgelistet und stehen zur Auswahl bereit. Will man ein Profil
editieren, so wählt man es aus, macht die benötigten Änderungen und klickt auf Speichern (17).
Will man ein neues Profil erstellen, so tippt man einfach den gewünschten Namen in die Combobox. Beim CKlick auf Speichern (17) wird dann die entsprechende Profildatei erstellt.
2. Löschen: Löscht die aktuell ausgewählte Profildatei.
3. Farb-Button: Bestimmt die Farbe, in der die zurzeit ausgewählte Farb-Gruppe (9) dargestellt wird (öffnet einen ColorDialog).
Will man, dass die Farb-Gruppe nicht gefärbt wird, wo wählt man als Farbe Fuchisa (R=255,G=0,B=255)
4. Formatierungen: Bestimmt die Formatierungen (Fett, Unterstrichen, Kursiv) für die zurzeit ausgewählte Farb-Gruppe (9).
5. Vorschaufenster: Zeigt, wie die aktuelle Formatierungs/Farb-Kombination aussieht. Damit kann man die Lesbarkeit kontrollieren.
6. Hintergrund-Vorschaufenster: Bestimmt die Hintergrundfarbe des Vorschaufensters(5) (sinnvoll, wenn man das Tool auch in anderen Foren benutzen will).
7. Schrift-Vorschaufenster: Bestimmt die Schriftfarbe des Vorschaufensters(5).
8. WoG Farbe: Setzt Vorder- und Hintergrund-Farbe auf den WoG-Standard.
9. Farb-Gruppen-Listbox: Hier werden die einzelnen Farbgruppen aufgelistet. Jeder Farbgruppe kann eine Farbe(3) und eine Formatierung (4) zugeordnet werden.
Daneben hat jede Farbgruppe Member Wörter, die später, falls sie im Code gefunden werden, nach der Farbgruppen-Formatierung gefärbt werden(13).
Bei den Farbgruppen gibt es noch zusätzlich eine Besonderheit: Elemente, die mit $ anfangen, gelten als Bereichsmarkierer.
Als Member haben sie ein Start und ein End-Element, welche den Bereich kennzeichnen.
Bereiche sind z.B. Strings, welche mit " anfangen und mit " enden, oder Kommentare /**/
Alles was in diesen Bereichen liegt + die Zeichen, die anfang und Ende des Bereichs kennzeichnen, werden entsprechend formatiert.
Dazu gibt es noch eine weitere Abwandlung: Fängt das Element mit $@ an, so wird nur der Bereich markiert, die Zeichen, die Anfang und Ende des Bereichs anzeigen, werden gelöscht.
So könnte man mit @@ oder ## Bereiche des Codes hervorheben (z.B: um auf Fehler aufmerksam zu machen) die @@ und ## werden dann später allerdings nicht mit dargestellt.
10. Farbgruppenname: Hier kann man einen Namen für eine Farbgruppe, die man hinzufügen möchte angeben.
11. Löschen: Löscht die aktuell ausgewählte Farbgruppe(9).
12. Fügt eine Farbgruppe mit dem im Farbgruppennamen-Textfeld(10) eingegebenen Namen.
13. Farbgruppen-Member: Elemente, die zu einer Farbgruppe(9) gehören. Werden sie im Code gefunden, werden sie der Formatierung der Farbgruppe(9) entsrpechend formatiert.
Die Elemtente sind alle reguläre Ausdrücke (Informationen zu Regex gibts hier:http://de.wikipedia.org/wiki/Regulärer_Ausdruck und hier http://www.mycsharp.de/wbb2/thread.php?threadid=41009 ). Ausnahmen sind die Elemente der Farbgruppen, die mit $ beginnen (Bereichsmarkierer)
So kann man nach allen Zahlen z.B. mit \d suchen.
14. Farbgruppenmembername: Hier kann man Elemente zur Farbgruppe hinzufügen. Auch mehrere Elemente sind möglich (Zeilenweise).
15. Löschen: Löscht die aktuell ausgewählten Elemente.
16. Hinzufügen: Fügt den inhalt von Farbgruppenmembername(14) zu der Memberliste hinzu.
17. Speichern: Speichert alle durchgeführten Änderungen und schließt das Optionen-Fenster.
Ausehen:
Aus:
Code:
///////////////////////////////////////////////////////////////////////
// Info Triggered
///////////////////////////////////////////////////////////////////////
instance DIA_Addon_Cavalorn_Triggered (C_INFO)
{
npc = Bau_4300_Addon_Cavalorn;
nr = 5;
condition = DIA_Addon_Cavalorn_Triggered_Condition;
information = DIA_Addon_Cavalorn_Triggered_Info;
description = "Ich habe den Mechanismus betätigt.";
};
func int DIA_Addon_Cavalorn_Triggered_Condition ()
{
if (MIS_Addon_Nefarius_BringMissingOrnaments == LOG_RUNNING)
&& (Npc_KnowsInfo (other, DIA_Addon_Cavalorn_Ornament))
&& (ORNAMENT_SWITCHED_FARM == TRUE)
{
return TRUE;
};
};
func void DIA_Addon_Cavalorn_Triggered_Info ()
{
AI_Output (other, self, "DIA_Addon_Cavalorn_Triggered_15_00"); //Ich habe den Mechanismus betätigt. Da tut sich rein gar nichts.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_08_01"); //Dann haben Lobarts Bauern wohl recht gehabt.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_08_02"); //Sie haben erzählt, dass jemand von ihnen schon mal an den Steinen hier herum gespielt hat.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_08_03"); //Ein Steinwächter sei wie aus dem Nichts erschienen und hätte sie angegriffen.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_08_04"); //Die Bauern riefen die Miliz, die Milizsoldaten riefen die Paladine, die kamen auch und zerstörten das Monstrum.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_08_05"); //Ich hab' schon die ganze Gegend abgesucht. Wenn es hier ein Ornament gegeben hat, dann haben es jetzt die Paladine.
Info_ClearChoices (DIA_Addon_Cavalorn_Triggered);
Info_AddChoice (DIA_Addon_Cavalorn_Triggered, "Dann muss jetzt einer von uns beiden ins obere Viertel der Stadt.", DIA_Addon_Cavalorn_Triggered_Pal );
Info_AddChoice (DIA_Addon_Cavalorn_Triggered, "Dann werde ich zu ihnen gehen und das Ornament zurück fordern.", DIA_Addon_Cavalorn_Triggered_OBack );
};
func void B_Cavalorn_Triggered_Wohin ()
{
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_Wohin_08_00"); //Ich werde jetzt in die Stadt gehen. Wir sehen uns bei Vatras.
AI_StopProcessInfos (self);
Npc_ExchangeRoutine (self,"Stadt");
Log_CreateTopic (TOPIC_Addon_Ornament, LOG_MISSION);
Log_SetTopicStatus(TOPIC_Addon_Ornament, LOG_RUNNING);
B_LogEntry (TOPIC_Addon_Ornament,"Eins der fehlenden Ornamentfragmente befindet sich bei den Paladinen im oberen Viertel.");
MIS_Addon_Cavalorn_GetOrnamentFromPAL = LOG_RUNNING;
self.flags = 0;
};
func void DIA_Addon_Cavalorn_Triggered_OBack ()
{
AI_UnequipArmor (self);
CreateInvItems (self, ITAR_BAU_L, 1);
Npc_RemoveInvItems (self, ITAR_RANGER_Addon, Npc_HasItems (self, ITAR_RANGER_Addon ) );
Npc_RemoveInvItems (self, ITAR_Fake_RANGER, Npc_HasItems (self, ITAR_Fake_RANGER ) );
AI_EquipBestArmor (self);
AI_Output (other, self, "DIA_Addon_Cavalorn_Triggered_OBack_15_00"); //Dann werde ich zu ihnen gehen und das Ornament zurückfordern.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_OBack_08_01"); //In Ordnung.
B_Cavalorn_Triggered_Wohin ();
};
func void DIA_Addon_Cavalorn_Triggered_Pal ()
{
AI_UnequipArmor (self);
CreateInvItems (self, ITAR_BAU_L, 1);
Npc_RemoveInvItems (self, ITAR_RANGER_Addon, Npc_HasItems (self, ITAR_RANGER_Addon ) );
Npc_RemoveInvItems (self, ITAR_Fake_RANGER, Npc_HasItems (self, ITAR_Fake_RANGER ) );
AI_EquipBestArmor (self);
AI_Output (other, self, "DIA_Addon_Cavalorn_Triggered_Pal_15_00"); //Dann muss jetzt einer von uns beiden ins obere Viertel der Stadt.
AI_Output (self, other, "DIA_Addon_Cavalorn_Triggered_Pal_08_01"); //Ich hab' dafür keine Zeit. Das wirst du machen müssen.
B_Cavalorn_Triggered_Wohin ();
};
wird:
Code:
///////////////////////////////////////////////////////////////////////
// Info Triggered
///////////////////////////////////////////////////////////////////////
instance DIA_Addon_Cavalorn_Triggered (C_INFO){
npc = Bau_4300_Addon_Cavalorn;
nr = 5;
condition = DIA_Addon_Cavalorn_Triggered_Condition;
information = DIA_Addon_Cavalorn_Triggered_Info;
description = "Ich habe den Mechanismus betätigt.";
};
func int DIA_Addon_Cavalorn_Triggered_Condition (){
if (MIS_Addon_Nefarius_BringMissingOrnaments == LOG_RUNNING)
&& (Npc_KnowsInfo(other, DIA_Addon_Cavalorn_Ornament))
&& (ORNAMENT_SWITCHED_FARM == TRUE){
return TRUE;
};
};
func void DIA_Addon_Cavalorn_Triggered_Info (){AI_Output(other, self, "DIA_Addon_Cavalorn_Triggered_15_00"); //Ich habe den Mechanismus betätigt. Da tut sich rein gar nichts.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_08_01"); //Dann haben Lobarts Bauern wohl recht gehabt.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_08_02"); //Sie haben erzählt, dass jemand von ihnen schon mal an den Steinen hier herum gespielt hat.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_08_03"); //Ein Steinwächter sei wie aus dem Nichts erschienen und hätte sie angegriffen.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_08_04"); //Die Bauern riefen die Miliz, die Milizsoldaten riefen die Paladine, die kamen auch und zerstörten das Monstrum.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_08_05"); //Ich hab' schon die ganze Gegend abgesucht. Wenn es hier ein Ornament gegeben hat, dann haben es jetzt die Paladine.
Info_ClearChoices(DIA_Addon_Cavalorn_Triggered);
Info_AddChoice(DIA_Addon_Cavalorn_Triggered, "Dann muss jetzt einer von uns beiden ins obere Viertel der Stadt.", DIA_Addon_Cavalorn_Triggered_Pal );
Info_AddChoice(DIA_Addon_Cavalorn_Triggered, "Dann werde ich zu ihnen gehen und das Ornament zurück fordern.", DIA_Addon_Cavalorn_Triggered_OBack );
};
func void B_Cavalorn_Triggered_Wohin (){AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_Wohin_08_00"); //Ich werde jetzt in die Stadt gehen. Wir sehen uns bei Vatras.
AI_StopProcessInfos(self);
Npc_ExchangeRoutine(self,"Stadt");
Log_CreateTopic(TOPIC_Addon_Ornament, LOG_MISSION);
Log_SetTopicStatus(TOPIC_Addon_Ornament, LOG_RUNNING);
B_LogEntry(TOPIC_Addon_Ornament,"Eins der fehlenden Ornamentfragmente befindet sich bei den Paladinen im oberen Viertel.");
MIS_Addon_Cavalorn_GetOrnamentFromPAL = LOG_RUNNING;
self.flags = 0;
};
func void DIA_Addon_Cavalorn_Triggered_OBack (){AI_UnequipArmor(self);
CreateInvItems(self, ITAR_BAU_L, 1);
Npc_RemoveInvItems(self, ITAR_RANGER_Addon, Npc_HasItems(self, ITAR_RANGER_Addon ));
Npc_RemoveInvItems(self, ITAR_Fake_RANGER, Npc_HasItems(self, ITAR_Fake_RANGER ));
AI_EquipBestArmor(self);
AI_Output(other, self, "DIA_Addon_Cavalorn_Triggered_OBack_15_00"); //Dann werde ich zu ihnen gehen und das Ornament zurückfordern.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_OBack_08_01"); //In Ordnung.
B_Cavalorn_Triggered_Wohin ();
};
func void DIA_Addon_Cavalorn_Triggered_Pal (){AI_UnequipArmor(self);
CreateInvItems(self, ITAR_BAU_L, 1);
Npc_RemoveInvItems(self, ITAR_RANGER_Addon, Npc_HasItems(self, ITAR_RANGER_Addon ));
Npc_RemoveInvItems(self, ITAR_Fake_RANGER, Npc_HasItems(self, ITAR_Fake_RANGER ));
AI_EquipBestArmor(self);
AI_Output(other, self, "DIA_Addon_Cavalorn_Triggered_Pal_15_00"); //Dann muss jetzt einer von uns beiden ins obere Viertel der Stadt.
AI_Output(self, other, "DIA_Addon_Cavalorn_Triggered_Pal_08_01"); //Ich hab' dafür keine Zeit. Das wirst du machen müssen.
B_Cavalorn_Triggered_Wohin ();
};
Wozu so kompliziert?
Ich wollte eine möglichst hohe Konfigurabilität und Sprachkompatibilität, damit man das Tool nicht nur für Daedalus verwenden kann. So kann man für verschiedene Sprachen verschiedene Profile erstellen.
Das zurzeit integrierte Daedalus-Profil ist zugegebenermaßen vielleicht etwas unschön/zu bunt, aber ich denke, dass wir hier bei Bedarf und Interesse einen akzeptablen Standard ausarbeiten könnten.
Zustzlich im Paket ist noch die FarbeimerMini.exe.
Dies ist eine leicht veränderte Version des Farbeimers: Beim Start wird der Text der Zwischenablage formatiert, das formatierte
Ergebnis wieder in die Zwischenablage eingefügt und das Programm beendet(welches man nicht sieht).
So kann man z.B. eine Windows-Vergnüpfung erstellen und dieser Verknüpfung eine Tastenkombination zuweisen.
Damit kann man dann ohne das Tool aktiv zu haben schnell einen Text formatieren.
Ich freue mich auf eure Kritik und gefundenen Bugs
Aufjedenfall nützlich. Jetzt weiß ich auch, wie du deine Texte immer Farbig machst
Das Tool, womit ich früher meine Texte eingefärbt habe, war ein komplett anderes:http://upload.worldofplayers.de/files/Färber.zip
Es war kaum konfigurierbar und arbeitete auch nicht mit RegEx.
Da ich das Programm nicht für würdig hielt, gab es auch nie einen offiziellen release-Thread.
Soso, und ich hab mir schon gedacht du machst dir jedes mal die Mühe,
und färbst alles selber ein Wollte dir gestern eingtl. ne PN schicken.
Aber naja, jetzt weiß ichs ja^^
Benutzer, die ihr Benutzerkonto per E-Mail bestätigen müssen
Registriert seit
Jul 2004
Beiträge
3.111
Das Problem bei sowas ist nur, sobald hier mal irgendwas an der Forensoftware grundlegend geändert wird u. z.b. die Farbtags nicht mehr gehen oder innerhalb von den Code-Bereichen kein einfärben mehr zulässit ist, ist der Code absolut unleserlich. Aber das ist eher unwahrscheinlich.
Wahrscheinlicher ist es aber dass hier z.b. mal die hintergrundfarbe gändert wird, von grau auf weis oder so u. dann sind die Farben auch nicht mehr sehr gut lesbar.
Drum kann ich auch nicht leute verstehen, die ihre Texte immer grün oder in sonstigen Farben einfärben, wenn das Forum mal sein design ändert z.b. auf gründ, ist der ganze grüne Text nicht mehr sichtbar ohne ihn zu markieren.
Sinnvoller wäre es die Forensoftware um einen internen parser in php zu erweitern, der code-bereiche in deadalus farblich highlightet, gibt hier ja z.b. php-code u. html-code-Bereiche alternativ zum normalen code-bereich.
Da hast du Recht. Ich bezweifle zwar, dass in absehbarer Zukunft das Design geändert wird (seit 4 Jahren hat sich hier ja auch nichts großartig am Design geändert), aber auf lange Zeit ist es schon besser, wenn das Forum die Formatierung übernimmt.
Das müsste man natürlich mit den Administratoren bezüglich der Umsetzung klären.
Benutzer, die ihr Benutzerkonto per E-Mail bestätigen müssen
Registriert seit
Jul 2004
Beiträge
3.111
Jup, übersichtlicher wärs schon.
Was mich auch immer stört ist dass es im wiki keine hervorhebungen gibt, teilweise nicht mal code-zonen da ist der code schon sehr schlecht lesbar.
Eine neue Version ist da (Anhang im Anfangspost):
-Wort-in-Wort Färbungen entfernt:
Aus printf wird nicht mehr printf gemacht.
-Korrigierte Auto-Einrückfunktion
-Schnelleres Laden der Mini-Version
Fehler in Daedalus.fep augebügelt:
Die Konfigurationsdatei ging davon aus, dass ein einzeiliger Kommentar mit #13 (carriage return) beendet wird. Unter Windows (und wir bewegen uns eben in der überwältigenden Mehrheit unter Windows) werden Zeilen mit #13#10 (carriage return + line feed) beendet.
Der Fehler führt zumindest bei meinen Texteditoren dazu, dass aus einem Zeilenumbruch zwei werden. Ich habe die Korrektur mal in die Daedalus.fep reingehext. Verbesserte Version ist im Anhang.