From: Maël Hörz <ma...@us...> - 2008-10-25 23:15:56
|
Update of /cvsroot/synedit/SynEdit/SynGen In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv9391/SynGen Modified Files: Tag: Unicode_2004_08_31 GenLex.pas SynGenUnit.pas Added Files: Tag: Unicode_2004_08_31 SynGen.dproj Log Message: - SynGenUnit.pas: Use UnicodeString instead of MemoryStream to load the flle contents of a .msg-file , since now the assumption that one Char = one Byte doesn't hold anymore. It was very dangerous to use MemoryStream anyway. - Fix other small issues and warnings for Delphi 2009 Index: SynGenUnit.pas =================================================================== RCS file: /cvsroot/synedit/SynEdit/SynGen/SynGenUnit.pas,v retrieving revision 1.18.2.9 retrieving revision 1.18.2.10 diff -u -d -r1.18.2.9 -r1.18.2.10 --- SynGenUnit.pas 14 Sep 2008 16:27:16 -0000 1.18.2.9 +++ SynGenUnit.pas 25 Oct 2008 23:15:48 -0000 1.18.2.10 @@ -154,7 +154,7 @@ IniFile: string; OutFile: TextFile; Sensitivity: Boolean; - Stream: TMemoryStream; + LexFileContents: UnicodeString; Lex: TGenLex; KeyList: TList; SetList: TList; @@ -224,7 +224,7 @@ Result := ''; end; -function StuffString(const Value: AnsiString): AnsiString; +function StuffString(const Value: UnicodeString): UnicodeString; var i: Integer; begin @@ -252,22 +252,23 @@ end; {$ENDIF} -function ToAlphaNum(S: UnicodeString): AnsiString; +function ToAlphaNum(S: UnicodeString): UnicodeString; var - c: AnsiChar; + c: Char; begin - Result := S; for c := #33 to #47 do - Result := AnsiReplaceStr(Result, c, IntToStr(Ord(c))); + S := AnsiReplaceStr(S, c, IntToStr(Ord(c))); for c := #58 to #64 do - Result := AnsiReplaceStr(Result, c, IntToStr(Ord(c))); + S := AnsiReplaceStr(S, c, IntToStr(Ord(c))); for c := #91 to #96 do - Result := AnsiReplaceStr(Result, c, IntToStr(Ord(c))); + S := AnsiReplaceStr(S, c, IntToStr(Ord(c))); for c := #123 to #191 do - Result := AnsiReplaceStr(Result, c, IntToStr(Ord(c))); + S := AnsiReplaceStr(S, c, IntToStr(Ord(c))); + + Result := S; end; function IsASCIIAlphaNum(S: UnicodeString): Boolean; @@ -313,7 +314,7 @@ begin for I := #0 to #255 do begin - case I in ['_', 'A'..'Z', 'a'..'z'] of + case CharInSet(I, ['_', 'A'..'Z', 'a'..'z']) of True: begin if (I > #64) and (I < #91) then @@ -334,7 +335,7 @@ for I := #0 to #255 do begin J := UpperCase(I)[1]; - case I in ['_', 'A'..'Z', 'a'..'z'] of + case CharInSet(I, ['_', 'A'..'Z', 'a'..'z']) of True: mKeyHashTable[I] := Ord(J) - 64; else mKeyHashTable[I] := 0; @@ -482,7 +483,6 @@ TComboBox(FrmMain.Components[i]).Items.Add('SYNS_AttrVariable'); end; PageControl.ActivePage := PageControl.Pages[0]; - Stream := TMemoryStream.Create; Lex := TGenLex.Create; KeyList := TList.Create; SetList := TList.Create; @@ -546,7 +546,6 @@ begin ClearAll; Lex.Free; - Stream.Free; IdentList.Free; KeyList.Free; SetList.Free; @@ -554,13 +553,21 @@ end; procedure TFrmMain.BtnStartClick(Sender: TObject); +var + LexFileLines: TUnicodeStringList; begin ClearAll; Screen.Cursor := crHourGlass; - Stream.Clear; - Stream.LoadFromFile(OpenDialog.FileName); - Lex.Origin := Stream.Memory; + + LexFileLines := TUnicodeStringList.Create; + try + LexFileLines.LoadFromFile(OpenDialog.FileName); + LexFileContents := LexFileLines.Text; + finally + LexFileLines.Free; + end; + Lex.Origin := PWideChar(LexFileContents); Lex.Tokenize; while Lex.RunId <> IDIdentifier do @@ -1177,9 +1184,9 @@ I := 0; while I < KeyList.Count do begin - Writeln(OutFile, ' function Func' + + Writeln(OutFile, AnsiString(' function Func' + ToAlphaNum(FirstLetterCap(TLexKeys(KeyList[I]).KeyName)) + - '(Index: Integer): T' + IdentPre + 'TokenKind;'); + '(Index: Integer): T' + IdentPre + 'TokenKind;')); inc(I); end; Index: GenLex.pas =================================================================== RCS file: /cvsroot/synedit/SynEdit/SynGen/GenLex.pas,v retrieving revision 1.4.2.2 retrieving revision 1.4.2.3 diff -u -d -r1.4.2.2 -r1.4.2.3 --- GenLex.pas 24 Feb 2005 21:02:22 -0000 1.4.2.2 +++ GenLex.pas 25 Oct 2008 23:15:48 -0000 1.4.2.3 @@ -154,7 +154,7 @@ Identifiers[I] := False; end; J := UpperCase(I)[1]; - case I in ['_', 'a'..'z', 'A'..'Z'] of + case CharInSet(I, ['_', 'a'..'z', 'A'..'Z']) of True: mHashTable[I] := Ord(J) - 64 else mHashTable[I] := 0; @@ -187,7 +187,7 @@ function TGenLex.KeyHash(ToHash: PChar): Integer; begin Result := 0; - while ToHash^ in ['_', '0'..'9', 'a'..'z', 'A'..'Z'] do + while CharInSet(ToHash^, ['_', '0'..'9', 'a'..'z', 'A'..'Z']) do begin Inc(Result, mHashTable[ToHash^]); Inc(ToHash); @@ -502,7 +502,7 @@ procedure TGenLex.NullProc; begin if fTokenizing then - if not (FOrigin[Walker - 1] in [#10, #13]) then + if not CharInSet(FOrigin[Walker - 1], [#10, #13]) then FLinePosList.Add(Walker); end; @@ -513,7 +513,7 @@ procedure TGenLex.SpaceProc; begin - while fOrigin[Walker] in [#1..#9, #11, #12, #14..#32] do + while CharInSet(fOrigin[Walker], [#1..#9, #11, #12, #14..#32]) do inc(Walker); end; --- NEW FILE: SynGen.dproj --- (This appears to be a binary file; contents omitted.) |