There are however some limitations inherent to Programmer's editors:
1. While they are helpful in eliminating spelling errors of keywords, they do not check syntax! We have to check this by running the macro, and looking at any errors generated.
2. They need updating. In the case of ZEMAX and ZPL the addition of new features and their associated functions is a regular occurrence. These need to be added into the .chl file under the relevant keyword type.
In the particular case of ZPL another issue that can arise for our editor is that the same descriptor can be used for different operations, and where this takes place the editor will (in general) default to the colour of the first keyword group defined. An example of this is ATYP (Aperture TYPe).
In ZEMAX “ATYP” can be used as a keyword to set the aperture type, or a numeric function to get (i.e. read back) the aperture type. These two operations may be written together in a small block such as:
ATYP = 1
x = ATYP()
PRINT x Which simply prints the value 1 when run. The first line in the above is the keyword, as denoted by the fact it is on the left of the equals sign. The second line is the numeric function, as denoted by the fact it is on the right of the equals sign and has parenthesis. However, if we put this into ConTEXT we see:

ConTEXT in this case cannot tell the difference between the two operations, and so it defaults to the list in which ATYP is defined first, which in our case is the numeric function list, and colours both instances blue.
Generally, this is not a problem if we understand the differences between keywords and numeric functions in ZPL, and is even less of a problem if we read the ZEMAX manual (always a good thing to do) which tells us that ATYP as a keyword is obsolete and that we should be using SETSYSTEMPROPERTY or SYSP! So we can re-write as:

Problem solved!