diff options
Diffstat (limited to 'Master/texmf-dist/doc/context/context-omega/font_install_unicode.pl')
-rw-r--r-- | Master/texmf-dist/doc/context/context-omega/font_install_unicode.pl | 600 |
1 files changed, 600 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/context/context-omega/font_install_unicode.pl b/Master/texmf-dist/doc/context/context-omega/font_install_unicode.pl new file mode 100644 index 00000000000..2b0fa5afa8e --- /dev/null +++ b/Master/texmf-dist/doc/context/context-omega/font_install_unicode.pl @@ -0,0 +1,600 @@ +#! perl -w +use strict; +$|++; + +use constant TRUE => (0==0); +use constant FALSE => (0==1); +use Cwd; + +use constant DEBUG => 1; + +## +## Recherche de fichiers *.ttf dans le répertoire courrant +## + +print STDERR "Looking for TTF fonts in the current directory\n" if DEBUG; +opendir(ROOT_DIR, '.') || die "Cannot read cirrent directory: $!"; +while(my $file = readdir(ROOT_DIR)){ + next unless $file =~ m/\.tt[fc]$/i; + print STDERR " Found font $file\n" if DEBUG; + process_font($file); +} +closedir(ROOT_DIR); +print STDERR "Finished looking for TTF fonts in the current directory\n" if DEBUG; +print STDERR "Look in the various directories that have been created. +You will find sample files (*.tex, which you can compile with latex +resp. lambda, *.dvi, which you may view and convert to Postscript with +xdvi and dvips, resp. oxdvi and odvips, *.ps which you may view with +Ghostview or print. +You will also find a `Makefile' file, that should install +the various files where they belong to (but you had better check +it before using it).\n\n"; + +## +## Trouve le nom complet de la fonte +## + +sub get_font_name { + my $file = shift; + my $result = $file; + $result =~ s/\.tt[fc]$//; + + open(AFM, "ttf2afm $file|") || die "Cannot run `ttf2afm $file': $!"; + while(<AFM>){ + if(m/^FontName\s+(.*)/){ + $result = $1; + print STDERR " Font $file has name $result\n" if DEBUG; + last; + } + } + close AFM; + + return $result; +} + +## +## Crée quelques fichiers +## + +sub create_file_from_script { + my ($file, $function, $before, $after) = @_; + print STDERR " Creating file $file\n" if DEBUG; + open(F, '>', $file) || die "cannot open $file for writing: $!"; + my $a = &$function; + $a =~ s/$before/$after/g; + print F $a; + close(F); +} + +sub create_a_few_files { + my $font = shift; + my @a = ('cyberb', $font); + create_file_from_script("Unicode.sfd", \&print_unicode_sdf, @a); + create_file_from_script("utf8_cjk.tex", \&print_utf8_cjk_tex, @a); + create_file_from_script("c70$font.fd", \&print_c70song_fd, @a); + create_file_from_script("utf8_omega.tex", \&print_utf8_omega_tex, @a); + create_file_from_script("Makefile", \&print_makefile, @a); +} + +## +## Traitement d'un fichier TTF +## + +sub process_font { + my $file = shift; + + my $basename = $file; + $basename =~ s/\.ttf$//i; + + my $font = get_font_name($file); + my $latex_font_name = $font; + $latex_font_name =~ s/[^a-zA-Z0-9]//g; + $latex_font_name =~ y/A-Z/a-z/; + + print STDERR " Processing font $font ($latex_font_name) in file $file\n" + if DEBUG; + my $rep = "0_tmp_$basename"; + mkdir $rep || die "Cannot mkdir $rep: $!"; + my $olddir = cwd; + chdir $rep || die "Cannot chdir to $rep: $!"; + symlink("../$file", "./$file"); + create_a_few_files($latex_font_name); + + print STDERR " Creating TeX metrics *.tfm with ttf2tfm\n" if DEBUG; + open(TTF2TFM, "ttf2tfm $file $latex_font_name\@Unicode\@|") || + die "Cannot run ttf2tfm: $!"; + my $last; + while(<TTF2TFM>){ + $last = $_; + } + close TTF2TFM; + print STDERR " Adding the following line to ttfonts.map\n" if DEBUG; + print STDERR " $last" if DEBUG; + open(TTFONTS_MAP, '>', "ttfonts.map") || + die "Cannot open ttfonts.map for writing: $!"; + print TTFONTS_MAP $last; + close TTFONTS_MAP; + + print STDERR " Precompiling the bitmaps at 10 and 12 points + These are the files, containing the actual picture of the + characters, used by dvips and xdvi. + They are automatically created by dvips or xdvi when + needed, but as it takes some time, it is better to precompute + them. You should go and get some coffee.\n" if DEBUG; + opendir(DIR, ".") || die "Cannot open current directory: $!"; + while(my $f = readdir(DIR)){ + next unless $f =~ s/\.tfm$//; + system("ttf2pk", "-q", $f, "720"); + system("ttf2pk", "-q", $f, "600"); + } + closedir(DIR); + print STDERR " Finished precompiling the bitmaps\n" if DEBUG; + + print STDERR " Compiling a sample file with LaTeX+CJK + You should be able to view the result with + xdvi utf8_cjk.dvi + or + gv utf8_cjk.ps + The code is in the utf8_cjk.tex: to use LaTeX with CJK, + you just have to adapt it.\n" if DEBUG; + system(qw/latex --interaction=batchmode utf8_cjk.tex/); + system(qw/dvips -E -o utf8_cjk.ps utf8_cjk.dvi/); + print STDERR " Finished compiling a sample file with LaTeX+CJK\n" if DEBUG; + +## +## Omega +## + + print STDERR " So far, you may use the $font font with LaTeX+CJK\n" if DEBUG; + print STDERR " We shall now install the font for use under Omega\n" if DEBUG; + + print STDERR " Making *.pl files from *.tfm files. + These file contain exactly the same thing, but + the former is human-readable\n" if DEBUG; + opendir(DIR, "."); + while(my $f = readdir(DIR)){ + next unless $f =~ s/\.tfm$//; + system("tftopl", "$f.tfm", "$f.pl"); + } + closedir(DIR); + + print STDERR " Creating *.ovp file\n" if DEBUG; + my $data = ""; + my $def = ""; + my $head = "(VTITLE '$font' Omega font) +(OFMLEVEL H 1) +(FAMILY om". substr($latex_font_name, 0, 16) .") +(FACE F MRR) +(SEVENBITSAFEFLAG TRUE)"; + my $head_done = FALSE; + + # Lecture des 255 fichiers + # $i : numéro de la sous-fonte (il y a des trous dans cette manière de compter) + # $n : idem, sans trous + my $n = 0; + my $n_hex = sprintf("%02x", $n); + for(my $i=0; $i<255; $i++){ + + # On essaye d'ouvrir la sous-fonte + my $i_hex = sprintf("%02x", $i); + unless( open(PL, '<', "$latex_font_name$i_hex.pl") ){ + print STDERR " skipping $latex_font_name$i_hex.pl: $!\n" + if DEBUG; + next; + } + local $/; + my $pl = <PL>; + + # Si le fichier est là, on l'indique + $def .= "(MAPFONT D $n + (FONTNAME $latex_font_name$i_hex) + (FONTAT R 1.0) + (FONTDSIZE R 10.0) + )\n"; + + # Si c'est la première fois, on termine de construire l'en-tête + unless($head_done){ + if( $pl =~ m/^(\(CODINGSCHEME.*?\))/m ){ + my $a = "$1\n"; + if( $pl =~ m/^(\(DESIGNSIZE.*?\))/m ){ + $a .= "$1\n"; + if( $pl =~ m/^(\(FONTDIMEN.*?^\s*\))/sm ){ + $a .= "$1\n"; + $head_done = TRUE; + $head .= $a; + } + } + } + } + + $data .= "(COMMENT Begin om$latex_font_name$i_hex)\n"; + + # On regarde les caractères un par un + while( $pl =~ s/^\(CHARACTER ([OC]) ([^\s]+)(.*?)^\s*\)//sm ){ + my($type, $value, $parameters) = ($1, $2, $3); + + # Quel est le numéro (hexadécimal, unicode) du caractère ? + my $decimal; + if( $type eq "O" ){ $decimal = oct($value) } + else{ $decimal = ord($value) } + my $octal = sprintf("%o", $decimal); + my $hex = $i_hex . sprintf("%02x", $decimal); + + $data .= "(CHARACTER H $hex$parameters (MAP + (SELECTFONT D $n) + (SETCHAR $type $value) + ) + )\n"; + } + + $n++; + $n_hex = sprintf("%02x", $n); + } + + open(OVP, '>', "om$latex_font_name.ovp") || + die "Cannot open om$latex_font_name.ovp for writing"; + print OVP $head; + print OVP $def; + print OVP $data; + close OVP; + + print STDERR " Creating om$latex_font_name.ovf from om$latex_font_name.ovp\n" if DEBUG; + system("ovp2ovf om$latex_font_name"); + + print STDERR " Compiling sample file\n" if DEBUG; + system(qw/lambda utf8_omega.tex/); + system(qw/odvips -o utf8_omega.ps utf8_omega.dvi/); + + chdir $olddir || die "Cannot chdir back to $olddir"; + print STDERR " Finished processing font $font in file $file\n" if DEBUG; + print STDERR " There is a `Makefile' file in the directory. + You should check it if you want to use or install the font.\n" if DEBUG; +} + +###################################################################### + +## +## Fichiers +## + +sub print_utf8_cjk_tex { + '\documentclass[12pt]{article} +\usepackage{CJK} +\usepackage[T1]{fontenc} +% we want the Unicode font for normal text also +\DeclareFontFamily{T1}{cyberb}{} +\DeclareFontShape{T1}{cyberb}{m}{n}{<-> cyberb00}{} +\renewcommand\rmdefault{cyberb} +\pagestyle{empty} +\begin{document} +\begin{CJK}{UTF8}{cyberb} + Du texte accentué, en français. + + これは日本語でのサンプル文章です。 +\end{CJK} +\end{document}'; +} + +sub print_utf8_omega_tex { + '\ocp\TexUTF=inutf8 +\InputTranslation currentfile \TexUTF +\documentclass[12pt]{article} +\usepackage[T1]{fontenc} +\DeclareFontFamily{T1}{cyberb}{} +\DeclareFontShape{T1}{cyberb}{m}{n}{<-> omcyberb}{} +\def\cyberb{\fontfamily{cyberb}\selectfont} +\pagestyle{empty} +\begin{document} + Du texte accentué, en français. +\begin{cyberb} + これは日本語でのサンプル文章です。 +\end{cyberb} +\end{document}'; +} + +sub print_unicode_sdf { + '# Unicode.sfd +# +# subfont numbers for Unicode encoding and its corresponding code ranges +# to be used with the CJK package for LaTeX. + +00 0x0_0xFF +01 0x100_0x1FF +02 0x200_0x2FF +03 0x300_0x3FF +04 0x400_0x4FF +05 0x500_0x5FF +06 0x600_0x6FF +07 0x700_0x7FF +08 0x800_0x8FF +09 0x900_0x9FF +0a 0xA00_0xAFF +0b 0xB00_0xBFF +0c 0xC00_0xCFF +0d 0xD00_0xDFF +0e 0xE00_0xEFF +0f 0xF00_0xFFF +10 0x1000_0x10FF +11 0x1100_0x11FF +12 0x1200_0x12FF +13 0x1300_0x13FF +14 0x1400_0x14FF +15 0x1500_0x15FF +16 0x1600_0x16FF +17 0x1700_0x17FF +18 0x1800_0x18FF +19 0x1900_0x19FF +1a 0x1A00_0x1AFF +1b 0x1B00_0x1BFF +1c 0x1C00_0x1CFF +1d 0x1D00_0x1DFF +1e 0x1E00_0x1EFF +1f 0x1F00_0x1FFF +20 0x2000_0x20FF +21 0x2100_0x21FF +22 0x2200_0x22FF +23 0x2300_0x23FF +24 0x2400_0x24FF +25 0x2500_0x25FF +26 0x2600_0x26FF +27 0x2700_0x27FF +28 0x2800_0x28FF +29 0x2900_0x29FF +2a 0x2A00_0x2AFF +2b 0x2B00_0x2BFF +2c 0x2C00_0x2CFF +2d 0x2D00_0x2DFF +2e 0x2E00_0x2EFF +2f 0x2F00_0x2FFF +30 0x3000_0x30FF +31 0x3100_0x31FF +32 0x3200_0x32FF +33 0x3300_0x33FF +34 0x3400_0x34FF +35 0x3500_0x35FF +36 0x3600_0x36FF +37 0x3700_0x37FF +38 0x3800_0x38FF +39 0x3900_0x39FF +3a 0x3A00_0x3AFF +3b 0x3B00_0x3BFF +3c 0x3C00_0x3CFF +3d 0x3D00_0x3DFF +3e 0x3E00_0x3EFF +3f 0x3F00_0x3FFF +40 0x4000_0x40FF +41 0x4100_0x41FF +42 0x4200_0x42FF +43 0x4300_0x43FF +44 0x4400_0x44FF +45 0x4500_0x45FF +46 0x4600_0x46FF +47 0x4700_0x47FF +48 0x4800_0x48FF +49 0x4900_0x49FF +4a 0x4A00_0x4AFF +4b 0x4B00_0x4BFF +4c 0x4C00_0x4CFF +4d 0x4D00_0x4DFF +4e 0x4E00_0x4EFF +4f 0x4F00_0x4FFF +50 0x5000_0x50FF +51 0x5100_0x51FF +52 0x5200_0x52FF +53 0x5300_0x53FF +54 0x5400_0x54FF +55 0x5500_0x55FF +56 0x5600_0x56FF +57 0x5700_0x57FF +58 0x5800_0x58FF +59 0x5900_0x59FF +5a 0x5A00_0x5AFF +5b 0x5B00_0x5BFF +5c 0x5C00_0x5CFF +5d 0x5D00_0x5DFF +5e 0x5E00_0x5EFF +5f 0x5F00_0x5FFF +60 0x6000_0x60FF +61 0x6100_0x61FF +62 0x6200_0x62FF +63 0x6300_0x63FF +64 0x6400_0x64FF +65 0x6500_0x65FF +66 0x6600_0x66FF +67 0x6700_0x67FF +68 0x6800_0x68FF +69 0x6900_0x69FF +6a 0x6A00_0x6AFF +6b 0x6B00_0x6BFF +6c 0x6C00_0x6CFF +6d 0x6D00_0x6DFF +6e 0x6E00_0x6EFF +6f 0x6F00_0x6FFF +70 0x7000_0x70FF +71 0x7100_0x71FF +72 0x7200_0x72FF +73 0x7300_0x73FF +74 0x7400_0x74FF +75 0x7500_0x75FF +76 0x7600_0x76FF +77 0x7700_0x77FF +78 0x7800_0x78FF +79 0x7900_0x79FF +7a 0x7A00_0x7AFF +7b 0x7B00_0x7BFF +7c 0x7C00_0x7CFF +7d 0x7D00_0x7DFF +7e 0x7E00_0x7EFF +7f 0x7F00_0x7FFF +80 0x8000_0x80FF +81 0x8100_0x81FF +82 0x8200_0x82FF +83 0x8300_0x83FF +84 0x8400_0x84FF +85 0x8500_0x85FF +86 0x8600_0x86FF +87 0x8700_0x87FF +88 0x8800_0x88FF +89 0x8900_0x89FF +8a 0x8A00_0x8AFF +8b 0x8B00_0x8BFF +8c 0x8C00_0x8CFF +8d 0x8D00_0x8DFF +8e 0x8E00_0x8EFF +8f 0x8F00_0x8FFF +90 0x9000_0x90FF +91 0x9100_0x91FF +92 0x9200_0x92FF +93 0x9300_0x93FF +94 0x9400_0x94FF +95 0x9500_0x95FF +96 0x9600_0x96FF +97 0x9700_0x97FF +98 0x9800_0x98FF +99 0x9900_0x99FF +9a 0x9A00_0x9AFF +9b 0x9B00_0x9BFF +9c 0x9C00_0x9CFF +9d 0x9D00_0x9DFF +9e 0x9E00_0x9EFF +9f 0x9F00_0x9FFF +a0 0xA000_0xA0FF +a1 0xA100_0xA1FF +a2 0xA200_0xA2FF +a3 0xA300_0xA3FF +a4 0xA400_0xA4FF +a5 0xA500_0xA5FF +a6 0xA600_0xA6FF +a7 0xA700_0xA7FF +a8 0xA800_0xA8FF +a9 0xA900_0xA9FF +aa 0xAA00_0xAAFF +ab 0xAB00_0xABFF +ac 0xAC00_0xACFF +ad 0xAD00_0xADFF +ae 0xAE00_0xAEFF +af 0xAF00_0xAFFF +b0 0xB000_0xB0FF +b1 0xB100_0xB1FF +b2 0xB200_0xB2FF +b3 0xB300_0xB3FF +b4 0xB400_0xB4FF +b5 0xB500_0xB5FF +b6 0xB600_0xB6FF +b7 0xB700_0xB7FF +b8 0xB800_0xB8FF +b9 0xB900_0xB9FF +ba 0xBA00_0xBAFF +bb 0xBB00_0xBBFF +bc 0xBC00_0xBCFF +bd 0xBD00_0xBDFF +be 0xBE00_0xBEFF +bf 0xBF00_0xBFFF +c0 0xC000_0xC0FF +c1 0xC100_0xC1FF +c2 0xC200_0xC2FF +c3 0xC300_0xC3FF +c4 0xC400_0xC4FF +c5 0xC500_0xC5FF +c6 0xC600_0xC6FF +c7 0xC700_0xC7FF +c8 0xC800_0xC8FF +c9 0xC900_0xC9FF +ca 0xCA00_0xCAFF +cb 0xCB00_0xCBFF +cc 0xCC00_0xCCFF +cd 0xCD00_0xCDFF +ce 0xCE00_0xCEFF +cf 0xCF00_0xCFFF +d0 0xD000_0xD0FF +d1 0xD100_0xD1FF +d2 0xD200_0xD2FF +d3 0xD300_0xD3FF +d4 0xD400_0xD4FF +d5 0xD500_0xD5FF +d6 0xD600_0xD6FF +d7 0xD700_0xD7FF +# Surrogates +# +# d8 0xD800_0xD8FF +# d9 0xD900_0xD9FF +# da 0xDA00_0xDAFF +# db 0xDB00_0xDBFF +dc 0xDC00_0xDCFF +dd 0xDD00_0xDDFF +de 0xDE00_0xDEFF +df 0xDF00_0xDFFF +e0 0xE000_0xE0FF +e1 0xE100_0xE1FF +e2 0xE200_0xE2FF +e3 0xE300_0xE3FF +e4 0xE400_0xE4FF +e5 0xE500_0xE5FF +e6 0xE600_0xE6FF +e7 0xE700_0xE7FF +e8 0xE800_0xE8FF +e9 0xE900_0xE9FF +ea 0xEA00_0xEAFF +eb 0xEB00_0xEBFF +ec 0xEC00_0xECFF +ed 0xED00_0xEDFF +ee 0xEE00_0xEEFF +ef 0xEF00_0xEFFF +f0 0xF000_0xF0FF +f1 0xF100_0xF1FF +f2 0xF200_0xF2FF +f3 0xF300_0xF3FF +f4 0xF400_0xF4FF +f5 0xF500_0xF5FF +f6 0xF600_0xF6FF +f7 0xF700_0xF7FF +f8 0xF800_0xF8FF +f9 0xF900_0xF9FF +fa 0xFA00_0xFAFF +fb 0xFB00_0xFBFF +fc 0xFC00_0xFCFF +fd 0xFD00_0xFDFF +fe 0xFE00_0xFEFF +ff 0xFF00_0xFFFF + +# eof'; +} + +sub print_c70song_fd { + '\ProvidesFile{c70cyberb.fd} +% character set: Unicode U+0080 - U+FFFD +% font encoding: Unicode + +\DeclareFontFamily{C70}{cyberb}{\hyphenchar \font\m@ne} +\DeclareFontShape{C70}{cyberb}{m}{n}{<-> CJK * cyberb}{} +\DeclareFontShape{C70}{cyberb}{bx}{n}{<-> CJKb * cyberb}{\CJKbold} + +\endinput'; +} + +sub print_makefile { + 'all: + latex utf8_cjk.tex + -xdvi utf8_cjk.dvi + dvips -E -o utf8_cjk.ps utf8_cjk.dvi + gv utf8_cjk.ps + lambda utf8_omega.tex + -oxdvi utf8_omega.dvi + odvips -o utf8_omega.ps utf8_omega.dvi + gv utf8_omega.ps + +install: + TEXMF=/usr/local/lib/texmf + mkdir $TEXMF/fonts/tfm/font_install_unicode + cp *.tfm $TEXMF/fonts/tfm/font_install_unicode/ + mkdir $TEXMF/tex/generic/font_install_unicode + cp *.fd $TEXMF/tex/generic/font_install_unicode/ + cp -H *.ttf $TEXMF/tex/fonts/truetype/ + cp ttfonts.map $TEXMF/tex/fonts/truetype/cyberb.map + cat ttfonts.map >> $TEXMF/tex/fonts/truetype/ttfonts.map + mkdir $TEXMF/fonts/ofm/public/font_install_unicode + cp *.ofm $TEXMF/fonts/ofm/public/font_install_unicode/ + mkdir $TEXMF/fonts/ovp/public/font_install_unicode + cp *.ovp $TEXMF/fonts/ovp/public/font_install_unicode/ +'; +} |