Callam Geschrieben 29. März 2010 Teilen Geschrieben 29. März 2010 Hi, ich versuche mich grade an einem einfachen Syntaxhighlighter für sql. für das highlighting benutze ich ein div element, in dem der text per javascript und regex farblich formatiert wird, was auch soweit funktioniert eingaben in das div element mache ich per tastatur eventhandler, aber ich habe keine idee wie ich da einen curser einbaue der im text anzeigt, wo man grade schreibt oder einfügt, bzw mit dem man per pfeiltasten im text navigieren kann (der kleine blinkende strich den es in so gut wie jedem texteditor gibt). meine ideen waren bisher, das man nen 2 px breites bild oder nen | (alt gr + '<') nimmt, aber bei dem bild ka wie ichs positionieren soll und der strich verändert die zeilenlänge um ein zeichen und verursacht so nervige effekte bei automatischen zeilenumbrüchen ich habe es auch schon mit dem attribut contenteditable (oder so ähnlich) versucht, allerdings wird da der text schon von vornherein mit <p> tags formatiert und im firefox funktioniert es auch nicht sonderlich gut. hat da jemand eine idee, wie ich den cursor realisieren kann? bitte keine fertigen syntaxhighlighter, da es bei meinem versuch einen zu basteln nicht um praktischen nutzen, sondern nur um den lerneffekt geht... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 29. März 2010 Teilen Geschrieben 29. März 2010 gut dann ne dumme frage: warum in <div>s und nicht in nem textarea? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Callam Geschrieben 29. März 2010 Autor Teilen Geschrieben 29. März 2010 weil man da nur den ganzen inhalt der textarea formatieren kann, und nicht nur einzelne wörter (wie beim Syntaxhighlighting benötigt) ... oder geht das doch irgendwie? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 29. März 2010 Teilen Geschrieben 29. März 2010 (bearbeitet) CodePress - Real Time Syntax Highlighting Editor written in JavaScript tut genau das und einiges mehr (auto-complete, ..) is zwar knapp 2 jahre her, aber ich glaube das ließ sich sogar recht leicht benutzen und anpassen. wobei ich grad seh, das die zwar an ne textarea binden aber die darstellung dann in html passiert ^^ Bearbeitet 29. März 2010 von _n4p_ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Callam Geschrieben 29. März 2010 Autor Teilen Geschrieben 29. März 2010 (bearbeitet) deswegen: bitte keine fertigen syntaxhighlighter, da es bei meinem versuch einen zu basteln nicht um praktischen nutzen, sondern nur um den lerneffekt geht... ... und weil ich da noch nen paar andere sachen als syntaxhighlighter mit ausprobieren wollte Bearbeitet 29. März 2010 von Callam Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
_n4p_ Geschrieben 29. März 2010 Teilen Geschrieben 29. März 2010 das war auch nur n hinweis, nicht die aufforderung den zu benutzen. aber man kann sich doch mal umsehen wie andere sowas machen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 30. März 2010 Teilen Geschrieben 30. März 2010 Guck Dir mal TinyMCE an, ist OpenSource ... da kannst Du ja gucken, wie die's mit WYSIWYG gemacht haben und Highlighting wäre ja von da aus kein Problem mehr Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Callam Geschrieben 31. März 2010 Autor Teilen Geschrieben 31. März 2010 ein bisschen weiter gekommen bin ich durch die beispiele, aber ich hab immer noch n paar kleine probleme... Mein Quellcode: <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <style> body { text-align:right; } p { margin:0px; } </style> <script src="prototype.js" type="text/javascript" language="Javascript"></script> <title></title> <script> var dingens = new PeriodicalExecuter(function(evt) { //Highlighting zurücksetzen if(document.body.innerText.length >0) { var range = document.selection.createRange(); range.moveStart("character", -10000000000000000); range.moveEnd ("character", -10000000000000000); range.moveStart('character',0); range.moveEnd('character',document.body.innerText.length); range.execCommand("ForeColor",false,"#000000"); } //sonst Verschiebung d. Highlighting durch Zeilenumbrüche var txt = document.body.innerText.replace(/\n/g,""); //Start u. Endposition d. Hervorhebung var rStart = txt.search(/\'(.*?)(\')/); var rEnd = txt.match(/\'(.*?)(\')/); rEnd = rEnd ? rEnd[0].length : false; //Hervorheben if(rEnd&&rStart) { var range = document.selection.createRange(); range.moveStart("character", -10000000000000000); range.moveEnd ("character", -10000000000000000); range.moveEnd("character",rEnd); range.moveStart("character", -10000000000000000); range.moveEnd ("character", -10000000000000000); range.moveStart("character",rStart); range.moveEnd("character",rEnd); range. var test = range.htmlText.match(/<\/P>/g); range.execCommand("ForeColor",false,"#FF0033"); } }, 5); //wenn fertig 1, jetzt 5 damit Testausgaben mit alert nicht nerven </script> </head> <body contenteditable="true" id="body" valign="right" oncontextmenu="alert(document.body.innerHTML);alert(document.body.innerText);return false;"> </body> </html> zum testen hab ich jetzt mal alles in eine datei gepackt, javascript und css kommen später natürlich in eigene dateien. mein problem ist nun an der stelle: var rStart = txt.search(/\'(.*?)(\')/); var rEnd = txt.match(/\'(.*?)(\')/); rEnd = rEnd ? rEnd[0].length : false; so bekomm ich leider nur den ersten treffer. versucht habe ich es, in dem ich alle treffer von txt.match(/\'(.*?)(\')/); durchgegangen bin, und dann wollte ich mit range.findText (hatt ich gestern irgendwo gefunden) die treffer markieren und dann mit range.execCommand("ForeColor",false,"#FF0033"); färben, hat aber nicht funktioniert... das ganze soll vor allem im ie6+ laufen, von der idee, das auch für andere browser zu machen habe ich mich vererst mal verabschiedet, da mir der aufwand für ein "nur mal schauen ob ichs hinbekomm" zu groß wäre Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.