Text Formatierung (ähnlich BBcode) in GML

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Text Formatierung (ähnlich BBcode) in GML

    Hallo,
    ich hab mir vorgenommen einen wirklich kleinen Texteditor zu programmieren. Er soll definitiv nicht mehr Formatierungsmöglichkeiten haben als BBcode (also der des Forums hier), sprich font, size, color, underline, crossed out usw. (die quellcode sachen und zitate brauche ich auch nicht). Ich setze meine Ansrüche also so tief wie möglich nur ist die Frage, wie gehe ich die ganze sache an? Wie vermeide ich im quellcode (zum speichern und anzeigen) sowas? :

    Quellcode

    1. [col=w] [col=B] balbalblabla [/col][/col] // so etwas würde entstehen wenn man seine formatierung ändert täte oder gar einmal ein leerzeichen mitnehmen würde was man vorher nicht tat.

    Und wie kann ich bei align folgendes checken:
    Wenn man folgenden teil des satzes markiert und align center macht (Hallo ich bin ein testsatz) dann rutscht das "ein testsatz" eine zeile nach unten (logisch) wenn man aber das ganze markiert dann bleibt es oben (eigentlich logisch aber schwer, glaub ich, umzusetzten). Ich müsste also checken ob vor und nachdem zu zentrierendem noch etwas anderes als leerzeichen sind und sie gegebenfalls mitreinnehmen. Ich hatte auch mal ein beispiel gesehen das den (col-tag) interpretieren/zeichnen konnte. Falls es jemand kennt bitte melden 8) . Ich für jede Art von Hilfe oder Denkanstössen oder sogar Beispiele oder lInks offen. :D

    Mfg Whiterock
  • Wozu gibt es fonts und draw ?

    GML-Quellcode

    1. draw_set_color (c_red)
    2. draw_set_font(ft_blabla)
    3. draw_text (x,y,"blabla")
    4. draw_set_color (c_black)
    5. draw_set_font(ft_blabla3)
    6. draw_text (x+20,y+20,"blabla")


    ;)
    EDIT: aso, das meinst du, sorry, habe ich zu spät gecheckt :headtouch:
    EDIT2: aber du könntest es ja so ähnlich machen, z.B. mit if ...
    "OMG, ich habe Kenny getötet"
    "Ich bin ein echter gangstar. Ich cheate in GTA San Andreas."
    "Ich bin Minecrafter ........ UND ICH BIN STOLZ DRAUF!!!"

    HomePage: the-rider.de.ki/
  • whiterock schrieb:

    Hallo,
    ich hab mir vorgenommen einen wirklich kleinen Texteditor zu programmieren. Er soll definitiv nicht mehr Formatierungsmöglichkeiten haben als BBcode (also der des Forums hier), sprich font, size, color, underline, crossed out usw. (die quellcode sachen und zitate brauche ich auch nicht). Ich setze meine Ansrüche also so tief wie möglich nur ist die Frage, wie gehe ich die ganze sache an? Wie vermeide ich im quellcode (zum speichern und anzeigen) sowas? :
    Ich hatte eigentlich gemeint wie ich diese tags interpretieren könnte und ausserdem will einen editor machen ähnlich dem in dem ich grad schreibe :P .Ich schätze du hast dir nur die ersten zwei wörter durchgelesen :|
  • ja, das muss ich wohl zu geben :rolleyes: aber:

    EDIT2: aber du könntest es ja so ähnlich machen, z.B. mit if ...
    "OMG, ich habe Kenny getötet"
    "Ich bin ein echter gangstar. Ich cheate in GTA San Andreas."
    "Ich bin Minecrafter ........ UND ICH BIN STOLZ DRAUF!!!"

    HomePage: the-rider.de.ki/
  • schon gut, ja ich find einfach nicht den richtigen ansatz und hab dieses example mit dem col zegs verloren :S . Habe auch das gefunden, Yoyogames -Html to gml finde dort aber keine script version oder dll, ich kann extensions nicht benutzen weil bei der übertragung vom gm von einem anderen auf diesen computer ein fehler statt fand und seitdem kann ich nix mehr installieren oder deintallieren. :pinch:

    Vielleicht kennt ihr ja das eine Version von Html to GML ohne extension oder dieses col beispiel!? Wäre nett
  • Schau dir das mal an:
    henrik1235.bplaced.net/gmtext/gm_text.txt Den Client hab ich nicht mehr, oder mal sehen vll doch.
    Weiter gemacht hab ich da nie, keine Lust oder so, ob der Code überhaupt noch geht?
    #edit Gefunden: Einfach unter henrik1235.bplaced.net/gmtext/ gucken, in der zip ist ne Exe+Gmk da und den ganzen Kram^^
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von henrik1235 ()

  • Wow, das ist zwar das was ich suchte aber ishc in das ganze reinzufinden ist schwierig, 2 fragen was bewirken die zwei befehle, read_gmtext und read_html und was ist die df.dll? (in die ganzen ordner finde ich mich auch nicht wirklich hinein und die startanzeige ist auch sehr wir, also die input dialoge wo man nicht weids was man eingeben soll ^^

    P.s. Bin gerade dabei den read_html code zu formatieren :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von whiterock ()

  • Die df.dll ist die DownloadFile DLL, für den Download der Bilder oder so. ^^ read_gmtext liest den Code aus einer Datei, read_html liest HTML Datei hab ich mal angefangen bin aber nicht weit gekommen.^^ (Nicht sehr weit, also besser gmtext nehmen)
    also die input dialoge wo man nicht weids was man eingeben soll ^^
    Naja einfach mal rumprobieren.^^
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Ich hab vor kurzem etwas ähnliches gemacht, vielleicht hilft es dir ja.
    Es ist ein Skript, das einen Text "mitten drin" einfärben kann.
    So wird zum Beispiel aus "Hallo %7ich %fbin ein %cText." "Hallo ich bin ein Text.".
    Spoiler anzeigen

    GML-Quellcode

    1. var xx,yy,text,key,c,color,shadow,list,i,line,xxx,index,str;
    2. xx = argument0;
    3. yy = argument1;
    4. text = argument2;
    5. key = "%";
    6. c = draw_get_color();
    7. color = c_black;
    8. shadow = c_white;
    9. list = cpb_string_split(text,"#",ds_list_create());
    10. for (i=0;i<ds_list_size(list);i+=1) {
    11. line = ds_list_find_value(list,i);
    12. xxx = xx;
    13. while (line!="") {
    14. if (string_char_at(line,1)==key) {
    15. if (string_length(line)<2) { break; }
    16. color = scr_get_color(string_char_at(line,2));
    17. if (color_get_value(color)>127) { shadow = c_black; }
    18. else { shadow = c_white; }
    19. line = string_delete(line,1,2);
    20. if (line=="") { break; }
    21. } index = string_pos(key,line);
    22. if (!index) { str = line; line = ""; }
    23. else {
    24. str = string_copy(line,1,index-1);
    25. line = string_delete(line,1,index-1);
    26. } if (str=="") { continue; }
    27. draw_set_color(shadow);
    28. draw_text(xxx+1,yy+1,str);
    29. draw_set_color(color);
    30. draw_text(xxx,yy,str);
    31. xxx += string_width(str);
    32. } yy += string_height("X");
    33. } ds_list_destroy(list);
    34. draw_set_color(c);
    Alles anzeigen
    EDIT: Der Skript funktioniert übrigens nicht mit Text-Aligns, dazu bräuchte man (zumindest im GM7 - gibt kein draw_get_halign()) zusätzliche Argumente und ich brauchte die nicht, also hab ich das weggelassen.

    scr_get_color(char) gibt dir die Farbe eines Zeichens zurück, also wenn irgendwo % auftaucht, wird das nächste Zeichen benutzt um die Farbe des weiteren Textes zu bestimmen. So gibt "7" z.B. #BBBBBB aus. cpb_string_split(str,split,list) teilt einen String an einem bestimmten Zeichen auf und fügt diese in eine Liste ein. Kannst du übrigens hier finden.

    Was du machen musst ist wahrscheinlich nach dem ersten [ zu suchen und den Text bis zum nächsten ] zu interpretieren und die Werte zu einer Liste hinzuzufügen, eine für jede Eigenschaft (Farbe, Font, ...). Wenn das Ende eines Tags kommst löschst du den letzen Wert aus der Liste.

    Quellcode

    1. Text: "Huhu, [b]der Text ist [b]Fett[/b] und [i]dieser hier sogar kursiv[/i][/b]. [col=red]Wie wärs mit etwas [col=blue]Farbe?[/col][/col]"

    Interpretation:
    Spoiler anzeigen

    Quellcode

    1. "Huhu, "
    2. fett: 1 (Font ändern)
    3. "der Text ist "
    4. fett: 2
    5. "Fett"
    6. fett: 1
    7. " und "
    8. kursiv: 1 (Font ändern)
    9. "dieser hier sogar kursiv"
    10. kursiv: 0 (Font ändern)
    11. fett: 0 (Font ändern)
    12. ". "
    13. farbe: rot
    14. "Wie wärs mit etwas "
    15. farbe: rot, blau
    16. "Farbe?"
    17. farbe: rot
    18. farbe: -
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von copyboy ()

  • Also wenn ich bei File zum beispiel: henrik1235.bplaced.net/impressum.html eingebe und dann auf gmtext klicke, dann kommt "local?" was soll ich da angeben? (bei nein kommt n error: error defining an external call (kann nur von der http oder der df kommen), ja ich hab alles in einen ordner extrahiert ^^ )

    Edit: Danke schonmal Copyboy, ich glaube solche codes mit col und font so bring ich sogar auch zu stande (ausser das align problem), nur das editieren? Da hab ich echt keinen Plan. Als das der User es so sieht wie es wird und er es so editieren kann nennt sich irgendwie wsiywig oder so irgendwie :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von whiterock ()

  • WYSIWYG wird überbewertet und im GM ist es noch eine ganz andere Sache. Nicht dass es nicht geht, aber ich denke die Mühe ist es nicht Wert (ich würde es mir nicht zutrauen). Wenn du möchtest kannst du ja zwei Felder machen, eins zum Eingeben und eins um das Ergebnis zu betrachten.

    EDIT: Jetzt werd ich schon mit Irrenhaus verwechselt, heh ^^"
  • oops sry :whistling: , naja okay, ich meinte ja nur so was wie word nur viel viel viel viel einfacher, aber wie genau meinst du zwei felder? quellcode und editor oder wie? Auf jeden Fall versuche ich mal ein paar scripts zu proggen und warte auf eine antwort von henrik. :P
  • Erster Interpreter Script der das ganze drawt:
    Spoiler anzeigen

    GML-Quellcode

    1. var s, wmax, hmax, w, h, p, c, xa, ya, hh, Bold, Italic, Underline;
    2. s=argument0
    3. wmax=argument3
    4. hmax=argument4
    5. xa=argument1
    6. ya=argument2
    7. w=0
    8. h=0
    9. p=1
    10. c=""
    11. hh=0
    12. /*paras:*/ Bold=0; Italic=0; Underline=0;
    13. while(p<=string_length(s))
    14. {
    15. if string_copy(s,p,3)="[b]"
    16. {
    17. Bold=true
    18. s=string_replace(s,"[b]","")
    19. }
    20. if string_copy(s,p,4)="[/b]"
    21. {
    22. Bold=false
    23. s=string_replace(s,"[/b]","")
    24. }
    25. if string_copy(s,p,3)="[i]"
    26. {
    27. Italic=true
    28. s=string_replace(s,"[i]","")
    29. }
    30. if string_copy(s,p,4)="[/i]"
    31. {
    32. Italic=false
    33. s=string_replace(s,"[/i]","")
    34. }
    35. if string_copy(s,p,3)="[u]"
    36. {
    37. Underline=true
    38. s=string_replace(s,"[u]","")
    39. }
    40. if string_copy(s,p,4)="[/u]"
    41. {
    42. Underline=false
    43. s=string_replace(s,"[/u]","")
    44. }
    45. // [...] //
    46. c=string_char_at(s,p)
    47. hh=discuss_font_height()
    48. discuss_font(Bold,Italic)
    49. draw_text(xa,ya,c)
    50. if Underline=true
    51. {
    52. draw_line(xa,ya+hh,xa+string_width(c),ya+hh)
    53. }
    54. xa+=string_width(c)
    55. if xa+string_width(string_char_at(s,p+1))>wmax
    56. {
    57. xa=0
    58. ya+=hh //string_height("[]")
    59. }
    60. p+=1
    61. }
    Alles anzeigen

    discuss_font stellt das zu verwendende/passende font ein.
    discuss_font_height errechnet die für die underline funktion passende normale Schrifthöhe (damit es zu keiner pixel verschiebung kommt). Einfach gesagt gibt sie die Höhe der Buchstaben zurück :D . Die frage ist wie ich das mit dem editor jetzt mache, ich hab da nicht mal einen klitzekleinen ansatz.

    Bitte um Hilfe für einen Denkanstoss oder etwas was mich weiterbringt. 8)

    p.s. Hat vielleicht irgednwer Lust es mit mir zu machen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von whiterock ()