%% options copyright owner = Dirk Krause copyright year = 2012-2014 license = bsd %% header #ifdef __cplusplus extern "C" { #endif /** Retrieve PS font name for font without leading slash. @param fontno Font number. @return Pointer to name on success, NULL on error. */ char const * dk3font_get_ps_font_name(int fontno); /** Retrieve GS font name for font. @param fontno Font number. @return Pointer to name on success, NULL on error. */ char const * dk3font_get_gs_font_name(int fontno); /** Retrieve TeX/LaTeX font name. @param fontno Font number. @return Pointer to name on success, NULL on error. */ char const * dk3font_get_tex_font_name(int fontno); /** Get TeX/LaTeX font family name. @param fontno Font number. @return Pointer to family name on success, NULL on error. */ char const * dk3font_get_tex_family_name(int fontno); /** Get old GS font file name without leading path and without suffix. Typically you need to append ".pfb". @param fontno Font number. @return Pointer to name on success, NULL on error. */ char const * dk3font_get_gs_old_file(int fontno); /** Get new GS font file name without leading path and without suffix. @param fontno Font number. @return Pointer to name on success, NULL on error. */ char const * dk3font_get_gs_new_file(int fontno); /** Retrieve font feature set. @param fontno Font number. @return Font feature set. */ int dk3font_get_features(int fontno); /** Retrieve SVG font feature set. @param fontno Font number. @return Font feature set. */ int dk3font_get_svg_features(int fontno); /** Retrieve PS font family name. @param fontno Font number. @return Family name on success, NULL on error. */ char const * dk3font_get_ps_family(int fontno); /** Retrieve list of replacement family names. @param fontno Font number. @return NULL-terminated array of names. */ char const * const * dk3font_get_replacement_families(int fontno); /** Retrieve SVG font family name. @param fontno Font number. @return Family name on success, NULL on error. */ char const * dk3font_get_svg_family(int fontno); /** Retrieve SVG font ID. @param fontno Font number. @return Font ID on success, NULL on error. */ char const * dk3font_get_svg_fontid(int fontno); /** Retrieve SVG font weight. @param fontno Font number. @return The weight as numeric value. */ int dk3font_get_svg_font_weight(int fontno); /** Find font base URI. @param app Application structure. @param buf Destination buffer. @param bs Size of @arg buf (number of dkChar). @return 1 on success, 0 on error. */ int dk3font_gs_base_web(dk3_app_t *app, dkChar *buf, size_t bs); /** Find local font base directory. @param app Application structure. @param buf Destination buffer. @param bs Size of @arg buf (number of dkChar). @return 1 on success, 0 on error. */ int dk3font_gs_base_local(dk3_app_t *app, dkChar *buf, size_t bs); #ifdef __cplusplus } #endif %% module #include "dk3all.h" #include "dk3font.h" $!trace-include /* PLACES TO SEARCH FOR PFB FILES: =============================== Linux ----- /usr/share/ghostscript/_version_/Resource/Font/_newname_ /usr/share/fonts/default/Type1/_oldname_.pfb Windows ------- _windowsdirectory_/Fonts Ghostscript font directories */ /** Additional system font families usable as replacements. */ static char const * const dk3font_times_family_names[] = { $!string-table Times New Roman Bodoni MT $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_avantgarde_family_names[] = { $!string-table Trebuchet MS Verdana $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_bookman_light_family_names[] = { $!string-table Bookman Old Style Times New Roman $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_courier_family_names[] = { $!string-table Courier New $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_helvetica_family_names[] = { $!string-table Arial Gill Sans MT Lucida Sans Tahoma $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_helvetica_narrow_family_names[] = { $!string-table Arial Narrow Arial $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_ncschoolbook_family_names[] = { $!string-table Century Schoolbook Times New Roman $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_palatino_family_names[] = { $!string-table Palatino Linotype Times New Roman $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_symbol_family_names[] = { $!string-table Symbol $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_zapfchancery_family_names[] = { $!string-table Edwardian Script ITC Blackadder ITC $!end }; /** Additional system font families usable as replacements. */ static char const * const dk3font_zapfdingbats_family_names[] = { $!string-table WingDings $!end }; /** Font information. */ static dk3_font_t const dk3font_data[] = { { /* 0 */ "Times-Roman", "ptmr", "ptm", "NimbusRomNo9L-Regu", "n021003l", "NimbusRomNo9L-Regu", "Times", "Nimbus Roman No9 L", "NimbusRomanNo9L-Regu", dk3font_times_family_names, DK3_FONT_ROMAN, DK3_FONT_ROMAN, 400 }, { /* 1 */ "Times-Italic", "ptmri", "ptm", "NimbusRomNo9L-ReguItal", "n021023l", "NimbusRomNo9L-ReguItal", "Times", "Nimbus Roman No9 L", "NimbusRomNo9L-ReguItal", dk3font_times_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 400 }, { /* 2 */ "Times-Bold", "ptmb", "ptm", "NimbusRomNo9L-Medi", "n021004l", "NimbusRomNo9L-Medi", "Times", "Nimbus Roman No9 L", "NimbusRomNo9L-Medi", dk3font_times_family_names, (DK3_FONT_ROMAN | DK3_FONT_BOLD), DK3_FONT_ROMAN, 500 }, { /* 3 */ "Times-BoldItalic", "ptmbi", "ptm", "NimbusRomNo9L-MediItal", "n021024l", "NimbusRomNo9L-MediItal", "Times", "Nimbus Roman No9 L", "NimbusRomNo9L-MediItal", dk3font_times_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 500 }, { /* 4 */ "AvantGarde-Book", "pagk", "pag", "URWGothicL-Book", "a010013l", "URWGothicL-Book", "AvantGarde", "URW Gothic L", "URWGothicL-Book", dk3font_avantgarde_family_names, DK3_FONT_SANS_SERIF, DK3_FONT_SANS_SERIF, 400 }, { /* 5 */ "AvantGarde-BookOblique", "pagko", "pag", "URWGothicL-BookObli", "a010033l", "URWGothicL-BookObli", "AvantGarde", "URW Gothic L", "URWGothicL-BookObli", dk3font_avantgarde_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC), (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE), 400 }, { /* 6 */ "AvantGarde-Demi", "pagd", "pag", "URWGothicL-Demi", "a010015l", "URWGothicL-Demi", "AvantGarde", "URW Gothic L", "URWGothicL-Demi", dk3font_avantgarde_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_BOLD), DK3_FONT_SANS_SERIF, 600 }, { /* 7 */ "AvantGarde-DemiOblique", "pagdo", "pag", "URWGothicL-DemiObli", "a010035l", "URWGothicL-DemiObli", "AvantGarde", "URW Gothic L", "URWGothicL-DemiObli", dk3font_avantgarde_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE), 600 }, { /* 8 */ "Bookman-Light", "pbkl", "pbk", "URWBookmanL-Ligh", "b018012l", "URWBookmanL-Ligh", "Bookman", "URW Bookman L", "URWBookmanL-Ligh", dk3font_bookman_light_family_names, DK3_FONT_ROMAN, DK3_FONT_ROMAN, 400 }, { /* 9 */ "Bookman-LightItalic", "pbkli", "pbk", "URWBookmanL-LighItal", "b018032l", "URWBookmanL-LighItal", "Bookman", "URW Bookman L", "URWBookmanL-LighItal", dk3font_bookman_light_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 400 }, { /* 10 */ "Bookman-Demi", "pbkd", "pbk", "URWBookmanL-DemiBold", /* 2.2.22: URWBookmanL-Demi */ "b018015l", "URWBookmanL-DemiBold", "Bookman", "URW Bookman L", "URWBookmanL-DemiBold", dk3font_bookman_light_family_names, (DK3_FONT_ROMAN | DK3_FONT_BOLD), DK3_FONT_ROMAN, 600 }, { /* 11 */ "Bookman-DemiItalic", "pbkdi", "pbk", "URWBookmanL-DemiBoldItal", /* 2.2.22: URWBookmanL-DemiItal */ "b018035l", "URWBookmanL-DemiBoldItal", "Bookman", "URW Bookman L", "URWBookmanL-DemiBoldItal", dk3font_bookman_light_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 600 }, { /* 12 */ "Courier", "pcrr", "pcr", "NimbusMonL-Regu", "n022003l", "NimbusMonL-Regu", "Courier", "Nimbus Mono L", "NimbusMonL-Regu", dk3font_courier_family_names, DK3_FONT_TYPEWRITER, DK3_FONT_TYPEWRITER, 400 }, { /* 13 */ "Courier-Oblique", "pcrro", "pcr", "NimbusMonL-ReguObli", "n022023l", "NimbusMonL-ReguObli", "Courier", "Nimbus Mono L", "NimbusMonL-ReguObli", dk3font_courier_family_names, (DK3_FONT_TYPEWRITER | DK3_FONT_ITALIC), (DK3_FONT_TYPEWRITER | DK3_FONT_OBLIQUE), 400 }, { /* 14 */ "Courier-Bold", "pcrb", "pcr", "NimbusMonL-Bold", "n022004l", "NimbusMonL-Bold", "Courier", "Nimbus Mono L", "NimbusMonL-Bold", dk3font_courier_family_names, (DK3_FONT_TYPEWRITER | DK3_FONT_BOLD), DK3_FONT_TYPEWRITER, 700 }, { /* 15 */ "Courier-BoldOblique", "pcrbo", "pcr", "NimbusMonL-BoldObli", "n022024l", "NimbusMonL-BoldObli", "Courier", "Nimbus Mono L", "NimbusMonL-BoldObli", dk3font_courier_family_names, (DK3_FONT_TYPEWRITER | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_TYPEWRITER | DK3_FONT_OBLIQUE), 700 }, { /* 16 */ "Helvetica", "phvr", "phv", "NimbusSanL-Regu", "n019003l", "NimbusSanL-Regu", "Helvetica", "Nimbus Sans L", "NimbusSansL-Regu", dk3font_helvetica_family_names, DK3_FONT_SANS_SERIF, DK3_FONT_SANS_SERIF, 400 }, { /* 17 */ "Helvetica-Oblique", "phvro", "phv", "NimbusSanL-ReguItal", "n019023l", "NimbusSanL-ReguItal", "Helvetica", "Nimbus Sans L", "NimbusSanL-ReguItal", dk3font_helvetica_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE), (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC), 400 }, { /* 18 */ "Helvetica-Bold", "phvb", "phv", "NimbusSanL-Bold", "n019004l", "NimbusSanL-Bold", "Helvetica", "Nimbus Sans L", "NimbusSanL-Bold", dk3font_helvetica_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_BOLD), DK3_FONT_SANS_SERIF, 700 }, { /* 19 */ "Helvetica-BoldOblique", "phvbo", "phv", "NimbusSanL-BoldItal", "n019024l", "NimbusSanL-BoldItal", "Helvetica", "Nimbus Sans L", "NimbusSanL-BoldItal", dk3font_helvetica_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE | DK3_FONT_BOLD), (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC), 700 }, { /* 20 */ "Helvetica-Narrow", "phvrrn", "phv", "NimbusSanL-ReguCond", "n019043l", "NimbusSanL-ReguCond", "Helvetica Narrow", "Nimbus Sans L", "NimbusSanL-ReguCond", dk3font_helvetica_narrow_family_names, DK3_FONT_SANS_SERIF, DK3_FONT_SANS_SERIF, 400 }, { /* 21 */ "Helvetica-Narrow-Oblique", "phvron", "phv", "NimbusSanL-ReguCondItal", "n019063l", "NimbusSanL-ReguCondItal", "Helvetica Narrow", "Nimbus Sans L", "NimbusSanL-ReguCondItal", dk3font_helvetica_narrow_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE), (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC), 400 }, { /* 22 */ "Helvetica-Narrow-Bold", "phvbrn", "phv", "NimbusSanL-BoldCond", "n019044l", "NimbusSanL-BoldCond", "Helvetica Narrow", "Nimbus Sans L", "NimbusSanL-BoldCond", dk3font_helvetica_narrow_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_BOLD), DK3_FONT_SANS_SERIF, 700 }, { /* 23 */ "Helvetica-Narrow-BoldOblique", "phvbon", "phv", "NimbusSanL-BoldCondItal", "n019064l", "NimbusSanL-BoldCondItal", "Helvetica Narrow", "Nimbus Sans L", "NimbusSanL-BoldCondItal", dk3font_helvetica_narrow_family_names, (DK3_FONT_SANS_SERIF | DK3_FONT_OBLIQUE | DK3_FONT_BOLD), (DK3_FONT_SANS_SERIF | DK3_FONT_ITALIC), 700 }, { /* 24 */ "NewCenturySchlbk-Roman", "pncr", "pnc", "CenturySchL-Roma", "c059013l", "CenturySchL-Roma", "New Century Schoolbook", "Century Schoolbook L", "CenturySchL-Roma", dk3font_ncschoolbook_family_names, DK3_FONT_ROMAN, DK3_FONT_ROMAN, 400 }, { /* 25 */ "NewCenturySchlbk-Italic", "pncri", "pnc", "CenturySchL-RomaItal", "c059033l", "CenturySchL-Ital", "New Century Schoolbook", "Century Schoolbook L", "CenturySchL-Ital", dk3font_ncschoolbook_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 400 }, { /* 26 */ "NewCenturySchlbk-Bold", "pncb", "pnc", "CenturySchL-Bold", "c059016l", "CenturySchL-Bold", "New Century Schoolbook", "Century Schoolbook L", "CenturySchL-Bold", dk3font_ncschoolbook_family_names, (DK3_FONT_ROMAN | DK3_FONT_BOLD), DK3_FONT_ROMAN, 700 }, { /* 27 */ "NewCenturySchlbk-BoldItalic", "pncbi", "pnc", "CenturySchL-BoldItal", "c059036l", "CenturySchL-BoldItal", "New Century Schoolbook", "Century Schoolbook L", "CenturySchL-BoldItal", dk3font_ncschoolbook_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 700 }, { /* 28 */ "Palatino-Roman", "pplr", "ppl", "URWPalladioL-Roma", "p052003l", "URWPalladioL-Roma", "Palatino", "URW Palladio L", "URWPalladioL-Roma", dk3font_palatino_family_names, DK3_FONT_ROMAN, DK3_FONT_ROMAN, 400 }, { /* 29 */ "Palatino-Italic", "pplri", "ppl", "URWPalladioL-Ital", "p052023l", "URWPalladioL-Ital", "Palatino", "URW Palladio L", "URWPalladioL-Ital", dk3font_palatino_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 400 }, { /* 30 */ "Palatino-Bold", "pplb", "ppl", "URWPalladioL-Bold", "p052004l", "URWPalladioL-Bold", "Palatino", "URW Palladio L", "URWPalladioL-Bold", dk3font_palatino_family_names, (DK3_FONT_ROMAN | DK3_FONT_BOLD), DK3_FONT_ROMAN, 700 }, { /* 31 */ "Palatino-BoldItalic", "pplbi", "ppl", "URWPalladioL-BoldItal", "p052024l", "URWPalladioL-BoldItal", "Palatino", "URW Palladio L", "URWPalladioL-BoldItal", dk3font_palatino_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC | DK3_FONT_BOLD), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 700 }, { /* 32 */ "Symbol", "psyr", "psy", "StandardSymL", "s050000l", "StandardSymL", "Symbol", "Standard Symbols L", "StandardSymL", dk3font_symbol_family_names, 0, 0, 400 }, { /* 33 */ "ZapfChancery-MediumItalic", "pzcmi", "pzc", "URWChanceryL-MediItal", "z003034l", "URWChanceryL-MediItal", "Zapf Chancery", "URW Chancery L", "URWChanceryL-MediItal", dk3font_zapfchancery_family_names, (DK3_FONT_ROMAN | DK3_FONT_ITALIC), (DK3_FONT_ROMAN | DK3_FONT_ITALIC), 500 }, { /* 34 */ "ZapfDingbats", "pzdr", "pzd", "Dingbats", "d050000l", "Dingbats", "DingBats", "Dingbats", "Dingbats", dk3font_zapfdingbats_family_names, 0, 0, 400 } }; /** Preference names to search for GhostScript font files. */ static dkChar const * const dk3font_base_pref_names[] = { dkT("/fonts/ghostscript/web"), dkT("/fonts/ghostscript/local"), NULL }; char const * dk3font_get_ps_font_name(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].psFontName; } return back; } char const * dk3font_get_gs_font_name(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].gsFontName; } return back; } char const * dk3font_get_tex_font_name(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].texFontName; } return back; } char const * dk3font_get_tex_family_name(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].texFamilyName; } return back; } char const * dk3font_get_gs_old_file(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].gsFileOld; } return back; } char const * dk3font_get_gs_new_file(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].gsFileNew; } return back; } int dk3font_get_features(int fontno) { int back = 0; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].features; } return back; } int dk3font_get_svg_features(int fontno) { int back = 0; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].svgFeatures; } return back; } char const * dk3font_get_ps_family(int fontno) { char const *back = NULL; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].psFamilyName; } return back; } char const * dk3font_get_svg_family(int fontno) { char const *back = NULL; $? "+ dk3font_get_svg_family" if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].svgFamilyName; } $? "- dk3font_get_svg_family %s", TR_STR(back) return back; } char const * dk3font_get_svg_fontid(int fontno) { char const *back = NULL; $? "+ dk3font_get_svg_fontid" if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].svgFontId; } $? "- dk3font_get_svg_fontid %s", TR_STR(back) return back; } int dk3font_get_svg_font_weight(int fontno) { int back = 0; if((fontno >= 0) && (fontno < 35)) { back = dk3font_data[fontno].svgFontWeight; } return back; } int dk3font_gs_base_web(dk3_app_t *app, dkChar *buf, size_t bs) { int back; back = dk3app_get_dir_from_pref(app, dk3font_base_pref_names[0], buf, bs, 0); return back; } int dk3font_gs_base_local(dk3_app_t *app, dkChar *buf, size_t bs) { int back; back = dk3app_get_dir_from_pref(app, dk3font_base_pref_names[1], buf, bs, 1); return back; } char const * const * dk3font_get_replacement_families(int fontno) { char const * const *back = NULL; if((0 <= fontno) && (fontno < 35)) { back = dk3font_data[fontno].replacements; } return back; }