comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:cd92449fdb51
1 uschem language for schematic sheets
2
3 uschem is the component of uEDA that deals with the graphical or non-graphical
4 schematic sheets as opposed to the MCL. These schematic sheets are ASCII text
5 files (conventional suffix is .usch, although it isn't hard-coded into any uEDA
6 tools) in a special language defined in this document.
7
8 At the high level each schematic sheet may be either graphical or non-graphical
9 and consists of a set of objects that embody electrical and/or graphical
10 information. Component objects (component instances) provide a link between the
11 schematic sheet and the MCL, Net and GraphNet objects declare electrical
12 interconnections (see netlisting.txt), GraphBlock objects serve as containers
13 for purely graphical elements, and a few other object types will be explained in
14 detail later. Most object types accept decorations, which are the uschem
15 syntactic term for information elements that are not objects in themselves, but
16 are attached to a particular object.
17
18 At the low level the uschem syntax is based on the same principle as C and many
19 other languages used in the UNIX world: the source file is treated as consisting
20 of tokens which are either self-delimiting or delimited by white space; with a
21 few exceptions all white space (spaces, tabs and newlines) is treated the same,
22 i.e., line boundaries have no special significance to the parser. The tokens
23 which make up the language consist of:
24
25 * ASCII characters (),;={} are self-delimiting tokens.
26
27 * A quoted string (enclosed in double quotes '"') is a quoted-string token.
28 To include a '"' character in a quoted string, escape it as '\"'; to include
29 a backslash '\', escape it as '\\'.
30
31 * The following tokens are delimited by white space, by any of the self-
32 delimiting tokens listed above, or by '%' comments (see below):
33
34 + Keywords
35 + Numbers (decimal integers)
36 + Any other strings (unquoted-string tokens)
37
38 Wherever the syntax calls for a string giving some user data, either a quoted or
39 an unquoted string may be given; quoted strings are required only if they
40 contain special characters. Keywords and numbers must not be quoted.
41
42 Comments
43
44 The uschem language supports two kinds of comments. The first kind are
45 PostScript-style comments. These comments are introduced by a '%' character and
46 continue to the end of the line (one of the few places in the uschem language
47 where newlines differ from other white space). This comment style is very
48 convenient, but they suffer from one serious problem: if a schematic sheet is
49 processed by a program that parses the original, does some transformations to
50 it, and writes out a new .usch file (uschem-rewrite(1) or the future graphical
51 schematic editor), PostScript-style comments will be lost because they are not
52 structured and thus cannot survive the parsing process.
53
54 The other kind of comments are structured comments. These take the form of
55 Comment objects or Comment decorations on other objects; the body of the comment
56 takes the form of a string token (usually quoted). Because they take their
57 proper place in the uschem language of objects and decorations, such structured
58 comments can survive processing by tools that manipulate schematic sheets at
59 that level.
60
61 Graphics model
62
63 The graphical aspects of uschem schematics have been borrowed heavily from
64 gschem, the schematic capture tool from the gEDA project - the latter is the
65 closest thing to a mainstream EDA package that has ever been used by the author
66 of uEDA. All geometric dimensions for graphical elements on schematic sheets as
67 well as the dimensions of the sheets themselves are given in gschem units, and
68 most of the commonly used graphics primitives have also been copied from gschem.
69 Users wanting to make use of the graphical features of uschem need to be
70 familiar with gschem as these gschem-derived graphical features won't be
71 described here in detail.
72
73 There is, however, one major difference between the graphics models of gschem
74 and uschem. gschem is a GUI application and its graphics primitives are
75 intended primarily for on-screen display and editing; gschem supports PostScript
76 output as an afterthought. uschem on the other hand is designed with the
77 philosophy that PostScript is the canonical and authoritative representation of
78 a graphical schematic sheet; whatever form is used to represent graphical
79 elements in the source code, the assumption is that they are all ultimately
80 destined to become PostScript.
81
82 Graphical elements emitted into the PostScript output by uschem-print(1) come
83 from the following sources:
84
85 * GraphBlock structures (objects or decorations) which are containers for purely
86 graphical elements in schematic sheets;
87
88 * Graphical symbols pulled from the library to represent component instances as
89 well as for other purposes - see graphsyms.txt;
90
91 * Text emitted by DisplayAttr and DisplayNetName decorations;
92
93 * Lines drawn for GraphNet, NetLine and BusSeg objects.
94
95 GraphBlock structures may be of two forms: GraphBlockG and GraphBlockPS. The
96 former contain gschem code, the latter contain PostScript code. PostScript is
97 the native form; gschem code is printed by turning it into PostScript, hence
98 GraphBlockPS can do everything that GraphBlockG can plus much more. GraphBlockG
99 should be considered a backward compatibility feature. A similar situation
100 exists with graphical symbols as described more fully in graphsyms.txt.
101
102 See psfeatures.txt for the information you need to know in order to write
103 PostScript code for inclusion into GraphBlockPS structures or symbols.
104
105 Coordinate system
106
107 As already noted earlier, all graphical coordinates are given in gschem units.
108 Analogously to both gschem and PostScript default the origin of the coordinate
109 system is in the lower left corner; x coordinates increase to the right and y
110 coordinates increase upward. There is, however, one subtle difference between
111 gschem and uschem coordinate systems. In gschem schematic sheets the absolute
112 coordinates are essentially arbitrary and one needs to use a special titleblock
113 "component" to set the overall dimensions of the drawing sheet; the coordinates
114 that really matter then need to be calculated relative to the arbitrary ones of
115 that titleblock component. uschem has done away with such silliness and every
116 graphical schematic sheet in the uschem language begins with an explicit size
117 declaration.
118
119 The sheet size declaration given at the beginning of a uschem sheet sets the
120 effective limits for the coordinate system, but it does not cause any border or
121 title block to be drawn. If such features are desired (they normally are), they
122 need to be embodied in a GraphBlock object.
123
124 One gschem misfeature that has unfortunately been retained in uschem is the
125 fictitious nature of the drawing sizes. Using gschem and following the size
126 conventions set for its standard symbol library, one has to declare the drawing
127 as having size D (use title-D.sym) in order to make it reasonable for printing
128 in size B; this situation unfortunately remains in uschem. The sheet size
129 declaration merely establishes the size of the in-sheet coordinate system in the
130 fake gschem units, whereas the actual print size is given on the command line to
131 uschem-print(1). uschem's PostScript prolog code calculates and effects the
132 necessary scaling.