%% options copyright owner = Dirk Krause copyright year = 2016-xxxx license = bsd %% header /** Font numbers the module can handle. */ typedef enum { DK4_FONT_TIMES_ROMAN = 0, DK4_FONT_TIMES_ITALIC , DK4_FONT_TIMES_BOLD , DK4_FONT_TIMES_BOLD_ITALIC , DK4_FONT_AVANTGARDE_BOOK , DK4_FONT_AVANTGARDE_BOOK_OBLIQUE , DK4_FONT_AVANTGARDE_DEMI , DK4_FONT_AVANTGARDE_DEMI_OBLIQUE , DK4_FONT_BOOKMAN_LIGHT , DK4_FONT_BOOKMAN_LIGHT_ITALIC , DK4_FONT_BOOKMAN_DEMI , DK4_FONT_BOOKMAN_DEMI_ITALIC , DK4_FONT_COURIER , DK4_FONT_COURIER_OBLIQUE , DK4_FONT_COURIER_BOLD , DK4_FONT_COURIER_BOLD_OBLIQUE , DK4_FONT_HELVETICA , DK4_FONT_HELVETICA_OBLIQUE , DK4_FONT_HELVETICA_BOLD , DK4_FONT_HELVETICA_BOLD_OBLIQUE , DK4_FONT_HELVETICA_NARROW , DK4_FONT_HELVETICA_NARROW_OBLIQUE , DK4_FONT_HELVETICA_NARROW_BOLD , DK4_FONT_HELVETICA_NARROW_BOLD_OBLIQUE , DK4_FONT_NEW_CENTURY_SCHOOLBOOK_ROMAN , DK4_FONT_NEW_CENTURY_SCHOOLBOOK_ITALIC , DK4_FONT_NEW_CENTURY_SCHOOLBOOK_BOLD , DK4_FONT_NEW_CENTURY_SCHOOLBOOK_BOLD_ITALIC , DK4_FONT_PALATINO_ROMAN , DK4_FONT_PALATINO_ITALIC , DK4_FONT_PALATINO_BOLD , DK4_FONT_PALATINO_BOLD_ITALIC , DK4_FONT_SYMBOL , DK4_FONT_ZAPF_CHANCERY , DK4_FONT_ZAPF_DINGBATS , /* We might want to add further LaTeX fonts here but no PS font name is available for fonts after this point. Remember to add corresponding entries to the dk4font_tex_family_names, dk4font_tex_names and dk4font_features arrays in the module section. Order of fonts here must correspond to the order of information in these arrays! */ /* Finally we set some constants for comparisons. */ DK4_FONT_PS_MAX = DK4_FONT_ZAPF_DINGBATS, /**< Maximum for PS. */ DK4_FONT_MAX = DK4_FONT_ZAPF_DINGBATS /**< Maximum value. */ } dk4_font_number_t; /** Font features. */ enum { DK4_FONT_FEATURE_SANS_SERIF = 1, /**< Sans-serif font. */ DK4_FONT_FEATURE_TTY = 2, /**< Typewriter style font. */ DK4_FONT_FEATURE_SYMBOL = 3, /**< Symbol font. */ DK4_FONT_FEATURE_BOLD = 4, /**< Bold font. */ DK4_FONT_FEATURE_ITALIC = 8, /**< Italic font. */ DK4_FONT_FEATURE_OBLIQUE = 16, /**< Oblique font. */ DK4_FONT_FEATURE_NARROW = 32, /**< Narrow or condensed font. */ DK4_FONT_FEATURE_FT_MASK = 3, /**< Mask to retrieve sf or tty. */ DK4_FONT_FEATURE_ITOB_MASK = 24, /**< Mask for italic or oblique. */ }; #ifdef __cplusplus extern "C" { #endif /** Retrieve font name (without leading slash) for a PS font. @param fno Font number. @return Valid pointer on success (fno refers to a PS font), NULL otherwise. */ const char * dk4font_get_ps_name(dk4_font_number_t fno); /** Retrieve LaTeX font family name for a font. @param fno Font number. @return Valid pointer on success, NULL on error. */ const char * dk4font_get_latex_family_name(dk4_font_number_t fno); /** Retrieve LaTeX font name for a font. @param fno Font number. @return Valid pointer on success, NULL on error. */ const char * dk4font_get_latex_font_name(dk4_font_number_t fno); /** Retrieve font feature set for a font. @param fno Font number. @return Font feature set. */ int dk4font_get_features(dk4_font_number_t fno); #ifdef __cplusplus } #endif /* vim: set ai sw=4 ts=4 : */ %% module #include "dk4font.h" #include #if DK4_HAVE_STDLIB_H #include #endif #if DK4_HAVE_UNISTD_H #include #endif $!trace-include static const char * const dk4font_ps_names[] = { $!string-table Times-Roman Times-Italic Times-Bold Times-BoldItalic AvantGarde-Book AvantGarde-BookOblique AvantGarde-Demi AvantGarde-DemiOblique Bookman-Light Bookman-LightItalic Bookman-Demi Bookman-DemiItalic Courier Courier-Oblique Courier-Bold Courier-BoldOblique Helvetica Helvetica-Oblique Helvetica-Bold Helvetica-BoldOblique Helvetica-Narrow Helvetica-Narrow-Oblique Helvetica-Narrow-Bold Helvetica-Narrow-BoldOblique NewCenturySchlbk-Roman NewCenturySchlbk-Italic NewCenturySchlbk-Bold NewCenturySchlbk-BoldItalic Palatino-Roman Palatino-Italic Palatino-Bold Palatino-BoldItalic Symbol ZapfChancery-MediumItalic ZapfDingbats $!end }; static const char * const dk4font_tex_family_names[] = { $!string-table ptm ptm ptm ptm pag pag pag pag pbk pbk pbk pbk pcr pcr pcr pcr phv phv phv phv phv phv phv phv pnc pnc pnc pnc ppl ppl ppl ppl psy pzc pzd $!end }; static const char * const dk4font_tex_names[] = { $!string-table ptmr ptmri ptmb ptmbi pagk pagko pagd pagdo pbkl pbkli pbkd pbkdi pcrr pcrro pcrb pcrbo phvr phvro phvb phvbo phvrrn phvron phvbrn phvbon pncr pncri pncb pncbi pplr pplri pplb pplbi psyr pzcmi pzdr $!end }; const int dk4font_features[] = { 0, DK4_FONT_FEATURE_ITALIC, DK4_FONT_FEATURE_BOLD, (DK4_FONT_FEATURE_ITALIC | DK4_FONT_FEATURE_BOLD), DK4_FONT_FEATURE_SANS_SERIF, (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_OBLIQUE), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE), 0, DK4_FONT_FEATURE_ITALIC, DK4_FONT_FEATURE_BOLD, (DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC), DK4_FONT_FEATURE_TTY, (DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_OBLIQUE), (DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_BOLD), (DK4_FONT_FEATURE_TTY | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE), DK4_FONT_FEATURE_SANS_SERIF, (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_OBLIQUE), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW), ( DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW | DK4_FONT_FEATURE_OBLIQUE ), (DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW | DK4_FONT_FEATURE_BOLD), ( DK4_FONT_FEATURE_SANS_SERIF | DK4_FONT_FEATURE_NARROW | DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_OBLIQUE ), 0, DK4_FONT_FEATURE_ITALIC, DK4_FONT_FEATURE_BOLD, (DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC), 0, DK4_FONT_FEATURE_ITALIC, DK4_FONT_FEATURE_BOLD, (DK4_FONT_FEATURE_BOLD | DK4_FONT_FEATURE_ITALIC), DK4_FONT_FEATURE_SYMBOL, DK4_FONT_FEATURE_ITALIC, DK4_FONT_FEATURE_SYMBOL }; const char * dk4font_get_ps_name(dk4_font_number_t fno) { if (DK4_FONT_PS_MAX >= fno) { return (dk4font_ps_names[fno]); } return NULL; } const char * dk4font_get_latex_family_name(dk4_font_number_t fno) { if (DK4_FONT_PS_MAX >= fno) { return (dk4font_tex_family_names[fno]); } return NULL; } const char * dk4font_get_latex_font_name(dk4_font_number_t fno) { if (DK4_FONT_PS_MAX >= fno) { return (dk4font_tex_names[fno]); } return NULL; } int dk4font_get_features(dk4_font_number_t fno) { if (DK4_FONT_PS_MAX >= fno) { return (dk4font_features[fno]); } return 0; } /* vim: set ai sw=4 ts=4 : */