synthax highligting



  • Hi leute!!

    ich wollte euch mal um anregungen bitten:

    ich schreibe gerade an meiem eigenen editor in c mit gtk+ und nun will ich synthax highligting implementieren als textwidget nutze ich das textView widget mit dem buffer iterator usw... ich hab schon zum coden des highligtings begonnen aber nun ist das extrem langsam mein ansatz:
    immer waenn vom buffer das signal changed geworfen wird mache ich folgendes:
    ich gehe den text von forne nach hinten durch und filtere mir immer jedes wort heraus vergleiche dies dann mit meiner wortliste(die in einer wegen geschw gruenden in einer switch anw stehen) aber dass wird so verdammt langsam waenn der taext laenger wird!!

    nun frage ich euch wie wuerdet ihr das machen !! es muss ja gehen der gedit usw birngens ja auch hin!!



  • GtkSourceView benutzen 😉 ( ist ne extra lib )



  • wo bekomm ich die lib her bzw wo ist ne doku darüber

    DANKE!!!



  • was ist synthax?



  • Synthetisches Hacken? 😛

    @--linuxuser--

    Das ist jetzt nicht dein ernst oder? Schon mal google nach GtkSourceView gefragt?
    Das erste ist die Projektseite.
    Ein wenig Initiative wäre nicht schlecht.
    Aber wenn du faul bist klickst du einfach hier



  • ok tschuldigung werd ich mir merken aber trotzdem DANKE

    nun hab ich ein weiteres problem und zwar ich hab das neue gtksource view installiert auf meinem suse linux 10.0 nun funkt das header einbinden nicht!!

    die gtksourceview headers befinden sich in

    /opt/gnome/include/gtksourceview-1.0/gtksourceview/

    ich hab nun die header mit

    kompilieren tu ich meine gtk+ programme mit

    gcc -o name name.c `pkg-config --cflags --libs gtk+-2.0`

    was muss ich nun beim kompilierbefehl aendern um die gtksourceview libs mitzulinken bzw die headers includieren zu koennen??

    waere super waenn das jemand wüsste!!!
    DANKE



  • hat da keiner ne ahnung??



  • Doch schon, aber ich hab nicht mehr reingeschaut und nicht gesehen das du was geändert hast.

    Probiers einfach mal so:

    gcc -o name name.c `pkg-config --cflags --libs gtksourceview-1.0`



  • DANKE EVILISSIMO

    jetzt funkts aber nun muss ich euch schon wieder nerven!!
    kann mir vielleicht einer ein kleines beispiel zeigen wie mann fuer einen gtksourcebuffer eine language einstellt??

    ich hab mich jetzt stundenlang damit gespielt aber ich kriegs nicht hin auch ein tut konnte ich im inet nicht finden also bitte!! ich braeuchte einen kleinen denkanstoss!!

    DANKE!!



  • Was für eine Sprache sollte es denn sein? Da sind doch schon einige vertreten.
    So sieht das z.b. für C aus

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE language SYSTEM "language.dtd">
    <language _name="C" version="1.0" _section="Sources" mimetypes="text/x-c;text/x-chdr;text/x-csrc">
    
    	<escape-char>\</escape-char>
    
    	<line-comment _name = "Line Comment" style= "Comment">
    		<start-regex>//</start-regex>
    	</line-comment>
    
    	<block-comment _name = "Block Comment" style = "Comment">
    		<start-regex>/\*</start-regex>
            	<end-regex>\*/</end-regex>
    	</block-comment>
    
    	<block-comment _name = "'#if 0' Comment" style = "Comment">
    		<start-regex>^[ \t]*#[ \t]*if[ \t]*0</start-regex>
            	<end-regex>[ \t]*#[ \t]*(endif|else)</end-regex>
    	</block-comment>
    
    	<string _name = "String" style = "String" end-at-line-end = "TRUE">
    		<start-regex>&quot;</start-regex>
    		<end-regex>&quot;</end-regex>
    	</string>
    
    	<syntax-item _name = "Include/Pragma" style = "Preprocessor">
    		<start-regex>^#[ \t]*(include|pragma)</start-regex>
    	         <end-regex>\n</end-regex>
    	</syntax-item>
    
    	<keyword-list _name = "Keywords" style = "Keyword" case-sensitive="TRUE">
    		<keyword>asm</keyword>
    		<keyword>break</keyword>
    		<keyword>case</keyword>
    		<keyword>continue</keyword>
    		<keyword>default</keyword>
    		<keyword>do</keyword>
          		<keyword>else</keyword>
    		<keyword>for</keyword>
    		<keyword>fortran</keyword>
    		<keyword>goto</keyword>
    		<keyword>if</keyword>
    		<keyword>return</keyword>
    		<keyword>sizeof</keyword>
    		<keyword>switch</keyword>
    		<keyword>while</keyword>
    	</keyword-list>
    
    	<keyword-list _name = "Types" style = "Data Type" case-sensitive="TRUE">
    		<keyword>_Bool</keyword>
    		<keyword>_Complex</keyword>
    		<keyword>_Imaginary</keyword>
    		<keyword>auto</keyword>
    		<keyword>char</keyword>
    		<keyword>const</keyword>
    		<keyword>double</keyword>
          		<keyword>enum</keyword>
    		<keyword>extern</keyword>
    		<keyword>float</keyword>
    		<keyword>int</keyword>
    		<keyword>inline</keyword>
    		<keyword>long</keyword>
    		<keyword>register</keyword>
    		<keyword>restrict</keyword>
    		<keyword>short</keyword>
    		<keyword>signed</keyword>
    		<keyword>static</keyword>
    		<keyword>struct</keyword>
    		<keyword>typedef</keyword>
    		<keyword>union</keyword>
    		<keyword>unsigned</keyword>
    		<keyword>void</keyword>
    		<keyword>volatile</keyword>
    	</keyword-list>
    
    	<string _name = "Character Constant" style = "String" end-at-line-end = "TRUE">
    		<start-regex>&apos;</start-regex>
    		<end-regex>&apos;</end-regex>
    	</string>
    
    	<pattern-item _name = "Decimal" style = "Decimal">
    		<regex>\b([1-9][0-9]*|0)([Uu]([Ll]|LL|ll)?|([Ll]|LL|ll)[Uu]?)?\b</regex>
    	</pattern-item>
    
    	<pattern-item _name = "Floating Point Number" style = "Floating Point">
    		<regex>\b([0-9]+[Ee][-]?[0-9]+|([0-9]*\.[0-9]+|[0-9]+\.)([Ee][-]?[0-9]+)?)[fFlL]?</regex>
    	</pattern-item>
    
    	<pattern-item _name = "Octal Number" style = "Base-N Integer">
    		<regex>\b0[0-7]+([Uu]([Ll]|LL|ll)?|([Ll]|LL|ll)[Uu]?)?\b</regex>
    	</pattern-item>
    
    	<pattern-item _name = "Hex Number" style = "Base-N Integer">
    		<regex>\b0[xX][0-9a-fA-F]+([Uu]([Ll]|LL|ll)?|([Ll]|LL|ll)[Uu]?)?\b</regex>
    	</pattern-item>
    
    	<keyword-list _name = "Common Macro" style = "Preprocessor" case-sensitive="TRUE">
    		<keyword>NULL</keyword>
    		<keyword>TRUE</keyword>
    		<keyword>FALSE</keyword>
    		<keyword>MAX</keyword>
    		<keyword>MIN</keyword>
    		<keyword>__LINE__</keyword>
    		<keyword>__DATA__</keyword>
    		<keyword>__FILE__</keyword>
    		<keyword>__func__</keyword>
    		<keyword>__TIME__</keyword>
    		<keyword>__STDC__</keyword>
    	</keyword-list>
    
    	<keyword-list _name = "Preprocessor Definitions" style = "Preprocessor" case-sensitive="TRUE"
    		match-empty-string-at-beginning = "FALSE"
    		match-empty-string-at-end = "TRUE"
    		beginning-regex = "^[ \t]*#[ \t]*">
    		<keyword>if</keyword>
    		<keyword>ifdef</keyword>
    		<keyword>ifndef</keyword>
    		<keyword>else</keyword>
    		<keyword>elif</keyword>
    		<keyword>define</keyword>
    		<keyword>endif</keyword>
    		<keyword>undef</keyword>
    		<keyword>error</keyword>
    		<keyword>pragma</keyword>
    		<keyword>line</keyword>
    	</keyword-list>
    
    </language>
    


  • tschuldigung dass ich so bloed frage aber ich steig gerade echt nicht dahinter!

    Wie programmiere ich es jetzt dass mein gtksourceView C highlightet??

    ich breuchte einfach nur einen denkanstoss um das ganze begreiffen zu koennen ich muss erlich sagen zurzeit habe ich keinen schimmer wo ich anfangen soll??

    ein kleines codebeispiel waere auch vielleicht sehr hilfreich!!

    DANKE!!



  • Guck dir das mal an. Für GtkSourceView gibt es kein Tutorial ( das haben die auch auf der Seite stehen nur diesen Code der das erklären sollte )

    So kann man das auch lernen. Man muss sich schon damit richtig auseinandersetzen damit man das verwenden kann. Ich selber habe es nie benutzt aber weis das es das gibt und verwendet wird. Schau dir einfach mal den Code an. Compiliere ihn und fange and das herauszupicken was du wissen musst.

    http://cvs.gnome.org/viewcvs/gtksourceview/tests/test-widget.c?view=markup



  • jaaaa!! THX evilissimo!!


Anmelden zum Antworten