On 08.10.2010 20:23, Bernd Kreuss wrote:
Hi,

is it only me ore are there others who find the following behaviors of
the pascal syntax highlighter in lazarus strange and inconsistent and
sometimes even annoying?

* some types (String and AnsiString)  are highlighted, all other types
(built in or not) are not highlighted. IMHO no type names should be
highlighted.

This is historical. Delphi did it, so we are doing it, too (btw: to keep it consistent UnicodeString should be highlighted, too ^^). Might be related to the fact that the highlighter (SynEdit) was an original Delphi project thus it inherited this behavior.


* all reserved words for control flow (for, to, if, then, do, else,
repeat, until, while, begin, end, try, except, finally, raise, goto) are
highlighted, the only ones that are not highlighted are break, continue
and exit. IMHO all such reserved words that describe the program
structure should be highlighted. For example break and exit are of the
same caliber as raise (or even goto) and also used for similar design
patterns, I don't see why they should be treated differently.

Reserved words are highlighted. The ones you listed are all reserved words and it's not possible to use them as identifiers (without escaping them with "&"). But "break", "continue" and "exit" aren't reserved keywords. You can even use them as identifiers (I did it once and wondered later on why "exit" isn't working ^^).

Also there are some "context sensitive" reserved words like "index" and "message". The first one is used in properties, but it can be used as a normal identifier as well. E.g. "property Foo[Index: Integer]: Bar" here index will be highlighted, but it only should be highlighted if it is used as "property Bar index 39 GetBar;". It won't be highlighted outside of a class. "message" is used for the message dispatching system in Object Pascal (procedure Foo(aMsg: TMsgStruct); message Bar;), but it is highlighted everywhere and can be used as an identifier everywhere.
Those two are indeed a bit annoying. ^^


I have tried to think about it long and hard but I cannot find any
reason that would justify these anomalies other than maybe some
historical reasons. For example a (hypothetical) reason that string is
internally working in a different way than a Double or an Integer IMHO
does not justify any different syntax highlighting, they all still
belong into the same *category*: they appear in var declarations as type
names and are used like type names everywhere no different than any
other type name, so they consequently should look like type names and
not like language keywords.

I don't know why Borland chose to highlight ShortString, AnsiString and String (WideString is only highlighted by Lazarus), but normal reserved keywords and normal non reserved identifiers are clear. The only troubles make hybrids like "index" and "message".

Regards,
Sven

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to