#ident "@(#)BRACKETS_NOTE 1.4 05/06/08 SMI" /* SVr4.0 1.1 */ # # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License, Version 1.0 only # (the "License"). You may not use this file except in compliance # with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # lc, rc, lf, and rf contain PostScript code that can be used to build the top and bottom bracket pieces used by eqn. The files are only used if the character code field in the S font file for lc, rc, lf, and rf is set to 1. A code larger than 32 means a character from Adobe's Symbol font will be used. Think the real solution is to change eqn so large brackets and braces are built differently. There were some serious collisions with eqn's bracket building algorithm and Adobe's Symbol font. eqn extends all the pieces with the \(bv character, while the bracket and brace pieces available in Adobe's Symbol are all quite different and are designed to work with their own extenders. The reference points are different, but worse still the thickness of brackets and braces don't match. Anyway using a single extender (the way eqn does) can't ever work with the bracket and brace characters available in Adobe's Symbol font. The lc, rc, lf, and rf files are a very complicated attempt to get around the problem. Each builds the troff character by using the \(bv character from the Symbol font and then draws a small horizontal line at either the top or bottom of the \(bv. Using \(bv for the vertical part guarantees things will stack properly, but getting to the precise top or bottom of the \(bv (down to the pixel level on all devices and in all sizes) proved to be very difficult. In fact you would think that determining the bounding box of \(bv would be enough to let you draw a good bracket piece that matched up nicely with the extender. Not quite, at least I didn't find that it was possible to do a good job drawing the pieces from the \(bv bounding box. Think roundoff errors introduced by the CTM caused the trouble, although I expect there's more to it. Clipping a rectangular region 2 pixels smaller in height than the bounding box of the \(bv character, and using the corners of that box to locate the top and bottom of the bv for the horizontal extender solved the problems I originally had with the precise placement of the horizontal rule. Anyway that's what the clipping and idtransform are for. The initgraphics stuff is an attempt to fit a tight bounding box around the \(bv character independent of the rotation of our coordinate system. pathbbox only returns what we want if the coordinate system has been rotated by a multiple of 90 degrees.