home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / driver / util / FONSTRUKTUREN.TXT < prev    next >
Text File  |  1992-06-24  |  6KB  |  226 lines

  1.  
  2. Neue Fontstrukturen:
  3. ====================
  4.  
  5.  
  6. Mehr Gliederung: (Versuch von objektorientierter Programierung :)
  7.  
  8.  
  9.  
  10.  - Oberste Struktur: TeXFont mit
  11.             - TeXnummer
  12.             - Vergrößerung (Magnify)
  13.             - Name
  14.             - Flags (?)
  15.             - ...
  16.             - Pointer auf nächste Struktur (UseFont)
  17.  
  18.    In dieser Struktur sind *alle* Daten, die vom jeweiligen TeX File
  19.    abhängen. Alle anderen STrukturen dürfen sonstige Ahängigkeiten
  20.    *nicht* haben.
  21.  
  22.  
  23.  - UseFont Struktur:
  24.             - Flags (Fonsubst/Sizesubst/Lib/File/virtuell/...)
  25.             - Name (wichtig bei Subst)
  26.             - DPI Größe (wichtig bei Subst)
  27.             - ...
  28.             - Pointer auf eigentliche Font-Struktur
  29.  
  30.  
  31.    Name und DPI Größe sind die, wie sie verwendet werden, also nicht
  32.    die, wie der Font wirklich von Platte geholt wurde!
  33.  
  34.    In dieser Struktur werden 
  35.    a) alle Infos, was für ein Font das ist, bzw. woher er geladen wurde zusammengefasst und
  36.    b) die verwendeten Name/DPI nach der Substitution abgespeichert.
  37.    
  38.    Die darunterliegende(n) Struktur(en) sind also immer reale Fonts!
  39.    (Alle Werte der darunterliegenden Strukturen passen exact für den Font.)
  40.    
  41.    Der Pointer auf die Font-Struktur sollte *nie* NULL sein. Falls der
  42.    Font nicht gefunden wird, so wird entweder:
  43.    - die Größe substituiert
  44.    - der Name substituiert
  45.    - das TFM-File gelesen 
  46.    - (das TFM-File von ALTERNATE-Font (cmr10) gelesen)
  47.    - (eine TFM-Struktur mit 0 Pixel großen Fonts erzeugt)
  48.    
  49.    Ein Nachteil: Diese Struktur hat zwei Aufgaben (a+b)  :(
  50.  
  51.  
  52.  - struct Font:
  53.             - Tag, welche Struktur hier nun gilt
  54.             - Union:
  55.               o Struktur PK-Font        (struct PKfont)
  56.               o Struktur FLIB-Font        (struct FLIBfont)
  57.               o Struktur Virtueller Font    (struct VIRTfont)
  58.               o Struktur TFM-File        (struct TFMfont)
  59.  
  60.  
  61.  
  62. Interessant ist es, was bei den Strukturen PKfont/FLIBfont(/VIRTfont/TFMfont)
  63. alles so zusammengefaßt werden kann, daß gemeinsame Funktionen darauf
  64. zugreifen können!
  65.  
  66.  
  67. Dazu gibt es noch die eigenen Strukturlisten:
  68.  
  69.  - struct PKfont
  70.  
  71.  - struct FLIBfont
  72.  
  73.  - struct VIRTfont
  74.  
  75.  - struct TFMfont
  76.             - Fontname
  77.             - ... sämtliche Infos, die in einem TFM File
  78.               (bzw.  PK File) zu finden sind.
  79.  
  80.    Die TFMfont Struktur könnte man auch Auflösungs (dpi) abhängig machen (ctfmw).
  81.    Dann braucht man noch eine dpi-unabhängige TFM Structur, in der das normale
  82.    tfmw gespeichert wird.
  83.    
  84.    Ha, wichtig: diese Struktur brauche ich auf jeden Fall (FontGroup...).
  85.  
  86.  
  87.    Das ist die alte Fontgroup-Geschichte.
  88.    Dies wird nun so angelegt, daß es auch reicht, nur ein TFM-File zu laden.
  89.  
  90.  
  91.  
  92. Die Font-Strukturen werden in zwei Richtungen groupiert:
  93.  
  94.  - bzgl. gemeinsamer Datenstruktur der verschiedenen Font Arten (PXL/virt/..)
  95.    Diese Gemeinsamkeiten sollen helfen ein und dieselbe Funktion
  96.    für verschiedene Font-Arten verwenden zu können.
  97.  
  98.  - bzgl. gemeinsamer Daten verschiedener Fonts.
  99.    Das soll etwas RAM sparen, kann aber auch in anderer Hinsicht
  100.    hilfreich sein. So z.B. bei den TFM Daten:
  101.    Wenn ein cmr10 Font bereits geladen wurde, so stehen die
  102.    TFM Daten bereits für alle cmr10 Fonts zur Verfügung.
  103.    Wenn ein anderer cmr10 Font also nicht gefunden wird, so muß
  104.    das cmr10.tfm File nicht mehr geladen werden, sondern es kann
  105.    schon die vorhandene TFM Struktur des mr10 Fonts verwendet werden.
  106.  
  107.  
  108.  
  109. Member aller (?) dieser Font-Strukturen ist struct COMfont.
  110.  
  111.   COMfont ist eine Struktur, die nur genau zu *einem* Font passt, die
  112.   aber sowohl fuer PK-Fonts, als auch FLIB-Fonts (vielleicht auch virtuelle-Fonts)
  113.   verwendet wird.
  114.  
  115.   /* dies sollte alle Fonts betreffen */
  116.   struct COMfont {
  117.     long        flags;
  118.  
  119.     long        dpi;
  120.     long        dpi5;            /* dpi*5 :-( */
  121.  
  122.     char *        filename;
  123.     char *        directory;
  124.  
  125.     long        space_factor;
  126.     long        design_factor;
  127.     long        chksum;
  128.     long        ctfmw[NPXLCHARS];    /* tfmw um den space_factor scaliert */
  129.     long        ctfmw_ok;        /* kann auch zu einem 'flag' werden! */
  130.  
  131.   }
  132.     
  133.  
  134.   /* dies wird nur fuer PK und FLIB Fonts benoetigt */
  135.   struct PXLfont {
  136.     long *        char_bm_start;
  137.     ulong        char_bm_len;
  138.     struct PXLChars    ch[NPXLCHARS];
  139.     short        maxchars;
  140.     
  141.   }
  142.  
  143.  
  144.  
  145.   struct PKfont {
  146.     struct COMfont    com;
  147.     struct PXLfont    pxl;
  148.     char *        filename;        /* Name des pk-Files */
  149.     char *        directory;        /* Directory, in dem das pk-File ist */
  150.     
  151.   }
  152.  
  153.   struct FLIBfont {
  154.     struct COMfont    com;
  155.     struct PXLfont    pxl;
  156.     char *        filename;        /* Name des FLIB-Files */
  157.     char *        directory;        /* Directory, in dem das FLIB-File ist */
  158.     
  159.   }
  160.  
  161.  
  162.  
  163.   struct TFMfont {
  164.     long         ctfmw[NPXLCHARS];
  165.     long        dpi;
  166.     long        dpi5;
  167.     struct TFMdata *    tfmdata;
  168.   }
  169.  
  170.  
  171.  
  172. ------------------------------
  173.  
  174.  
  175. Welche Funktionen werden überhaupt alle benötigt?
  176. Mit den Funktionen kann man dann wohl besser abschätzen, was in
  177. den einzelnen Strukturen benötigt wird, und in welchen Unterstrukturen
  178. es besser aufgehoben ist.
  179.  
  180.  
  181. Externe Funktionen:
  182. ===================
  183.  
  184.  - LoadTeXFont()
  185.     Läd einen bestimmten TeX Font.
  186.     Baut eine TeXfont Struktur auf und sucht den passenden
  187.     Font. Dazu wird die interne Funktion LoadFont() aufgerufen.
  188.     Liefert einen Pointer auf diesen Font zurück.
  189.  
  190.  - ReleaseAllTeXFonts()
  191.     Gibt alle TeXfont Strukturen frei.
  192.  
  193.  - SetTeXFont()
  194.     Wird mit einer bestimmten TeX-Fontnummer aufgerufen
  195.     und gibt einen Pointer auf den Font mit der passenden
  196.     Nummer zurück.
  197.     Falls der Font noch nicht in den Speicher geladen
  198.     ist, so wird er nun geladen.
  199.  
  200.  
  201.  
  202. Interne Funktionen:
  203. ===================
  204.  
  205.  - LoadFont()
  206.     Sucht nach einen bestimmten Font und gibt die Font-Struktur
  207.     zurück. Hier wird ohne Infos gearbeitet, die DVI-File
  208.     abhängig sind.
  209.  
  210.  - LoadFontData()
  211.     Wird mit einem Font (kein TeXfont) aufgerufen und läd dessen
  212.     Infos (z.B. pk-Data, TFM-Data) in den internen Speicher.
  213.     Falls der Font schon geladen ist, so ist dies ein NOP.
  214.     Diese Funktion arbeitet auf allen möglichen Font-Arten.
  215.     Diese Funktion baut auch das Feld 'ctfmw' auf und setzt
  216.     'ctfmw_ok', damit nach einer Font-Freigabe, wo ja 'ctfmw'
  217.     nicht freigegeben wird, dieses nicht beim erneuten Laden
  218.     nochmals berechnet wird. (Naja, Effizienz über alles)
  219.     Oder sollte man der Klarheit zuliebe darauf verzichten?
  220.  
  221.  - LoadPKfontData() LoadFLIBfontData() LoadTFMfontData() LoadTFMfontData()
  222.     Diese Funktionen werden von LoadFontData() aufgerufen.
  223.     LoadFontData() mach alles, was global möglich ist und ruft
  224.     dann die passende Funktion auf.
  225.  
  226.