FreeCalypso > hg > ueda-linux
diff ueda/doc/uschemlang.txt @ 0:cd92449fdb51
initial import of ueda and ifctf-part-lib from ifctfvax CVS
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 20 Jul 2015 00:24:37 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ueda/doc/uschemlang.txt Mon Jul 20 00:24:37 2015 +0000 @@ -0,0 +1,132 @@ +uschem language for schematic sheets + +uschem is the component of uEDA that deals with the graphical or non-graphical +schematic sheets as opposed to the MCL. These schematic sheets are ASCII text +files (conventional suffix is .usch, although it isn't hard-coded into any uEDA +tools) in a special language defined in this document. + +At the high level each schematic sheet may be either graphical or non-graphical +and consists of a set of objects that embody electrical and/or graphical +information. Component objects (component instances) provide a link between the +schematic sheet and the MCL, Net and GraphNet objects declare electrical +interconnections (see netlisting.txt), GraphBlock objects serve as containers +for purely graphical elements, and a few other object types will be explained in +detail later. Most object types accept decorations, which are the uschem +syntactic term for information elements that are not objects in themselves, but +are attached to a particular object. + +At the low level the uschem syntax is based on the same principle as C and many +other languages used in the UNIX world: the source file is treated as consisting +of tokens which are either self-delimiting or delimited by white space; with a +few exceptions all white space (spaces, tabs and newlines) is treated the same, +i.e., line boundaries have no special significance to the parser. The tokens +which make up the language consist of: + +* ASCII characters (),;={} are self-delimiting tokens. + +* A quoted string (enclosed in double quotes '"') is a quoted-string token. + To include a '"' character in a quoted string, escape it as '\"'; to include + a backslash '\', escape it as '\\'. + +* The following tokens are delimited by white space, by any of the self- + delimiting tokens listed above, or by '%' comments (see below): + + + Keywords + + Numbers (decimal integers) + + Any other strings (unquoted-string tokens) + +Wherever the syntax calls for a string giving some user data, either a quoted or +an unquoted string may be given; quoted strings are required only if they +contain special characters. Keywords and numbers must not be quoted. + +Comments + +The uschem language supports two kinds of comments. The first kind are +PostScript-style comments. These comments are introduced by a '%' character and +continue to the end of the line (one of the few places in the uschem language +where newlines differ from other white space). This comment style is very +convenient, but they suffer from one serious problem: if a schematic sheet is +processed by a program that parses the original, does some transformations to +it, and writes out a new .usch file (uschem-rewrite(1) or the future graphical +schematic editor), PostScript-style comments will be lost because they are not +structured and thus cannot survive the parsing process. + +The other kind of comments are structured comments. These take the form of +Comment objects or Comment decorations on other objects; the body of the comment +takes the form of a string token (usually quoted). Because they take their +proper place in the uschem language of objects and decorations, such structured +comments can survive processing by tools that manipulate schematic sheets at +that level. + +Graphics model + +The graphical aspects of uschem schematics have been borrowed heavily from +gschem, the schematic capture tool from the gEDA project - the latter is the +closest thing to a mainstream EDA package that has ever been used by the author +of uEDA. All geometric dimensions for graphical elements on schematic sheets as +well as the dimensions of the sheets themselves are given in gschem units, and +most of the commonly used graphics primitives have also been copied from gschem. +Users wanting to make use of the graphical features of uschem need to be +familiar with gschem as these gschem-derived graphical features won't be +described here in detail. + +There is, however, one major difference between the graphics models of gschem +and uschem. gschem is a GUI application and its graphics primitives are +intended primarily for on-screen display and editing; gschem supports PostScript +output as an afterthought. uschem on the other hand is designed with the +philosophy that PostScript is the canonical and authoritative representation of +a graphical schematic sheet; whatever form is used to represent graphical +elements in the source code, the assumption is that they are all ultimately +destined to become PostScript. + +Graphical elements emitted into the PostScript output by uschem-print(1) come +from the following sources: + +* GraphBlock structures (objects or decorations) which are containers for purely + graphical elements in schematic sheets; + +* Graphical symbols pulled from the library to represent component instances as + well as for other purposes - see graphsyms.txt; + +* Text emitted by DisplayAttr and DisplayNetName decorations; + +* Lines drawn for GraphNet, NetLine and BusSeg objects. + +GraphBlock structures may be of two forms: GraphBlockG and GraphBlockPS. The +former contain gschem code, the latter contain PostScript code. PostScript is +the native form; gschem code is printed by turning it into PostScript, hence +GraphBlockPS can do everything that GraphBlockG can plus much more. GraphBlockG +should be considered a backward compatibility feature. A similar situation +exists with graphical symbols as described more fully in graphsyms.txt. + +See psfeatures.txt for the information you need to know in order to write +PostScript code for inclusion into GraphBlockPS structures or symbols. + +Coordinate system + +As already noted earlier, all graphical coordinates are given in gschem units. +Analogously to both gschem and PostScript default the origin of the coordinate +system is in the lower left corner; x coordinates increase to the right and y +coordinates increase upward. There is, however, one subtle difference between +gschem and uschem coordinate systems. In gschem schematic sheets the absolute +coordinates are essentially arbitrary and one needs to use a special titleblock +"component" to set the overall dimensions of the drawing sheet; the coordinates +that really matter then need to be calculated relative to the arbitrary ones of +that titleblock component. uschem has done away with such silliness and every +graphical schematic sheet in the uschem language begins with an explicit size +declaration. + +The sheet size declaration given at the beginning of a uschem sheet sets the +effective limits for the coordinate system, but it does not cause any border or +title block to be drawn. If such features are desired (they normally are), they +need to be embodied in a GraphBlock object. + +One gschem misfeature that has unfortunately been retained in uschem is the +fictitious nature of the drawing sizes. Using gschem and following the size +conventions set for its standard symbol library, one has to declare the drawing +as having size D (use title-D.sym) in order to make it reasonable for printing +in size B; this situation unfortunately remains in uschem. The sheet size +declaration merely establishes the size of the in-sheet coordinate system in the +fake gschem units, whereas the actual print size is given on the command line to +uschem-print(1). uschem's PostScript prolog code calculates and effects the +necessary scaling.