Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: SynEdit-Highlighter, der Strings ignorieren soll

  Alt 2. Dez 2005, 08:32
Hallo Matthias,

Zitat von Matze:
Also müsste es ja irgendwie so in der Art gehen, nur geht es nicht, da dann die Parameter für eine Schleife in der erzeugten Unit fehlen
Comment,BraceComment,--
da hast du recht. Ich habe mir SynGen mal angesehen. Ich weiß nicht warum, aber alle scheinen eine irre Freude daran zu haben die SynGen grammar files durch eigene Code-Strecken zu verbiegen - nur um EOL terminierte enclosures zu ermöglichen. Ich halte eine kleine Änderung an der SynGenUnit für komfortabler und effektiver:

Delphi-Quellcode:
begin
  // ...

    // the following condition enables EOL termination for
    // enclosures in the ENCLOSEDBY section of SYNGEN grammar
    // files when terminator is an empty string
    // (marabu 2005-12-02)
    if TLexEnclosedBy(EnclosedList[I]).EndsWith <> 'then
    begin
      Write(OutFile, sPrefix, ' if ');
      for J := 1 to Length(TLexEnclosedBy(EnclosedList[I]).EndsWith) do
      begin
        if (J > 1) then
        begin
          Writeln(OutFile, ' and');
          Write(OutFile, sPrefix, ' ');
        end;
        Write(OutFile, '(fLine[Run' + AddInt(J - 1) + '] = ''
          + StuffString(TLexEnclosedBy(EnclosedList[I]).EndsWith[J]) + ''')');
      end;
      Writeln(OutFile, ' then');
      Writeln(OutFile, sPrefix, ' begin');
      Writeln(OutFile, sPrefix, ' Inc(Run,
        + IntToStr(Length(TLexEnclosedBy(EnclosedList[I]).EndsWith)) + ');');
      Writeln(OutFile, sPrefix, ' fRange := rsUnKnown;');
      Writeln(OutFile, sPrefix, ' Break;');
      Writeln(OutFile, sPrefix, ' end;');
    end;
  // ...
end;
Damit werden alle enclosures ohne definierten terminator durch EOL terminiert - und für deine Kommentarsyntax wird ein korrekter Parser wird generiert - hoffe ich...

Vorweihnachtliche Grüße vom marabu
  Mit Zitat antworten Zitat