Changeset View
Changeset View
Standalone View
Standalone View
externals/figlet/figfont.txt
- This file was added.
- This file uses an unknown character encoding.
| _____ ___ ____ __ _ | |||||
| | ___||_ _|/ ___| / _| ___ _ __ | |_ ___ _ | |||||
| | |_ | || | _ | |_ / _ \ | '_ \ | __|/ __|(_) | |||||
| | _| | || |_| || _|| (_) || | | || |_ \__ \ _ | |||||
| |_| |___|\____||_| \___/ |_| |_| \__||___/(_) | |||||
| The FIGfont Version 2 FIGfont and FIGdriver Standard | |||||
| === ======= ======= = ======= === ========= ======== | |||||
| Draft 2.0 Copyright 1996, 1997 | |||||
| by John Cowan and Paul Burton | |||||
| Portions Copyright 1991, 1993, 1994 | |||||
| by Glenn Chappell and Ian Chai | |||||
| May be freely copied and distributed. | |||||
| Figlet lives at: http://www.figlet.org/ | |||||
| _____ __ __ | |||||
| / ___/__ ___ / /____ ___ / /____ | |||||
| / /__/ _ \/ _ \/ __/ -_) _ \/ __(_-< | |||||
| \___/\___/_//_/\__/\__/_//_/\__/___/ | |||||
| INTRODUCTION | |||||
| BASIC DEFINITIONS AND CONCEPTS | |||||
| "FIGfont" | |||||
| "FIGcharacters" and "Sub-characters" | |||||
| "FIGdriver" | |||||
| "FIGure" | |||||
| "FIG" | |||||
| "Layout Modes" | |||||
| "Smushing Rules" | |||||
| "Hardblanks" | |||||
| CREATING FIGFONTS | |||||
| The Header Line | |||||
| Interpretation of Layout Parameters | |||||
| Setting Layout Parameters Step-by-Step | |||||
| FIGfont Comments | |||||
| FIGcharacter Data | |||||
| - Basic Data Structure | |||||
| - Character Codes | |||||
| - Required FIGcharacters | |||||
| - Code Tagged FIGcharacters | |||||
| NOTES - AVOIDING ERRORS AND GENERAL ADVICE | |||||
| CONTROL FILES | |||||
| Standard Format | |||||
| Extended Commands | |||||
| STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS | |||||
| CHART OF CAPABILITIES OF FIGLET 2.2.2 AND FIGWIN 1.0 | |||||
| INTRODUCTION | |||||
| ============ | |||||
| This document specifies the format of font files, and the associated control | |||||
| files, used by the FIGlet and FIGWin programs (FIGdrivers). It is written | |||||
| for designers who wish to build fonts (FIGfonts) usable by either program, | |||||
| and also serves as a standard for development of future versions or similar | |||||
| FIGdrivers. Some features explained here are not supported by both programs. | |||||
| See separate documentation to learn how to use FIGlet or FIGWin. | |||||
| NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows | |||||
| 1.0, which is just that. It does not require a complete understanding of | |||||
| this document to create FIGfonts. However it is a good idea to become | |||||
| familiar with the "BASIC DEFINITIONS AND CONCEPTS" information before using | |||||
| it. | |||||
| If you design a FIGfont, please send an e-mail announcement to | |||||
| <figletfonts@figlet.org>, the FIGlet fonts mailing list, and email a copy | |||||
| to info@figlet.org for us to put it on the ftp site (ftp://ftp.figlet.org/) | |||||
| BASIC DEFINITIONS AND CONCEPTS | |||||
| ===== =========== === ======== | |||||
| "FIGfont" | |||||
| A FIGfont is a file which represents the graphical arrangement of characters | |||||
| representing larger characters. Since a FIGfont file is a text file, it can | |||||
| be created with any text editing program on any platform. The filename of a | |||||
| FIGfont file must end with ".flf", which stands for "<F>IG<L>ettering | |||||
| <F>ont". | |||||
| "FIGcharacters" and "Sub-characters" | |||||
| Because FIGfonts describe large characters which consist of smaller | |||||
| characters, confusion can result when descussing one or the other. | |||||
| Therefore, the terms "FIGcharacter" and "sub-character" are used, | |||||
| respectively. | |||||
| "FIGdriver" | |||||
| The term FIGdriver is used in this document to encompass FIGlet, FIGWin, and | |||||
| any future programs which use FIGfonts. | |||||
| "FIGure" | |||||
| A FIGure (thusly capitalized) is an image created by a FIGdriver. | |||||
| "FIG" | |||||
| A bit of history: | |||||
| In Spring 1991, inspired by the Email signature of a friend named Frank, and | |||||
| goaded on by Ian Chai, Glenn Chappell wrote a nifty little 170-line "C" | |||||
| program called "newban", which would create large letters out of ordinary | |||||
| text characters. At the time, it was only compiled for UNIX. In hindsight, | |||||
| we now call it "FIGlet 1.0". FIGlet stands for <F>rank, <I>an, and <G>lenn's | |||||
| <let>ters. In various incarnations, newban circulated around the net for a | |||||
| couple of years. It had one font, which included only lowercase letters. | |||||
| In early 1993, Ian decided newban was due for a few changes, so together Ian | |||||
| and Glenn added the full ASCII character set, to start with. First, though, | |||||
| Ian had to find a copy of the source, since Glenn had tossed it away as not | |||||
| worth the disk space. Ian and Glenn discussed what could be done with it, | |||||
| decided on a general re-write, and, 7 months later, ended up with 888 lines | |||||
| of code, 13 FIGfonts and documentation. This was FIGlet 2.0, the first real | |||||
| release. | |||||
| To their great surprise, FIGlet took the net by storm. They received floods | |||||
| of "FIGlet is great!" messages and a new contributed FIGfont about once a | |||||
| week. To handle all the traffic, Ian quickly set up a mailing list, Daniel | |||||
| Simmons kindly offered space for an FTP site, several people volunteered to | |||||
| port FIGlet to non-Unix operating systems, ...and bug reports poured in. | |||||
| Because of these, and the need to make FIGlet more "international", Ian and | |||||
| Glenn released a new version of FIGlet which could handle non-ASCII character | |||||
| sets and right-to-left printing. This was FIGlet 2.1, which, in a couple of | |||||
| weeks, became figlet 2.1.1. This weighed in at 1314 lines, and there were | |||||
| over 60 FIGfonts. | |||||
| By late 1996, FIGlet had quite a following of fans subscribing to its mailing | |||||
| list. It had been ported to MS-DOS, Macintosh, Amiga, Apple II GS, Atari ST, | |||||
| Acorn and OS/2. FIGlet had been further updated, and there were nearly 200 | |||||
| FIGfonts. | |||||
| John Cowan and Paul Burton are two FIGlet fans who decided to create new | |||||
| versions. While John wrote FIGlet version 2.2 using C, Paul wrote FIGWin | |||||
| 1.0, the first true GUI (Windows) implementation of FIGlet, using Visual | |||||
| Basic. John and Paul worked together to add new features to FIGfont files | |||||
| which could be read by both programs, and together wrote this document, which | |||||
| we hope helps to establish consistency in FIGfonts and help with the creation | |||||
| of future FIGdrivers. FIGlet 2.2 has about 4800 lines of code, of which | |||||
| over half is a support library for reading compressed files. | |||||
| Three years later, in July 2005, FIGlet 2.2.2 was released under a new License | |||||
| (the ``Academic Free License 2.1''). This version has proved to be very | |||||
| stable, and persisted for more five years until minor bugfixes and another | |||||
| license change resulted in the release of FIGlet 2.2.3 in January 2011. All | |||||
| license concerns involving contributed code were solved and FIGlet is now | |||||
| distributed under the ``New BSD License''. Contributed fonts amounted to more | |||||
| than 400. | |||||
| FIGlet 2.2 and FIGWin 1.0 both allow greater flexibility by use of new | |||||
| information which can be contained in FIGfont files without interfering with | |||||
| the function of older FIGdrivers. | |||||
| NOTE: The Macintosh version of FIGlet is still command-line driven as of this | |||||
| writing, and a GUI version is very much in demand. The FIGlet C code is | |||||
| written to be easily plugged in to a GUI shell, so it will be a relatively | |||||
| easy task for a Macintosh developer. | |||||
| "Layout Modes" | |||||
| A FIGdriver may arrange FIGcharacters using one of three "layout modes", | |||||
| which define the spacing between FIGcharacters. The layout mode for the | |||||
| horizontal axis may differ from the layout mode for the vertical axis. A | |||||
| default choice is defined for each axis by every FIGfont. | |||||
| The three layout modes are: | |||||
| Full Size (Separately called "Full Width" or "Full Height".) | |||||
| Represents each FIGcharacter occupying the full width or | |||||
| height of its arrangement of sub-characters as designed. | |||||
| Fitting Only (Separately called "Kerning or "Vertical Fitting".) | |||||
| Moves FIGcharacters closer together until they touch. | |||||
| Typographers use the term "kerning" for this phenomenon | |||||
| when applied to the horizontal axis, but fitting also | |||||
| includes this as a vertical behavior, for which there is | |||||
| apparently no established typographical term. | |||||
| Smushing (Same term for both axes.) | |||||
| Moves FIGcharacters one step closer after they touch, so that | |||||
| they partially occupy the same space. A FIGdriver must decide | |||||
| what sub-character to display at each junction. There are two | |||||
| ways of making these decisions: by controlled smushing or by | |||||
| universal smushing. | |||||
| Controlled smushing uses a set of "smushing rules" selected by | |||||
| the designer of a FIGfont. (See "Smushing Rules" below.) | |||||
| Each rule is a comparison of the two sub-characters which must | |||||
| be joined to yield what to display at the junction. | |||||
| Controlled smushing will not always allow smushing to occur, | |||||
| because the compared sub-characters may not correspond to any | |||||
| active rule. Wherever smushing cannot occur, fitting occurs | |||||
| instead. | |||||
| Universal smushing simply overrides the sub-character from the | |||||
| earlier FIGcharacter with the sub-character from the later | |||||
| FIGcharacter. This produces an "overlapping" effect with some | |||||
| FIGfonts, wherin the latter FIGcharacter may appear to be "in | |||||
| front". | |||||
| A FIGfont which does not specify any smushing rules for a | |||||
| particular axis indicates that universal smushing is to occur | |||||
| when smushing is requested. Therefore, it is not possible for | |||||
| a FIGfont designer to "forbid" smushing. However there are | |||||
| ways to ensure that smushing does not cause a FIGfont to be | |||||
| illegible when smushed. This is especially important for | |||||
| smaller FIGfonts. (See "Hardblanks" for details.) | |||||
| For vertical fitting or smushing, entire lines of output FIGcharacters are | |||||
| "moved" as a unit. | |||||
| Not all FIGdrivers do vertical fitting or smushing. At present, FIGWin 1.0 | |||||
| does, but FIGlet 2.2 does not. Further, while FIGlet 2.2 allows the user to | |||||
| override the FIGfont designer's set of smushing rules, FIGWin 1.0 does not. | |||||
| NOTE: In the documentation of FIGlet versions prior to 2.2, the term | |||||
| "smushmode" was used to mean the layout mode, and this term further included | |||||
| the smushing rules (if any) to be applied. However, since the layout mode | |||||
| may or may not involve smushing, we are straying from the use of this | |||||
| somewhat misleading term. | |||||
| "Smushing Rules" | |||||
| Again, smushing rules are for controlled smushing. If none are defined to be | |||||
| active in a FIGfont, universal smushing occurs instead. | |||||
| Generally, if a FIGfont is "drawn at the borders" using sub-characters | |||||
| "-_|/\[]{}()<>", you will want to use controlled smushing by selecting from | |||||
| the rules below. Otherwise, if your FIGfont uses a lot of other | |||||
| sub-characters, do not select any rules and universal smushing will occur | |||||
| instead. (See "Hardblanks" below if your FIGfont is very small and would | |||||
| become illegible if smushed.) Experimentation is the best way to make these | |||||
| decisions. | |||||
| There are six possible horizontal smushing rules and five possible vertical | |||||
| smushing rules. Below is a description of all of the rules. | |||||
| NOTE: Ignore the "code values" for now. They are explained later. | |||||
| The Six Horizontal Smushing Rules | |||||
| Rule 1: EQUAL CHARACTER SMUSHING (code value 1) | |||||
| Two sub-characters are smushed into a single sub-character | |||||
| if they are the same. This rule does not smush | |||||
| hardblanks. (See "Hardblanks" below.) | |||||
| Rule 2: UNDERSCORE SMUSHING (code value 2) | |||||
| An underscore ("_") will be replaced by any of: "|", "/", | |||||
| "\", "[", "]", "{", "}", "(", ")", "<" or ">". | |||||
| Rule 3: HIERARCHY SMUSHING (code value 4) | |||||
| A hierarchy of six classes is used: "|", "/\", "[]", "{}", | |||||
| "()", and "<>". When two smushing sub-characters are | |||||
| from different classes, the one from the latter class | |||||
| will be used. | |||||
| Rule 4: OPPOSITE PAIR SMUSHING (code value 8) | |||||
| Smushes opposing brackets ("[]" or "]["), braces ("{}" or | |||||
| "}{") and parentheses ("()" or ")(") together, replacing | |||||
| any such pair with a vertical bar ("|"). | |||||
| Rule 5: BIG X SMUSHING (code value 16) | |||||
| Smushes "/\" into "|", "\/" into "Y", and "><" into "X". | |||||
| Note that "<>" is not smushed in any way by this rule. | |||||
| The name "BIG X" is historical; originally all three pairs | |||||
| were smushed into "X". | |||||
| Rule 6: HARDBLANK SMUSHING (code value 32) | |||||
| Smushes two hardblanks together, replacing them with a | |||||
| single hardblank. (See "Hardblanks" below.) | |||||
| The Five Vertical Smushing Rules | |||||
| Rule 1: EQUAL CHARACTER SMUSHING (code value 256) | |||||
| Same as horizontal smushing rule 1. | |||||
| Rule 2: UNDERSCORE SMUSHING (code value 512) | |||||
| Same as horizontal smushing rule 2. | |||||
| Rule 3: HIERARCHY SMUSHING (code value 1024) | |||||
| Same as horizontal smushing rule 3. | |||||
| Rule 4: HORIZONTAL LINE SMUSHING (code value 2048) | |||||
| Smushes stacked pairs of "-" and "_", replacing them with | |||||
| a single "=" sub-character. It does not matter which is | |||||
| found above the other. Note that vertical smushing rule 1 | |||||
| will smush IDENTICAL pairs of horizontal lines, while this | |||||
| rule smushes horizontal lines consisting of DIFFERENT | |||||
| sub-characters. | |||||
| Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096) | |||||
| This one rule is different from all others, in that it | |||||
| "supersmushes" vertical lines consisting of several | |||||
| vertical bars ("|"). This creates the illusion that | |||||
| FIGcharacters have slid vertically against each other. | |||||
| Supersmushing continues until any sub-characters other | |||||
| than "|" would have to be smushed. Supersmushing can | |||||
| produce impressive results, but it is seldom possible, | |||||
| since other sub-characters would usually have to be | |||||
| considered for smushing as soon as any such stacked | |||||
| vertical lines are encountered. | |||||
| "Hardblanks" | |||||
| A hardblank is a special sub-character which is displayed as a blank (space) | |||||
| in rendered FIGures, but is treated more like a "visible" sub-character when | |||||
| fitting or smushing horizontally. Therefore, hardblanks keep adjacent | |||||
| FIGcharacters a certain distance apart. | |||||
| NOTE: Hardblanks act the same as blanks for vertical operations. | |||||
| Hardblanks have three purposes: | |||||
| 1) Hardblanks are used to create the blank (space) FIGcharacter. | |||||
| Usually the space FIGcharacter is simply one or two vertical | |||||
| columns of hardblanks. Some slanted FIGfonts as shown below | |||||
| have a diagonal arrangement of hardblanks instead. | |||||
| 2) Hardblanks can prevent "unreasonable" fitting or smushing. | |||||
| Normally when fitting or smushing, the blank (space) | |||||
| sub-character is considered "vacant space". In the following | |||||
| example, a capital "C" FIGcharacter is smushed with a "minus" | |||||
| FIGcharacter. | |||||
| ______ ______ | |||||
| / ____/ / ____/ | |||||
| / / ____ >>-Becomes-> / / ____ | |||||
| / /___ /___/ / /__/___/ | |||||
| \____/ \____/ | |||||
| The FIGure above looks like a capital G. To prevent this, a | |||||
| FIGfont designer might place a hardblank in the center of the | |||||
| capital C. In the following example, the hardblank is | |||||
| represented as a "$": | |||||
| ______ ______ | |||||
| / ____/ / ____/ | |||||
| / / $ ____ >>-Becomes-> / / ____ | |||||
| / /___ /___/ / /___/___/ | |||||
| \____/ \____/ | |||||
| Using hardblanks in this manner ensures that FIGcharacters | |||||
| with a lot of empty space will not be unreasonably "invaded" | |||||
| by adjacent FIGcharacters. Generally, FIGcharacters such as | |||||
| capital C, L or T, or small punctuation marks such as commas, | |||||
| may contain hardblanks, since they may contain a lot of vacant | |||||
| space which is "accessible" from either side. | |||||
| 3) Hardblanks can prevent smushing from making FIGfonts illegible. | |||||
| This legitimate purpose of hardblanks is often overused. If a | |||||
| FIGfont designer is absolutely sure that smushing "visible" | |||||
| sub-characters would make their FIGfont illegible, hardblanks | |||||
| may be positioned at the end of each row of sub-characters, | |||||
| against the visible sub-characters, creating a barrier. | |||||
| With older FIGdrivers, using hardblanks for this purpose meant | |||||
| that FIGcharacters would have to be separated by at least one | |||||
| blank in output FIGures, since only a hardblank could smush | |||||
| with another hardblank. However with the advent of universal | |||||
| smushing, this is no longer necessary. Hardblanks ARE | |||||
| overriden by any visible sub-character when performing | |||||
| universal smushing. Hardblanks still represent a "stopping | |||||
| point", but only AFTER their locations are occupied. | |||||
| NOTE: Earlier it was stated that universal smushing overrides | |||||
| the sub-character from the former FIGcharacter with the | |||||
| sub-character from the latter FIGcharacter. Hardblanks (and | |||||
| blanks or spaces) are the exception to this rule; they will | |||||
| always be overriden by visible sub-characters, regardless of | |||||
| which FIGcharacter contains the hardblank. This ensures that | |||||
| no visible sub-characters "disappear". | |||||
| Therefore, one can design a FIGfont with a default behavior of | |||||
| universal smushing, while the output FIGure would LOOK like | |||||
| the effect of fitting, or even full size if additional | |||||
| hardblanks are used. If a user "scales down" the layout mode | |||||
| to fitting, the result would look like "extra spacing" between | |||||
| FIGcharacters. | |||||
| Taking this concept further, a FIGcharacter may also include | |||||
| extra blanks (spaces) on the left side of each FIGcharacter, | |||||
| which would define the FIGcharacter's width as slightly larger | |||||
| than required for the visible sub-characters and hardblanks. | |||||
| With such a FIGfont, a user who further "scales down" the | |||||
| layout mode to full size would see even greater spacing. | |||||
| These techniques prevent horizontal smushing from causing a | |||||
| FIGfont to become illegible, while offering greater | |||||
| flexibility of output to users. | |||||
| NOTE: These techniques cannot be used to prevent vertical | |||||
| smushing of visible sub-characters, since hardblanks are not | |||||
| respected in the vertical axis. Although it is possible to | |||||
| select only one vertical smushing rule which involves only | |||||
| sub-characters which are not used in your FIGfont, it is | |||||
| recommend that you do NOT do so. In our opinion, most users | |||||
| would prefer to get what they ask for, rather than being | |||||
| told, in effect: "I, the FIGfont designer, have decided that | |||||
| you wouldn't like the results of vertical smushing, so I have | |||||
| prevented you from trying it." Instead, we recommend setting | |||||
| the default behavior to either fitting or full height, and | |||||
| either allowing universal smushing, or selecting vertical | |||||
| smushing rules which seem most appropriate. A user of your | |||||
| FIGfont will quickly see why you did not choose smushing as | |||||
| the default vertical layout mode, and will agree with you. | |||||
| "Character Sets" and "Character Codes" | |||||
| When you type using your keyboard, you are actually sending your computer a | |||||
| series of numbers. Each number must be interpreted by your computer so that | |||||
| it knows what character to display. The computer uses a list of definitions, | |||||
| called a "character set". The numbers which represent each character are | |||||
| called "character codes". | |||||
| There are many character sets, most of which are internationally accepted as | |||||
| standards. By far, the most common character set is ASCII, which stands for | |||||
| "American Standard Code for Information Interchange". ASCII identifies its | |||||
| characters with codes ranging from 0 to 127. | |||||
| NOTE: The term "ASCII art" has become well-understood to mean artistic images | |||||
| which consist of characters on your screen (such as FIGures). | |||||
| For a list of the printable ASCII characters with the corresponding codes, | |||||
| see the section "REQUIRED CHARACTERS" below. The other ASCII codes in the | |||||
| range of 0 through 31 are "control characters" such as carriage-return | |||||
| (code 13), linefeed/newline (code 10), tab (code 9), backspace (code 8) or | |||||
| null (code 0). Code 127 is a delete in ASCII. | |||||
| Getting more technical for just a moment: A byte consisting of 8 bits (eight | |||||
| 1's or 0's) may represent a number from 0 to 255. Therefore, most computers | |||||
| have DIRECT access to 256 characters at any given time. A character set | |||||
| which includes 256 characters is called an 8-bit character set. | |||||
| For Latin-based languages, ASCII is almost always the first half of a larger | |||||
| 8-bit character set. Latin-1 is the most common example of an 8-bit | |||||
| character set. Latin-1 includes all of ASCII, and adds characters with codes | |||||
| from 128 to 255 which include umlauted ("double-dotted") letters and | |||||
| characters with various other accents. In the United States, Windows and | |||||
| most Unix systems have Latin-1 directly available. | |||||
| Most modern systems allow the possibility of changing 8-bit character sets. | |||||
| On Windows systems, character sets are referred to as "code pages". There | |||||
| are many other character sets which are not mentioned here. DOS has its own | |||||
| character set (which also has international variants) that includes graphics | |||||
| characters for drawing lines. It is also an extension of ASCII. | |||||
| For some languages, 8-bit character sets are insufficient, particularly on | |||||
| East Asian systems. Therefore, some systems allow 2 bytes for each | |||||
| character, which multiplies the 256 possibilties by 256, resulting in 65536 | |||||
| possible characters. (Much more than the world will ever need.) | |||||
| Unicode is a character set standard which is intended to fulfill the | |||||
| worldwide need for a single character set which includes all characters used | |||||
| worldwide. Unicode includes character codes from 0 to 65535, although at | |||||
| present, only about 22,000 characters have been officially assigned and named | |||||
| by the Unicode Consortium. The alphabets and other writing systems | |||||
| representable with Unicode include all Latin-alphabet systems, Greek, | |||||
| Russian and other Cyrillic-alphabet systems, Hebrew, Arabic, the various | |||||
| languages of India, Chinese, Japanese, Korean, and others. The existing | |||||
| Unicode symbols include chess pieces, astrological signs, gaming symbols, | |||||
| telephones, pointing fingers, etc. --- just about any type of FIGcharacter | |||||
| you may wish to create. Unicode is constantly (but slowly) being extended | |||||
| to handle new writing systems and symbols. Information on Unicode is | |||||
| available at http://www.unicode.org and at ftp://unicode.org . | |||||
| Unicode, Latin-1, and ASCII all specify the same meanings for overlapping | |||||
| character codes: ASCII 65 = Latin-1 65 = Unicode 65 = "A", formally known | |||||
| as "LATIN CAPITAL LETTER A". | |||||
| Since a keyboard usually has only about 100 keys, your computer may contain | |||||
| a program called a "keyboard map", which will interpret certain keystrokes | |||||
| or combinations of keystrokes as different character codes. Keyboard maps | |||||
| use "mapping tables" to make these determinations. The appropriate keyboard | |||||
| activity for a given character code may involve several keystrokes. Almost | |||||
| all systems are capable of handling at least 8-bit character sets (containing | |||||
| 256 characters), so there is always an active keyboard map, at least for | |||||
| those characters which are not actually painted on the keys. (United States | |||||
| users may not even know that their computer can interpret special keystrokes. | |||||
| Such keystrokes may be something similar to holding down the ALT key while | |||||
| typing a character code on the numeric keypad. Try it!) | |||||
| Below are characters 160 through 255, AS REPRESENTED ON YOUR SYSTEM. | |||||
| !¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ | |||||
| ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ | |||||
| IMPORTANT NOTE: Depending on which character set is active on your system, | |||||
| you may see different characters. This document (like all computer | |||||
| documents) does not contains characters per se, only bytes. What you see | |||||
| above is your particular computer's representation of these byte values. | |||||
| In other words, your active character set. However, if it is Latin-1, the | |||||
| first visible character is an inverted "!", and the last is an umlauted "y". | |||||
| Although we can safely assume your computer has ASCII, it does not | |||||
| necessarily have the Latin-1 character set active. | |||||
| What does all this have to do with FIGfonts??? | |||||
| First, it should be evident that it is best to use only ASCII characters for | |||||
| sub-characters when possible. This will ensure portability to different | |||||
| platforms. | |||||
| FIGlet has gained international popularity, but early versions were made to | |||||
| handle only FIGcharacters with assigned character codes corresponding to | |||||
| ASCII. So, over the years there have been four methods used to create | |||||
| "virtual mapping tables" within the program itself: | |||||
| The first method was simply to create FIGcharacters which do not | |||||
| look like the ASCII character set implies. For example, a | |||||
| FIGfont might contain Greek letters, and within its comments, it | |||||
| may say, "If you type A, you'll get a Greek Alpha" etc. With | |||||
| the advent of newer features, it is preferable not to use this | |||||
| method. Instead, when possible, add new FIGcharacters to | |||||
| existing FIGfonts or create new FIGfonts with FIGcharacters coded | |||||
| to match the expectations of ASCII/Latin-1/Unicode, and create an | |||||
| appropriate control file. (See "CONTROL FILES" below.) Remember | |||||
| that Unicode includes almost any character for which you may want | |||||
| to create a FIGcharacter. | |||||
| The second method was very specific, to accommodate the German | |||||
| audience. A special option was added to the FIGlet program | |||||
| which would re-route input characters "[", "\", and "]" to | |||||
| umlauted A, O and U, while "{", "|", and "}" would become the | |||||
| respective lowercase versions of these. Also, "~" was made to | |||||
| become the s-z character when this special option was used. This | |||||
| was called "the -D option." The addition of this feature meant | |||||
| that all compatible FIGfonts must contain these Deutsch (German) | |||||
| FIGcharacters, in addition to the ASCII FIGcharacters. Although | |||||
| this option is still available in the most recent version, it is | |||||
| no longer necessary, as the same result can be achieved by the | |||||
| newer features described below. However, the requirement for | |||||
| Deutsch FIGcharacters remains for backward compatibility. (Or at | |||||
| least zero-width FIGcharacters in their place.) | |||||
| Later, FIGlet was made to accept control files, which are quite | |||||
| literally a form of mapping table. (See "CONTROL FILES" below.) | |||||
| This was a significant advance for internationalization. | |||||
| FIGlet 2.2 can now accept specially encoded formats of input | |||||
| text which imply more than one byte per character. | |||||
| CREATING FIGFONTS | |||||
| ======== ======== | |||||
| NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows | |||||
| 1.0, which is just that. There is no need to read further if you intend to | |||||
| use it. However, the section "CONTROL FILES" below is still relevant. | |||||
| Since a FIGfont file is a text file, it can be created with any text editing | |||||
| program on any platform, and will still be compatible with FIGdrivers on all | |||||
| operating systems, except that the bytes used to indicate the end of each | |||||
| text line may vary. (PC's use carriage return and linefeed at the end of | |||||
| each line, Macintosh uses carriage return only, and UNIX uses linefeed only.) | |||||
| This minor difference among operating systems is handled easily by setting | |||||
| your FTP program to ASCII mode during upload or download. So there is no | |||||
| need to be concerned about this as long as you remember to do this during | |||||
| file transfer. | |||||
| The filename of a FIGfont file must end with ".flf", which stands for | |||||
| "<F>IG<L>ettering <F>ont". The first part of the filename should contain | |||||
| only letters, and should be lowercase on operating systems which permit case | |||||
| sensitive filenames. The filename should be unique in the first 8 | |||||
| characters, since some older file systems truncate longer filenames. | |||||
| It is easier to modify an existing FIGfont than it is to create a new one | |||||
| from scratch. The first step is to read and understand this document. | |||||
| You may want to load "standard.flf" or another FIGfont into a text editor as | |||||
| an example while you read. | |||||
| A FIGfont file contains three portions: a header line, comments, and | |||||
| FIGcharacter data. | |||||
| THE HEADER LINE | |||||
| The header line gives information about the FIGfont. Here is an example | |||||
| showing the names of all parameters: | |||||
| flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in | |||||
| | | | | | | | | | | the entire file must be "flf2a". | |||||
| / / | | | | | | | \ | |||||
| Signature / / | | | | | \ Codetag_Count | |||||
| Hardblank / / | | | \ Full_Layout* | |||||
| Height / | | \ Print_Direction | |||||
| Baseline / \ Comment_Lines | |||||
| Max_Length Old_Layout* | |||||
| * The two layout parameters are closely related and fairly complex. | |||||
| (See "INTERPRETATION OF LAYOUT PARAMETERS".) | |||||
| For those desiring a quick explanation, the above line indicates that this | |||||
| FIGfont uses "$" to represent the hardblank in FIGcharacter data, it has | |||||
| FIGcharacters which are 6 lines tall, 5 of which are above the baseline, no | |||||
| line in the FIGfont data is more than 20 columns wide, the default horizontal | |||||
| layout is represented by the number 15, there are 3 comment lines, the | |||||
| default print direction for this FIGfont is left-to-right, a complete | |||||
| description of default and possible horizontal and vertical layouts is | |||||
| represented by the number 143, and there are 229 code-tagged characters. | |||||
| The first seven parameters are required. The last three (Direction, | |||||
| Full_Layout, and Codetag_Count, are not. This allows for backward | |||||
| compatibility with older FIGfonts, but a FIGfont without these parameters would | |||||
| force a FIGdriver to "guess" (by means not described in this document) the | |||||
| information it would expect to find in Full_Layout. For this reason, inclusion | |||||
| of all parameters is strongly recommended. | |||||
| Future versions of this standard may add more parameters after Codetag_Count. | |||||
| A description of each parameter follows: | |||||
| Signature | |||||
| The signature is the first five characters: "flf2a". The first four | |||||
| characters "flf2" identify the file as compatible with FIGlet version 2.0 or | |||||
| later (and FIGWin 1.0). The "a" is currently ignored, but cannot be omitted. | |||||
| Different characters in the "a" location may mean something in future | |||||
| versions of this standard. If so, you can be sure your FIGfonts will still | |||||
| work if this character is "a". | |||||
| Hardblank | |||||
| Immediately following the signature is the hardblank character. The | |||||
| hardblank character in the header line defines which sub-character will be | |||||
| used to represent hardblanks in the FIGcharacter data. | |||||
| By convention, the usual hardblank is a "$", but it can be any character | |||||
| except a blank (space), a carriage-return, a newline (linefeed) or a null | |||||
| character. If you want the entire printable ASCII set available to use, make | |||||
| the hardblank a "delete" character (character code 127). With the exception | |||||
| of delete, it is inadvisable to use non-printable characters as a hardblank. | |||||
| Height | |||||
| The Height parameter specifies the consistent height of every FIGcharacter, | |||||
| measured in sub-characters. Note that ALL FIGcharacters in a given FIGfont | |||||
| have the same height, since this includes any empty space above or below. | |||||
| This is a measurement from the top of the tallest FIGcharacter to the bottom | |||||
| of the lowest hanging FIGcharacter, such as a lowercase g. | |||||
| Baseline | |||||
| The Baseline parameter is the number of lines of sub-characters from the | |||||
| baseline of a FIGcharacter to the top of the tallest FIGcharacter. The | |||||
| baseline of a FIGfont is an imaginary line on top of which capital letters | |||||
| would rest, while the tails of lowercase g, j, p, q, and y may hang below. | |||||
| In other words, Baseline is the height of a FIGcharacter, ignoring any | |||||
| descenders. | |||||
| This parameter does not affect the output of FIGlet 2.2 or FIGWin 1.0, but | |||||
| future versions or other future FIGdrivers may use it. The Baseline | |||||
| parameter should be correctly set to reflect the true baseline as described | |||||
| above. It is an error for Baseline to be less than 1 or greater than the | |||||
| Height parameter. | |||||
| Max_Length | |||||
| The Max_Length parameter is the maximum length of any line describing a | |||||
| FIGcharacter. This is usually the width of the widest FIGcharacter, plus 2 | |||||
| (to accommodate endmarks as described later.) However, you can (and probably | |||||
| should) set Max_Length slightly larger than this as a safety measure in case | |||||
| your FIGfont is edited to include wider FIGcharacters. FIGlet (but not | |||||
| FIGWin 1.0) uses this number to minimize the memory taken up by a FIGfont, | |||||
| which is important in the case of FIGfonts with many FIGcharacters. | |||||
| Old_Layout | |||||
| (See "INTERPRETATION OF LAYOUT PARAMETERS" below.) | |||||
| Comment_Lines | |||||
| Between the first line and the actual FIGcharacters of the FIGfont are the | |||||
| comment lines. The Comment_Lines parameter specifies how many lines there | |||||
| are. Comments are optional, but recommended to properly document the origin | |||||
| of a FIGfont. | |||||
| Print_Direction | |||||
| The Print_Direction parameter tells which direction the font is to be | |||||
| printed by default. A value of 0 means left-to-right, and 1 means | |||||
| right-to-left. If this parameter is absent, 0 (left-to-right) is assumed. | |||||
| Print_Direction may not specify vertical print, although FIGdrivers are | |||||
| capable of vertical print. Versions of FIGlet prior to 2.1 ignore this | |||||
| parameter. | |||||
| Full_Layout | |||||
| (See "INTERPRETATION OF LAYOUT PARAMETERS" just below.) | |||||
| Codetag_Count | |||||
| Indicates the number of code-tagged (non-required) FIGcharacters in this | |||||
| FIGfont. This is always equal to the total number of FIGcharacters in the font | |||||
| minus 102. This parameter is typically ignored by FIGdrivers, but can be | |||||
| used to verify that no characters are missing from the end of the FIGfont. | |||||
| The chkfont program will display the number of codetagged characters | |||||
| in the FIGfont on which it is run, making it easy to insert this parameter | |||||
| after a FIGfont is written. | |||||
| INTERPRETATION OF LAYOUT PARAMETERS | |||||
| Full_Layout describes ALL information about horizontal and vertical layout: | |||||
| the default layout modes and potential smushing rules, even when smushing is | |||||
| not a default layout mode. | |||||
| Old_Layout does not include all of the information desired by the most | |||||
| recent FIGdrivers, which is the inspiration for the creation of the new | |||||
| Full_Layout parameter. Old_Layout is still required for backward | |||||
| compatibility, and FIGdrivers must be able to interpret FIGfonts which do not | |||||
| have the Full_Layout parameter. (See "STANDARDIZED CAPABILITIES OF CURRENT | |||||
| AND FUTURE FIGDRIVERS".) | |||||
| Versions of FIGlet prior to 2.2 do not recognize the Full_Layout parameter. | |||||
| Documentation accompanying FIGlet versions prior to 2.2 refer to Old_Layout | |||||
| as "smushmode", which is somewhat misleading since it can indicate layout | |||||
| modes other than smushing. | |||||
| Old_Layout and Full_Layout must contain some redundant information. | |||||
| Setting the layout parameters is a matter of adding numbers together ("code | |||||
| values"). What follows is a chart of the meanings of all code values. | |||||
| (You may skip down to "SETTING LAYOUT PARAMETERS STEP BY STEP" if you prefer, | |||||
| or if you find this portion confusing.) | |||||
| Full_Layout: (Legal values 0 to 32767) | |||||
| 1 Apply horizontal smushing rule 1 when smushing | |||||
| 2 Apply horizontal smushing rule 2 when smushing | |||||
| 4 Apply horizontal smushing rule 3 when smushing | |||||
| 8 Apply horizontal smushing rule 4 when smushing | |||||
| 16 Apply horizontal smushing rule 5 when smushing | |||||
| 32 Apply horizontal smushing rule 6 when smushing | |||||
| 64 Horizontal fitting (kerning) by default | |||||
| 128 Horizontal smushing by default (Overrides 64) | |||||
| 256 Apply vertical smushing rule 1 when smushing | |||||
| 512 Apply vertical smushing rule 2 when smushing | |||||
| 1024 Apply vertical smushing rule 3 when smushing | |||||
| 2048 Apply vertical smushing rule 4 when smushing | |||||
| 4096 Apply vertical smushing rule 5 when smushing | |||||
| 8192 Vertical fitting by default | |||||
| 16384 Vertical smushing by default (Overrides 8192) | |||||
| When no smushing rules are included in Full_Layout for a given axis, the | |||||
| meaning is that universal smushing shall occur, either by default or when | |||||
| requested. | |||||
| Old_Layout: (Legal values -1 to 63) | |||||
| -1 Full-width layout by default | |||||
| 0 Horizontal fitting (kerning) layout by default* | |||||
| 1 Apply horizontal smushing rule 1 by default | |||||
| 2 Apply horizontal smushing rule 2 by default | |||||
| 4 Apply horizontal smushing rule 3 by default | |||||
| 8 Apply horizontal smushing rule 4 by default | |||||
| 16 Apply horizontal smushing rule 5 by default | |||||
| 32 Apply horizontal smushing rule 6 by default | |||||
| * When Full_Layout indicates UNIVERSAL smushing as a horizontal default | |||||
| (i.e., when none of the code values of horizontal smushing rules are included | |||||
| and code value 128 is included in Full_Layout) Old_Layout must be set to 0 | |||||
| (zero). Older FIGdrivers which cannot read the Full_Layout parameter are | |||||
| also incapable of universal smushing. Therefore they would be directed to | |||||
| the "next best thing", which is horizontal fitting (kerning). | |||||
| NOTE: You should NOT add the -1 value to any positive code value for | |||||
| Old_Layout. This would be a logical contradiction. | |||||
| See "STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS" for the | |||||
| behavior of a FIGdriver when the Full_Layout parameter is absent (presumably | |||||
| in an older FIGfont). | |||||
| The following rules establish consistency between Old_Layout and Full_Layout. | |||||
| If full width is to be the horizontal default: | |||||
| Old_Layout must be -1. | |||||
| Full_Layout must NOT include code values 64 nor 128. | |||||
| If horizontal fitting (kerning) is to be default: | |||||
| Old_Layout must be 0. | |||||
| Full_Layout must include code value 64. | |||||
| Full_Layout must NOT include code value 128. | |||||
| If CONTROLLED smushing is to be the horizontal default: | |||||
| Old_Layout must be a positive number, represented by the added | |||||
| code values of all desired horizontal smushing rules. | |||||
| Full_Layout must include the code values for the SAME set of | |||||
| horizontal smushing rules as included in Old_Layout. | |||||
| Full_Layout must include code value 128. | |||||
| If UNIVERSAL smushing is to be the horizontal default: | |||||
| Old_Layout must be 0. | |||||
| Full_Layout must include code value 128. | |||||
| Full_Layout must NOT include any code value under 64. | |||||
| In general terms, if Old_Layout specifies horizontal smushing rules, | |||||
| Full_Layout must specify the same set of horizontal rules, and both must | |||||
| indicate the same horizontal default layout mode. | |||||
| SETTING LAYOUT PARAMETERS STEP-BY-STEP | |||||
| The following step-by-step process will yield correct and consistent values | |||||
| for the two layout parameters. You may skip this if you find the | |||||
| explanations above easier to use. | |||||
| Step 1: Start with 0 for both numbers. | |||||
| Write "Old_Layout" and "Full_Layout" on a piece of paper. | |||||
| Write the number 0 next to each. | |||||
| The number 0 may be crossed out and changed several times below. | |||||
| Go to step 2. | |||||
| Step 2: Set the DEFAULT HORIZONTAL LAYOUT MODE. | |||||
| If you want to use FULL WIDTH as the default | |||||
| Make Old_Layout -1 | |||||
| Go to step 3. | |||||
| If you want to use HORIZONTAL FITTING (kerning) as the default | |||||
| Make Full_Layout 64 | |||||
| Go to step 3. | |||||
| If you want to use HORIZONTAL SMUSHING as the default | |||||
| Make Full_Layout 128 | |||||
| Go to step 3. | |||||
| Step 3: Specify HOW TO SMUSH HORIZONTALLY WHEN SMUSHING. | |||||
| If you want to use UNIVERSAL smushing for the horizontal axis | |||||
| Go to step 4. | |||||
| If you want to use CONTROLLED smushing for the horizontal axis | |||||
| Add together the code values for all the horizontal smushing | |||||
| rules you want from the list below to get the horizontal | |||||
| smushing rules total. | |||||
| EQUAL CHARACTER SMUSHING 1 | |||||
| UNDERSCORE SMUSHING 2 | |||||
| HIERARCHY SMUSHING 4 | |||||
| OPPOSITE PAIR SMUSHING 8 | |||||
| BIG X SMUSHING 16 | |||||
| HARDBLANK SMUSHING 32 | |||||
| Horizontal smushing rules total: ___ | |||||
| If Full_Layout is currently 128 | |||||
| Change Old_Layout to the horizontal smushing rules total. | |||||
| Increase Full_Layout by the horizontal smushing rules total. | |||||
| Go to Step 4. | |||||
| If Full_Layout is currently 0 or 64 | |||||
| Increase Full_Layout by the horizontal smusing rules total. | |||||
| Go to Step 4. | |||||
| Step 4: Set the DEFAULT VERTICAL LAYOUT MODE. | |||||
| If you want to use FULL HEIGHT as the default | |||||
| Go to step 5. | |||||
| If you want to use VERTICAL FITTING as the default | |||||
| Increase Full_Layout by 8192. | |||||
| Go to step 5. | |||||
| If you want to use VERTICAL SMUSHING as the default | |||||
| Increase Full_Layout by 16384. | |||||
| Go to step 5. | |||||
| Step 5: Specify HOW TO SMUSH VERTICALLY WHEN SMUSHING. | |||||
| If you want to use UNIVERSAL smushing for the vertical axis | |||||
| Go to step 6. | |||||
| If you want to use CONTROLLED smushing for the vertical axis | |||||
| Add together the code values for all the vertical smushing | |||||
| rules you want from the list below to get the vertical | |||||
| smushing rules total. | |||||
| EQUAL CHARACTER SMUSHING 256 | |||||
| UNDERSCORE SMUSHING 512 | |||||
| HIERARCHY SMUSHING 1024 | |||||
| HORIZONTAL LINE SMUSHING 2048 | |||||
| VERTICAL LINE SUPERSMUSHING 4096 | |||||
| Vertical smushing rules total: ____ | |||||
| Increase Full_Layout by the vertical smushing rules total. | |||||
| Go to step 6. | |||||
| Step 6: You're done. | |||||
| The resulting value of Old_Layout will be a number from -1 to 63. | |||||
| The resulting value of Full_Layout will be a number from 0 and 32767. | |||||
| FIGFONT COMMENTS | |||||
| After the header line are FIGfont comments. The comments can be as many | |||||
| lines as you like, but should at least include your name and Email address. | |||||
| Here is an example which also shows the header line. | |||||
| flf2a$ 6 5 20 15 3 0 143 | |||||
| Example by Glenn Chappell <ggc@uiuc.edu> 8/94 | |||||
| Permission is hereby given to modify this font, as long as the | |||||
| modifier's name is placed on a comment line. | |||||
| Comments are not required, but they are appreciated. Please comment your | |||||
| FIGfonts. | |||||
| Remember to adjust the Comment_Lines parameter as you add lines to your | |||||
| comments. Don't forget that blank lines DO count. | |||||
| FIGCHARACTER DATA | |||||
| ============ ==== | |||||
| The FIGcharacter data begins on the next line after the comments and | |||||
| continues to the end of the file. | |||||
| BASIC DATA STRUCTURE | |||||
| The sub-characters in the file are given exactly as they should be output, | |||||
| with two exceptions: | |||||
| 1) Hardblanks should be the hardblank character specified in the | |||||
| header line, not a blank (space). | |||||
| 2) Every line has one or two endmark characters, whose column | |||||
| locations define the width of each FIGcharacter. | |||||
| In most FIGfonts, the endmark character is either "@" or "#". The FIGdriver | |||||
| will eliminate the last block of consecutive equal characters from each line | |||||
| of sub-characters when the font is read in. By convention, the last line of | |||||
| a FIGcharacter has two endmarks, while all the rest have one. This makes it | |||||
| easy to see where FIGcharacters begin and end. No line should have more | |||||
| than two endmarks. | |||||
| Below is an example of the first few FIGcharacters, taken from small.flf. | |||||
| NOTE: The line drawn below consisting of "|" represents the left margin of | |||||
| your editor. It is NOT part of the FIGfont. Also note that hardblanks are | |||||
| represented as "$" in this FIGfont, as would be described in the header line. | |||||
| |$@ | |||||
| |$@ | |||||
| blank/space |$@ | |||||
| |$@ | |||||
| |$@@ | |||||
| | _ @ | |||||
| || |@ | |||||
| exclamation point ||_|@ | |||||
| |(_)@ | |||||
| | @@ | |||||
| | _ _ @ | |||||
| |( | )@ | |||||
| double quote | V V @ | |||||
| | $ @ | |||||
| | @@ | |||||
| | _ _ @ | |||||
| | _| | |_ @ | |||||
| number sign ||_ . _|@ | |||||
| ||_ _|@ | |||||
| | |_|_| @@ | |||||
| | @ | |||||
| | ||_@ | |||||
| dollar sign |(_-<@ | |||||
| |/ _/@ | |||||
| | || @@ | |||||
| Notice that each FIGcharacter occupies the same number of lines (6 lines, in | |||||
| this case), which must also be expressed in the header line as the Height | |||||
| parameter. | |||||
| Also notice that for every FIGcharacter, there must be a consistent width | |||||
| (length) for each line once the endmarks are removed. To do otherwise would | |||||
| be an error. | |||||
| Be aware of the vertical alignment of each FIGcharacter within its height, | |||||
| so that all FIGcharacters will be properly lined up when printed. | |||||
| If one of the last sub-characters in a particular FIGcharacter is "@", you | |||||
| should use another character for the endmark in that FIGcharacter so that | |||||
| the intended "@" is not interpreted as an endmark. "#" is a common | |||||
| alternative. | |||||
| Load a few existing FIGfonts into your favorite text editor for other | |||||
| examples. | |||||
| REQUIRED FIGCHARACTERS | |||||
| Some FIGcharacters are required, and must be represented in a specific order. | |||||
| Specifically: all of the printable character codes from ASCII shown in the | |||||
| table below, in order, plus character codes 196, 214, 220, 228, 246, 252, | |||||
| and 223, in that order. In Latin-1, these extra 7 characters represent the | |||||
| following German characters: umlauted "A", "O", "U", "a", "o" and "u"; and | |||||
| also "ess-zed". | |||||
| Printable portion of the ASCII character set: | |||||
| 32 (blank/space) 64 @ 96 ` | |||||
| 33 ! 65 A 97 a | |||||
| 34 " 66 B 98 b | |||||
| 35 # 67 C 99 c | |||||
| 36 $ 68 D 100 d | |||||
| 37 % 69 E 101 e | |||||
| 38 & 70 F 102 f | |||||
| 39 ' 71 G 103 g | |||||
| 40 ( 72 H 104 h | |||||
| 41 ) 73 I 105 i | |||||
| 42 * 74 J 106 j | |||||
| 43 + 75 K 107 k | |||||
| 44 , 76 L 108 l | |||||
| 45 - 77 M 109 m | |||||
| 46 . 78 N 110 n | |||||
| 47 / 79 O 111 o | |||||
| 48 0 80 P 112 p | |||||
| 49 1 81 Q 113 q | |||||
| 50 2 82 R 114 r | |||||
| 51 3 83 S 115 s | |||||
| 52 4 84 T 116 t | |||||
| 53 5 85 U 117 u | |||||
| 54 6 86 V 118 v | |||||
| 55 7 87 W 119 w | |||||
| 56 8 88 X 120 x | |||||
| 57 9 89 Y 121 y | |||||
| 58 : 90 Z 122 z | |||||
| 59 ; 91 [ 123 { | |||||
| 60 < 92 \ 124 | | |||||
| 61 = 93 ] 125 } | |||||
| 62 > 94 ^ 126 ~ | |||||
| 63 ? 95 _ | |||||
| Additional required Deutsch FIGcharacters, in order: | |||||
| 196 (umlauted "A" -- two dots over letter "A") | |||||
| 214 (umlauted "O" -- two dots over letter "O") | |||||
| 220 (umlauted "U" -- two dots over letter "U") | |||||
| 228 (umlauted "a" -- two dots over letter "a") | |||||
| 246 (umlauted "o" -- two dots over letter "o") | |||||
| 252 (umlauted "u" -- two dots over letter "u") | |||||
| 223 ("ess-zed" -- see FIGcharacter illustration below) | |||||
| ___ | |||||
| / _ \ | |||||
| | |/ / | |||||
| Ess-zed >>---> | |\ \ | |||||
| | ||_/ | |||||
| |_| | |||||
| If you do not wish to define FIGcharacters for all of those required above, | |||||
| you MAY create "empty" FIGcharacters in their place by placing endmarks flush | |||||
| with the left margin. The Deutsch FIGcharacters are commonly created as | |||||
| empty. If your FIGfont includes only capital letters, please copy them to | |||||
| the appropriate lowercase locations, rather than leaving lowercase letters | |||||
| empty. A FIGfont which does not include at least all ASCII letters, a space, | |||||
| and a few basic punctuation marks will probably frustrate some users. (For | |||||
| example "@" is more frequently desired as a FIGcharacter than you may think, | |||||
| since Email addresses may be written as FIGures.) | |||||
| CODE TAGGED FIGCHARACTERS | |||||
| After the required FIGcharacters, you may create FIGcharacters with any | |||||
| character code in the range of -2147483648 to +2147483647. (Over four | |||||
| billion possibilities, which is "virtual infinity" for this purpose.) | |||||
| One exception: character code -1 is NOT allowed for technical reasons. | |||||
| It is advisable to assign character codes such that the appearance of your | |||||
| FIGcharacters matches the expectations of ASCII/Latin-1/Unicode, with a few | |||||
| exceptions: | |||||
| 1) If a FIGcharacter with code 0 is present, it is treated | |||||
| specially. It is a FIGfont's "missing character". Whenever | |||||
| the FIGdriver is told to print a character which doesn't exist | |||||
| in the current FIGfont, it will print FIGcharacter 0. If there | |||||
| is no FIGcharacter 0, nothing will be printed. | |||||
| 2) If a FIGfont contains a non-Latin alphabet in character codes | |||||
| in the ASCII range 32-126 (which is discouraged), we have found | |||||
| it helpful to include a human-readable translation table as one | |||||
| of the FIGcharacters instead of a "glyph". Typically, the "~" | |||||
| would contain this table. The translation table FIGcharacter | |||||
| would contain a list of all the special characters in the | |||||
| FIGfont, along with the ASCII characters to which they | |||||
| correspond. Keep this table no more than 79 columns wide. | |||||
| (Thanks to Gedaliah Friedenberg for this idea.) | |||||
| 3) In more extensive Unicode fonts, you can assign a negative | |||||
| character code (other than -1) to one or more translation | |||||
| tables, similar to #2 above. (All Unicode character codes are | |||||
| positive.) And, you will most likely suggest within the | |||||
| comments that a user access one of several control files (See | |||||
| "CONTROL FILES" below) to gain access to Latin-2, Latin-3, or | |||||
| other 8-bit standardized character sets. The control files may | |||||
| redirect the "~" character to one of the negative character codes so | |||||
| that the translation table would display the table when "~" is | |||||
| given for input. Doing this allows you to still have a "~" | |||||
| FIGcharacter for those who do not use a control file. | |||||
| Those FIGcharacters which are not required must have an explicit character | |||||
| code in a separate line preceding them, called a "code tag". A code tag | |||||
| contains the value of the character code, followed by whitespace (a few | |||||
| spaces), and perhaps an optional comment. The comment is usually the name of | |||||
| the FIGcharacter. The Unicode Consortium has assigned formal names to all | |||||
| officially accepted characters, and these may be used. An entire code tag, | |||||
| including the comment, should not occupy more than 95 columns. (Over 100 | |||||
| characters here may make older versions of FIGlet crash.) | |||||
| Here is an example, showing two code tagged FIGcharacters after the last two | |||||
| required Deutsch FIGcharacters. Again, the line drawn below consisting of | |||||
| "|" represents the left margin of your editor, and is NOT part of the FIGfont. | |||||
| | _ _ @ | |||||
| |(_) (_)@ | |||||
| || | | |@ | |||||
| || |_| |@ | |||||
| | \__,_|@ | |||||
| | @@ | |||||
| | ___ @ | |||||
| | / _ \@ | |||||
| || |/ /@ | |||||
| || |\ \@ | |||||
| || ||_/@ | |||||
| ||_| @@ | |||||
| |161 INVERTED EXCLAMATION MARK | |||||
| | _ @ | |||||
| |(_)@ | |||||
| || |@ | |||||
| || |@ | |||||
| ||_|@ | |||||
| | @@ | |||||
| |162 CENT SIGN | |||||
| | _ @ | |||||
| | | | @ | |||||
| | / __)@ | |||||
| || (__ @ | |||||
| | \ )@ | |||||
| | |_| @@ | |||||
| A character code may be expressed in decimal (as shown above, numbers we're | |||||
| all familiar with), or in Octal (seldom used) or in hexadecimal. | |||||
| Character codes expressed in octal must be preceded by "0" (zero), and if | |||||
| negative, "-" (minus) must precede the "0". There are eight octal digits: | |||||
| 01234567. You may recall octal numbers from school as "base 8 numbers". | |||||
| Character codes expressed in hexadecimal must be preceded by "0x" or "0X". | |||||
| (That's also a zero.) If negative, the "-" must precede the "0x". There are | |||||
| 16 hexadecimal digits: 01234567890ABCDEF. (The "letter-digits" may also be | |||||
| lowercase.) Hexadecimal is "base 16". | |||||
| It is common to express character codes less than 256 (in the range of an | |||||
| 8-bit character set) as decimal, while FIGfonts which extend into the Unicode | |||||
| range would have character codes expressed in hexadecimal. This is because | |||||
| the Unicode Standard expresses character codes in hexadecimal, which is | |||||
| helpful for programmers. | |||||
| The code tagged FIGcharacters may be listed in any order, but simple | |||||
| sequential order is recommended. | |||||
| If two or more FIGcharacters have the same character code, the last one in | |||||
| the FIGfont is the one used. It is common for the Deutsch FIGcharacters to | |||||
| be given twice in a FIGfont, just to maintain a consistent order for the | |||||
| Latin-1 range (128 to 255). | |||||
| It is not advisable to assign character codes in the range of 1 to 31, since | |||||
| this range includes control characters in ASCII. Character code 127 is a | |||||
| delete in ASCII, and is also not advised. Character codes 128 to 159 are | |||||
| additional control characters in Latin-1, and they too should not be used. | |||||
| All of the above are legal, technically, but are not part of what is legal | |||||
| for input, so they could only be accessed by use of a control file. | |||||
| (See "CONTROL FILES" below.) If you are still tempted to use them, consider | |||||
| negative character codes instead, which are meaningless in all standardized | |||||
| character sets. | |||||
| Again, the character code -1 is illegal for technical reasons. | |||||
| NOTES - AVOIDING ERRORS AND GENERAL ADVICE | |||||
| ===== ======== ====== === ======= ====== | |||||
| It is very important that every character in a font has the same height, and, | |||||
| once the endmarks are removed, that all the lines constituting a single | |||||
| FIGcharacter have the same length. Be careful also that no lines in the font | |||||
| file have trailing blanks (spaces), as the FIGdriver will take these to be | |||||
| the endmarks. (FIGWin 1.0 will not consider blanks to be endmarks.) | |||||
| Errors in a FIGfont can be detected by using the "chkfont" program, | |||||
| part of the standard FIGlet package, and also available, as of this | |||||
| writing from http://www.figlet.org/ | |||||
| For FIGWin users, the FIGWin program will report errors when a FIGfont is | |||||
| read in; it is less forgiving than FIGlet, which can produce nonsense if the | |||||
| FIGfont is incorrectly formatted. | |||||
| Remember that sub-characters outside of the ASCII range will not necessarily | |||||
| display the same way on your system as on others. | |||||
| The blank (space) FIGcharacter should usually consist of one or two columns | |||||
| of hardblanks and nothing else; slanted fonts are an exception to this rule. | |||||
| If the space FIGcharacter does not contain any hardblanks, it will disappear | |||||
| when horizontal fitting (kerning) or smushing occurs. | |||||
| Again, if you design a FIGfont, please let us know! | |||||
| CONTROL FILES | |||||
| ======= ===== | |||||
| A FIGfont control file is a separate text file, associated with one or more | |||||
| FIGfonts, that indicates how to map input characters into FIGfont character | |||||
| codes. By default, FIGdrivers read single bytes from the input source and | |||||
| interpret them as Latin-1 FIGcharacters. | |||||
| FIGlet version 2.2 (and later) can optionally interpret its input as DBCS or | |||||
| UTF-8 characters, making it possible to access FIGcharacters with codes | |||||
| outside the Latin-1 range (greater than 255). | |||||
| In addition, though, all versions of FIGlet can use control files to | |||||
| transform specific character codes (or ranges of codes) as other codes | |||||
| (or ranges). Multiple control files can be specified, in which case multiple | |||||
| stages of transformation are performed. | |||||
| The filename of a control file always ends with ".flc". | |||||
| CONTROL FILE FORMAT | |||||
| Control files contain several kinds of lines. Lines beginning with "#", as | |||||
| well as blank lines, are comment lines and are ignored. All other lines are | |||||
| command lines, with one of the following formats: | |||||
| t inchar outchar | |||||
| t inchar1-inchar2 outchar1-outchar2 | |||||
| number number | |||||
| f | |||||
| h | |||||
| j | |||||
| b | |||||
| u | |||||
| g{0|1|2|3} {94|96|94x94} [char] | |||||
| g{L|R} {0|1|2|3} | |||||
| where "inchar", "outchar", and "char" are either Latin-1 characters | |||||
| representing their own codes, or else are numeric character codes preceded by | |||||
| a "\" character; and "number" is a numeric character code with no preceding | |||||
| "\" character. | |||||
| Thus "A" represents the code 65, as does "\65", and "\0x100" represents the | |||||
| code 256 (100 in hexadecimal). In addition, "\ " (backslash followed by a | |||||
| space) represents the code 32 (space), and the following backslash sequences | |||||
| are also understood: | |||||
| \a code 7 (a bell/alert) | |||||
| \b code 8 (a backspace) | |||||
| \e code 27 (an ESC character) | |||||
| \f code 12 (a form feed) | |||||
| \n code 10 (a newline/line feed) | |||||
| \r code 13 (a carriage return) | |||||
| \t code 9 (a horizontal tab) | |||||
| \v code 11 (a vertical tab) | |||||
| \\ code 92 (a backslash) | |||||
| All of these combinations except perhaps "\\" are very unlikely to be used, | |||||
| but they are provided just in case they are needed. | |||||
| Whitespace characters are used between "t" and "inchar" and between "inchar" | |||||
| and "outchar", but not around the "-" characters used in the second type of | |||||
| "t" command. | |||||
| The term "string" refers to any number of characters represented in the | |||||
| format given above. The characters begin after the whitespace following the | |||||
| letter "s", and continue to the end of the line. | |||||
| Anything following the first letter of an "f", "h", "j", or "u" command is | |||||
| ignored. | |||||
| The first type of "t" command transforms characters with the code "inchar" | |||||
| into characters with the code "outchar". The second type of "t" command | |||||
| transforms characters in the range "inchar1" to "inchar2" as the | |||||
| corresponding codes in the range "outchar1" to "outchar2". Both ranges must | |||||
| be of the same size. The form "number number" is equivalent to a "t" | |||||
| command of the first type, and is provided for compatibility with the mapping | |||||
| tables issued by the Unicode Consortium. | |||||
| Multiple transformation stages can be encoded in a single control file by | |||||
| using "f" commands to separate the stages. | |||||
| Versions of FIGlet before 2.1 required that the first line of a control file | |||||
| consist of the signature string "flc2a". This signature line is still | |||||
| permitted in FIGlet 2.2 and later versions, but is no longer required. | |||||
| Here is an example of a control file. The blanks at the beginning of each | |||||
| line are for readability only, and are not part of the file. | |||||
| The following control file: | |||||
| flc2a | |||||
| t # $ | |||||
| t A-Z a-z | |||||
| will map the "#" character to "$", and will also convert uppercase ASCII to | |||||
| lowercase ASCII. | |||||
| If a number of consecutive "t" commands are given, then for each character | |||||
| processed, only the first applicable command (if any) will be executed. | |||||
| Consider this control file: | |||||
| t A B | |||||
| t B A | |||||
| It will swap the characters "A" and "B". If the FIGdriver reads an "A", the | |||||
| first command will change "A" to "B", in which case the second will not be | |||||
| executed. If the FIGdriver reads a "B", the first command will have no | |||||
| effect, and the second command will change "B" to "A". Here is another | |||||
| control file: | |||||
| t A B | |||||
| t A C | |||||
| In this example, the second line is never executed. In short, a sequence of | |||||
| "t" lines "does what it ought to". | |||||
| More complex files, in which a single character is acted upon by several "t" | |||||
| commands, can be set up using an "f" command. For example: | |||||
| flc2a | |||||
| t a-z A-Z | |||||
| f | |||||
| t Q ~ | |||||
| This control file specifies two transformation stages. In the first stage, | |||||
| lowercase ASCII letters are changed to their uppercase equivalents. The | |||||
| second stage maps any Q (whether original or a converted "q") into the "~" | |||||
| character. If the "f" command were omitted, "q" characters would remain "Q" | |||||
| and not be converted to "~". | |||||
| EXTENDED COMMANDS | |||||
| The "h", "j", "b", "u", and "g" commands are only understood by FIGlet | |||||
| version 2.2 or later. They control how a FIGdriver interprets bytes in the | |||||
| input. By default, the FIGdriver interprets each byte of input as a distinct | |||||
| character. This mode is suitable for most character encodings. All these | |||||
| commands are logically acted on before any other control file commands, no | |||||
| matter where in the sequence of control files they appear. They are also | |||||
| mutually exclusive; if more than one of these commands is found, only the | |||||
| last is acted on. Multiple "g" commands are permitted, however. | |||||
| The "h" command forces the input to be interpreted in HZ mode, which is used | |||||
| for the HZ character encoding of Chinese text. In this mode, the sequence | |||||
| "~{" (which is removed from the input) signals that all following characters | |||||
| are two bytes long until the sequence "~}" is detected. In addition, the | |||||
| sequence "~~" is changed to just "~", and all other two-byte sequences | |||||
| beginning with "~" are removed from the input. The character code | |||||
| corresponding to a two-byte character is: | |||||
| first character * 256 + second character | |||||
| The "j" command forces the input to be interpreted in Shift-JIS mode (also | |||||
| called "MS-Kanji mode"). Input bytes in the ranges 128-159 and 224-239 are | |||||
| read as the high-order byte of a two-byte character; all other bytes are | |||||
| interpreted as one-byte characters. The value of a two-byte character is | |||||
| determined in the same way as in HZ mode. | |||||
| The "b" command forces the input to be interpreted in DBCS mode, which is | |||||
| suitable for processing HZ or Shift-GB Chinese text or Korean text. Input | |||||
| bytes in the ranges 128-255 are read as the high-order byte of a two-byte | |||||
| character; all other bytes are interpreted as one-byte characters. The | |||||
| value of a two-byte character is determined in the same way as in HZ mode. | |||||
| The "u" command forces the input to be interpreted in UTF-8 mode, which | |||||
| causes any input byte in the range 0x80 to 0xFF to be interpreted as the | |||||
| first byte of a multi-byte Unicode (ISO 10646) character. UTF-8 characters | |||||
| can be from 1 to 6 bytes long. An incorrectly formatted sequence is | |||||
| interpreted as the character 128 (normally an unused control character). | |||||
| Otherwise, the input is allowed to contain ISO 2022 escape sequences, which | |||||
| are decoded to generate appropriate character codes. These character codes | |||||
| are *not* a subset of Unicode, but may be more useful in processing East | |||||
| Asian text. A brief explanation of ISO 2022 is given here in order to | |||||
| clarify how a FIGdriver should interpret it. The "g" command provides | |||||
| information for the ISO 2022 interpreter, and is explained below. | |||||
| ISO 2022 text is specified using a mixture of registered character sets. | |||||
| At any time, up to four character sets may be available. Character sets | |||||
| have one of three sizes: single-byte character sets with 94 characters | |||||
| (e.g. ASCII), single-byte character sets with 96 characters (e.g. the top | |||||
| halves of ISO Latin-1 to Latin-5), or double-byte character sets with | |||||
| 94 x 94 characters (e.g. JIS 0208X-1983). Each registered character set has | |||||
| a standard designating byte in the range 48 to 125; the bytes are unique withi | |||||
| n character set sizes, but may be reused across sizes. For example, byte 66 | |||||
| designates the 94-character set ASCII, the 96-character set ISO Latin-2 (top | |||||
| half), and the 94 x 94 Japanese character set JIS 0208X-1983. In this | |||||
| document, the designating byte of a character set will be represented by <D>. | |||||
| The four available character sets are labeled G0, G1, G2, and G3. Initially, | |||||
| G0 is the 94-character set ASCII, and G1 is the 96-character set ISO Latin-1 | |||||
| (top half). The other character sets are unassigned. The following escape | |||||
| sequences (where ESC = the byte 27) specify changes to the available | |||||
| character sets: | |||||
| ESC ( <D> Set G0 to the 94-character set <D> | |||||
| ESC ) <D> Set G1 to the 94-character set <D> | |||||
| ESC * <D> Set G2 to the 94-character set <D> | |||||
| ESC + <D> Set G3 to the 94-character set <D> | |||||
| ESC - <D> Set G1 to the 96-character set <D> | |||||
| ESC . <D> Set G2 to the 96-character set <D> | |||||
| ESC / <D> Set G3 to the 96-character set <D> | |||||
| ESC $ <D> Set G0 to the 94 x 94 character set <D> | |||||
| ESC $ ( <D> Set G0 to the 94 x 94 character set <D> | |||||
| ESC $ ) <D> Set G1 to the 94 x 94 character set <D> | |||||
| ESC $ * <D> Set G2 to the 94 x 94 character set <D> | |||||
| ESC $ + <D> Set G3 to the 94 x 94 character set <D> | |||||
| Note that G0 may not be a 96-character set, and that there are two ways to | |||||
| specify a 94 x 94 character set in G0, of which the first is deprecated. | |||||
| ISO 2022 decoding affects input bytes in the ranges 33 to 126 and 160 to 255, | |||||
| known as "the left half" and "the right half" respectively. All other bytes, | |||||
| unless they belong to a control sequence shown in this document, remain | |||||
| unchanged. Initially, the left half is interpreted as character set G0, | |||||
| and the right half as character set G1. This can be changed by the following | |||||
| control sequences: | |||||
| SI (byte 15) Interpret the left half as G1 characters | |||||
| SO (byte 14) Interpret the left half as G0 characters | |||||
| ESC n Interpret the left half as G2 characters | |||||
| ESC o Interpret the left half as G3 characters | |||||
| ESC ~ Interpret the right half as G1 characters | |||||
| ESC } Interpret the right half as G2 characters | |||||
| ESC | Interpret the right half as G3 characters | |||||
| SS2 (byte 142) Interpret next character only as G2 | |||||
| ESC N Interpret next character only as G2 | |||||
| SS3 (byte 143) Interpret next character only as G3 | |||||
| ESC O Interpret next character only as G3 | |||||
| This rich schema may be used in various ways. In ISO-2022-JP, the Japanese | |||||
| flavor of ISO 2022, only the bytes 33-126 and the G0 character set is used, | |||||
| and escape sequences are used to switch between ASCII, ISO-646-JP (the | |||||
| Japanese national variant of ASCII), and JIS 0208X-1983. In other versions, | |||||
| the G1 character set has 94 x 94 size, and so any byte in the range 160-255 | |||||
| is automatically the first byte of a double-byte character. | |||||
| FIGdrivers that support ISO 2022 do so in the following way. Each character i | |||||
| is decoded and assigned to a character set <D>. | |||||
| If the character belongs to a 94-bit character set, | |||||
| then if its value exceeds 128, it is reduced by 128, | |||||
| and the value 65536 * <D> is added to it, | |||||
| unless <D> is 66 (ASCII). | |||||
| If the character belongs to a 96-bit character set, | |||||
| then if its value is less than 128, it is increased by 128, | |||||
| and the value 65536 * <D> is added to it, | |||||
| unless <D> is 65 (ISO Latin-1). | |||||
| If the character belongs to a 94 x 94 character set, | |||||
| then the value is the sum of: | |||||
| the first byte * 256, | |||||
| plus the second byte, | |||||
| plus the value 65536 * <D>. | |||||
| Thus, the character code 65 ("A") in ASCII remains 65, the character code | |||||
| 196 in ISO Latin-1 ("A-umlaut") remains 196, the character code 65 (0x41) | |||||
| in ISO-646-JP (whose <D> is 74 = 0x4A) becomes 0x4A0041 =4849729, and the | |||||
| two-byte sequence 33 33 (0x21 0x21) in JIS 0208X-1983 (whose <D> is | |||||
| 65 = 0x41) becomes 0x412121 = 4268321. These codes may be used in compiling | |||||
| FIGfonts suitable for use with ISO 2022 encoded text. | |||||
| The initial settings of G0 through G3 and their assignments to the left half | |||||
| and the right half can be altered in a control file by using "g" commands, | |||||
| as follows: | |||||
| g {0|1|2|3} {94|96|94x94} [<D>] | |||||
| specifies that one of G0-G3 is a 94, 96, or 94x94 character set with | |||||
| designating character <D>. If no designating character is specified, then a | |||||
| <D> value of zero is assumed. | |||||
| For example, the list of control commands: | |||||
| g 0 94 B | |||||
| g 1 96 A | |||||
| sets the G0 character set to ASCII (94-character set "B") and the G1 | |||||
| character set to the top half of Latin-1 (96-character set "A"). (This is the | |||||
| default setting). | |||||
| To change the initial assignments of G0 to the left half and G1 to the right | |||||
| half, "g" commands of the form | |||||
| g {L|R} {0|1|2|3} | |||||
| For example, the command: | |||||
| g R 2 | |||||
| causes right-half bytes (in the range 160-255) to be interpreted as G2. | |||||
| Whether these bytes are interpreted singly or in pairs depends on the type | |||||
| of character set that is currently available as G2. | |||||
| Spaces may be freely used or omitted in "g" commands. | |||||
| The standard FIGlet distribution contains mapping tables for Latin-2 (ISO 8859-2), | |||||
| Latin-3 (ISO 8859-3), Latin-4 (ISO 8859-4), and Latin-5 (ISO 8859-9). They | |||||
| can be used with the font "standard.flf", which contains all the characters | |||||
| used in these standards. | |||||
| STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS | |||||
| ============ ============ == ======= === ====== ========== | |||||
| We assert the following as the "Law" of our intentions: | |||||
| PROFIT | |||||
| All future FIGdrivers shall be FREE OF CHARGE to the general public via the | |||||
| Internet. Any advertisements of other works by the author must be in | |||||
| documentation only, and limited to ONE "screenful", and shall not appear by | |||||
| normal program behavior, nor interfere with normal behavior. No FIGdriver | |||||
| shall disable itself after a set period of time or request "donations". | |||||
| No FIGdriver shall offer any other FIGdriver with improved capability for | |||||
| creating FIGures in exchange for money. | |||||
| REQUIRED FEATURES OF FUTURE VERSIONS | |||||
| Future FIGdrivers must read and process FIGfont files as described in this | |||||
| document, but are not necessarily expected to process control files, smush, | |||||
| perform fitting or kerning, perform vertical operations, or even produce | |||||
| multiple lines in output FIGures. | |||||
| FIGDRIVER NAMES | |||||
| Future FIGdrivers must be named to include capitalized "FIG" and shall have | |||||
| an incremental version number specific to its own platform. | |||||
| BACKWARDS COMPATIBILITY OF FUTURE VERSIONS | |||||
| Any future FIGdriver created for the same platform as an existing FIGdriver, | |||||
| and using the same name as the existing FIGdriver, shall be considered a new | |||||
| version of the preceding FIGdriver, and shall contain all historical comments | |||||
| of updates to past versions on the same platform, and shall have full | |||||
| capability of the preceding versions. If the source code is not provided to | |||||
| the general public, it shall be at least provided to any potential developers | |||||
| of later versions, and such comments relating to past versions shall be | |||||
| accessible to any user by other means or documentation. If a new program is | |||||
| created on a platform that already has an existing FIGdriver, it must be | |||||
| given a new and distinct name. This allows multiple FIGdrivers to exist for | |||||
| the same platform with different capabilities. | |||||
| The format of FIGfonts may not be modified to be non-backwards compatible | |||||
| UNLESS: | |||||
| 1) The new format is easily editable as an ASCII text file, | |||||
| beginning with the characters "flf" followed by a sequential | |||||
| number. | |||||
| 2) At least all of the same information can be derived from the | |||||
| new format as the prior format (currently "flf2"). This | |||||
| includes the main comments which give credit to the FIGfont | |||||
| designer. | |||||
| 3) Individuals are found who are willing and have the ability to | |||||
| either port or develop versions for at least UNIX, DOS, | |||||
| Windows, and Amiga which will read both the new formats AND the | |||||
| prior format (currently "flf2"), and retain the capability of | |||||
| past versions. It is intended that this will be expanded to | |||||
| include Macintosh if a GUI version exists. This list of | |||||
| required operating systems may be reduced if an operating | |||||
| system falls out of popularity or increased if a new operating | |||||
| system for which there is a FIGdriver comes into greater | |||||
| popularity, according to the consensus of opinions of past | |||||
| developers for the most popular operating systems. | |||||
| 4) A C, Java, or other version must always exist which can | |||||
| receive input and instructions either from a command line, a | |||||
| file, or directly over the internet so that FIGures can be | |||||
| obtained from internet-based services without the need to | |||||
| download any FIGdriver. | |||||
| 5) All existing FIGfonts available from the "official" point of | |||||
| distribution (http://www.figlet.org/), | |||||
| must be converted to the new format, and offered for download | |||||
| alongsidethe new versions. | |||||
| THE FUNCTION OF WORD WRAPPING | |||||
| All future FIGdrivers should duplicate these behaviors, unless a version is | |||||
| only capable of outputting one-line FIGures, which is acceptable as long no | |||||
| preceding versions exist for its platform which can output multiple-line | |||||
| FIGures. | |||||
| FIGdrivers which perform word wrapping do so by watching for blanks (spaces) | |||||
| in input text, making sure that the FIGure is no more wide than the maximum | |||||
| width allowed. | |||||
| Input text may also include linebreaks, so that a user may specify where | |||||
| lines begin or end instead of relying on the word wrapping of the FIGdriver. | |||||
| (Linebreaks are represented by different bytes on different platforms, so | |||||
| each FIGdriver must watch for the appropriate linebreaks for its particular | |||||
| platform.) | |||||
| When a FIGdriver word wraps and there are several consecutive blanks in input | |||||
| text where the wrapping occurred, the FIGdriver will disregard all blanks | |||||
| until the next non-blank input character is encountered. However, if blanks | |||||
| in input text immediately follow a linebreak, or if blanks are the first | |||||
| characters in the input text, the blanks will be "printed", moving any | |||||
| visible FIGcharacters which follow on the same output line to the right. | |||||
| Similarly, if an image is right-aligned, and blanks immediately precede | |||||
| linebreaks or the end of input text, a FIGdriver will move an entire line of | |||||
| output FIGcharacters to the left to make room for the blank FIGcharacters | |||||
| until the left margin is encountered. (If the print direction is | |||||
| right-to-left, everything stated in this paragraph is reversed.) | |||||
| Word processing programs or text editors usually behave similarly in all | |||||
| regards to word wrapping. | |||||
| GENERAL INTENT FOR CROSS-PLATFORM PORTABILITY | |||||
| Currently, all versions of FIGlet are compiled from C code, while FIGWin 1.0 | |||||
| is written in Visual Basic. Over time it is intended that a later version of | |||||
| FIGWin will be created using a GUI C programming language, and that the | |||||
| FIGlet C code shall continue to be written to be easily "plugged in" to a | |||||
| GUI shell. It is preferable for developers of FIGdrivers for new platforms | |||||
| to use C or a GUI version of C, so that when the core rendering engine of | |||||
| FIGlet is updated, it will be portable to other platforms. | |||||
| CONTROL FILE COMMANDS | |||||
| New control file commands may be added to later versions of this standard. | |||||
| However, the commands "c", "d", and "s" are permanently reserved and may | |||||
| never be given a meaning. | |||||
| FILE COMPRESSION | |||||
| FIGfonts (and control files) are often quite long, especially if many | |||||
| FIGcharacters are included, or if the FIGcharacters are large. Therefore, | |||||
| some FIGdrivers (at present, only FIGlet version 2.2 or later) allow | |||||
| compressed FIGfonts and control files. | |||||
| The standard for FIG compression is to place the FIGfont or control file into | |||||
| a ZIP archive. ZIP archives can be created by the proprietary program PKZIP | |||||
| on DOS and Windows platforms, or by the free program Info-ZIP ZIP on almost | |||||
| all platforms. More information on ZIP can be obtained at | |||||
| http://www.cdrom.com/pub/infozip/Info-Zip.html . | |||||
| The ZIP archive must contain only a single file. Any files in the archive | |||||
| after the first are ignored by FIGdrivers. In addition, the standard | |||||
| extension ".zip" of the archive must be changed to ".flf" or ".flc" as | |||||
| appropriate. It does not matter what the name of the file within the | |||||
| archive is. | |||||
| CHART OF CAPABILITIES OF FIGLET 2.2 AND FIGWIN 1.0 | |||||
| ===== == ============ == ====== === === ====== === | |||||
| The following chart lists all capabilities which are either new with the | |||||
| release of both FIGdrivers, or is not a common capability among both. | |||||
| FIGlet 2.2 FIGWIN 1.0 | |||||
| Interpreting the Full_Layout parameter: Yes Yes | |||||
| Universal smushing: Yes Yes | |||||
| Supporting multi-byte input text formats: Yes No | |||||
| Processing control files: Yes No | |||||
| Changing default smushing rules: Yes No | |||||
| Bundled with a GUI editor of FIGfonts: No Yes | |||||
| Vertical fitting and smushing: No Yes | |||||
| ___________ __ _ | |||||
| \_ _____/ ____ |__| ____ ___ __ | | | |||||
| | __)_ / \ | |/ _ < | || | | |||||
| | \ | \ | ( <_> )___ | \| | |||||
| /_______ /___| /\__| |\____// ____| __ | |||||
| \/ \/\______| \/ \/ | |||||