summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/cjk-gs-integrate/cjk-gs-integrate.pl2179
l---------Master/bin/alpha-linux/cjk-gs-integrate1
l---------Master/bin/amd64-freebsd/cjk-gs-integrate1
l---------Master/bin/amd64-netbsd/cjk-gs-integrate1
l---------Master/bin/armel-linux/cjk-gs-integrate1
l---------Master/bin/armhf-linux/cjk-gs-integrate1
l---------Master/bin/i386-cygwin/cjk-gs-integrate1
l---------Master/bin/i386-freebsd/cjk-gs-integrate1
l---------Master/bin/i386-linux/cjk-gs-integrate1
l---------Master/bin/i386-netbsd/cjk-gs-integrate1
l---------Master/bin/i386-solaris/cjk-gs-integrate1
l---------Master/bin/mipsel-linux/cjk-gs-integrate1
l---------Master/bin/powerpc-linux/cjk-gs-integrate1
l---------Master/bin/sparc-solaris/cjk-gs-integrate1
l---------Master/bin/universal-darwin/cjk-gs-integrate1
-rwxr-xr-xMaster/bin/win32/cjk-gs-integrate.exebin0 -> 1536 bytes
l---------Master/bin/x86_64-cygwin/cjk-gs-integrate1
l---------Master/bin/x86_64-darwin/cjk-gs-integrate1
l---------Master/bin/x86_64-linux/cjk-gs-integrate1
l---------Master/bin/x86_64-solaris/cjk-gs-integrate1
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/ChangeLog248
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/README.md170
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/macosx-filelist45
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/Makefile12
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-CNS1.tex40
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-012.tex38
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-345.tex39
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1.tex38
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Japan1.tex40
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Korea1.tex32
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/cidtable.sty21
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/do-tests11
-rwxr-xr-xMaster/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/prn-variants.tex12
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/report4
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/otfcidsample.tex46
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/test-runner.sh96
-rw-r--r--Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/mkgsfntspecs.sh397
-rwxr-xr-xMaster/texmf-dist/doc/fonts/cjk-gs-integrate/tools/release.sh53
-rwxr-xr-xMaster/texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl2179
-rw-r--r--Master/tlpkg/tlpsrc/cjk-gs-integrate.tlpsrc0
40 files changed, 5718 insertions, 0 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/cjk-gs-integrate/cjk-gs-integrate.pl b/Build/source/texk/texlive/linked_scripts/cjk-gs-integrate/cjk-gs-integrate.pl
new file mode 100755
index 00000000000..980e41329be
--- /dev/null
+++ b/Build/source/texk/texlive/linked_scripts/cjk-gs-integrate/cjk-gs-integrate.pl
@@ -0,0 +1,2179 @@
+#!/usr/bin/env perl
+#
+# cjk-gs-integrate - setup ghostscript for CID/TTF CJK fonts
+#
+# Copyright 2015 by Norbert Preining
+#
+# Based on research and work by Yusuke Kuroki, Bruno Voisin, Munehiro Yamamoto
+# and the TeX Q&A wiki page
+#
+# This file is licensed under GPL version 3 or any later version.
+# For copyright statements see end of file.
+#
+# For development see
+# https://github.com/norbusan/cjk-gs-support
+#
+# TODO:
+# - how to deal with MacTeX pre-shipped configuration files?
+# - interoperability with updmap-config-kanji
+# - input from CK about font priorities
+#
+
+$^W = 1;
+use Getopt::Long qw(:config no_autoabbrev ignore_case_always);
+use File::Basename;
+use strict;
+
+(my $prg = basename($0)) =~ s/\.pl$//;
+my $version = '20150506.0';
+
+if (win32()) {
+ print_error("Sorry, currently not supported on Windows!\n");
+ exit(1);
+}
+
+my %encode_list = (
+ Japan => [ qw/
+ 78-EUC-H
+ 78-EUC-V
+ 78-H
+ 78-RKSJ-H
+ 78-RKSJ-V
+ 78-V
+ 78ms-RKSJ-H
+ 78ms-RKSJ-V
+ 83pv-RKSJ-H
+ 90ms-RKSJ-H
+ 90ms-RKSJ-V
+ 90msp-RKSJ-H
+ 90msp-RKSJ-V
+ 90pv-RKSJ-H
+ 90pv-RKSJ-V
+ Add-H
+ Add-RKSJ-H
+ Add-RKSJ-V
+ Add-V
+ Adobe-Japan1-0
+ Adobe-Japan1-1
+ Adobe-Japan1-2
+ Adobe-Japan1-3
+ Adobe-Japan1-4
+ Adobe-Japan1-5
+ Adobe-Japan1-6
+ EUC-H
+ EUC-V
+ Ext-H
+ Ext-RKSJ-H
+ Ext-RKSJ-V
+ Ext-V
+ H
+ Hankaku
+ Hiragana
+ Identity-H
+ Identity-V
+ Katakana
+ NWP-H
+ NWP-V
+ RKSJ-H
+ RKSJ-V
+ Roman
+ UniJIS-UCS2-H
+ UniJIS-UCS2-HW-H
+ UniJIS-UCS2-HW-V
+ UniJIS-UCS2-V
+ UniJIS-UTF16-H
+ UniJIS-UTF16-V
+ UniJIS-UTF32-H
+ UniJIS-UTF32-V
+ UniJIS-UTF8-H
+ UniJIS-UTF8-V
+ UniJIS2004-UTF16-H
+ UniJIS2004-UTF16-V
+ UniJIS2004-UTF32-H
+ UniJIS2004-UTF32-V
+ UniJIS2004-UTF8-H
+ UniJIS2004-UTF8-V
+ UniJISPro-UCS2-HW-V
+ UniJISPro-UCS2-V
+ UniJISPro-UTF8-V
+ UniJISX0213-UTF32-H
+ UniJISX0213-UTF32-V
+ UniJISX02132004-UTF32-H
+ UniJISX02132004-UTF32-V
+ V
+ WP-Symbol/ ],
+ GB => [ qw/
+ Adobe-GB1-0
+ Adobe-GB1-1
+ Adobe-GB1-2
+ Adobe-GB1-3
+ Adobe-GB1-4
+ Adobe-GB1-5
+ GB-EUC-H
+ GB-EUC-V
+ GB-H
+ GB-RKSJ-H
+ GB-V
+ GBK-EUC-H
+ GBK-EUC-V
+ GBK2K-H
+ GBK2K-V
+ GBKp-EUC-H
+ GBKp-EUC-V
+ GBT-EUC-H
+ GBT-EUC-V
+ GBT-H
+ GBT-RKSJ-H
+ GBT-V
+ GBTpc-EUC-H
+ GBTpc-EUC-V
+ GBpc-EUC-H
+ GBpc-EUC-V
+ Identity-H
+ Identity-V
+ UniGB-UCS2-H
+ UniGB-UCS2-V
+ UniGB-UTF16-H
+ UniGB-UTF16-V
+ UniGB-UTF32-H
+ UniGB-UTF32-V
+ UniGB-UTF8-H
+ UniGB-UTF8-V/ ],
+ CNS => [ qw/
+ Adobe-CNS1-0
+ Adobe-CNS1-1
+ Adobe-CNS1-2
+ Adobe-CNS1-3
+ Adobe-CNS1-4
+ Adobe-CNS1-5
+ Adobe-CNS1-6
+ B5-H
+ B5-V
+ B5pc-H
+ B5pc-V
+ CNS-EUC-H
+ CNS-EUC-V
+ CNS1-H
+ CNS1-V
+ CNS2-H
+ CNS2-V
+ ETHK-B5-H
+ ETHK-B5-V
+ ETen-B5-H
+ ETen-B5-V
+ ETenms-B5-H
+ ETenms-B5-V
+ HKdla-B5-H
+ HKdla-B5-V
+ HKdlb-B5-H
+ HKdlb-B5-V
+ HKgccs-B5-H
+ HKgccs-B5-V
+ HKm314-B5-H
+ HKm314-B5-V
+ HKm471-B5-H
+ HKm471-B5-V
+ HKscs-B5-H
+ HKscs-B5-V
+ Identity-H
+ Identity-V
+ UniCNS-UCS2-H
+ UniCNS-UCS2-V
+ UniCNS-UTF16-H
+ UniCNS-UTF16-V
+ UniCNS-UTF32-H
+ UniCNS-UTF32-V
+ UniCNS-UTF8-H
+ UniCNS-UTF8-V/ ],
+ Korea => [ qw/
+ Adobe-Korea1-0
+ Adobe-Korea1-1
+ Adobe-Korea1-2
+ Identity-H
+ Identity-V
+ KSC-EUC-H
+ KSC-EUC-V
+ KSC-H
+ KSC-Johab-H
+ KSC-Johab-V
+ KSC-RKSJ-H
+ KSC-V
+ KSCms-UHC-H
+ KSCms-UHC-HW-H
+ KSCms-UHC-HW-V
+ KSCms-UHC-V
+ KSCpc-EUC-H
+ KSCpc-EUC-V
+ UniKS-UCS2-H
+ UniKS-UCS2-V
+ UniKS-UTF16-H
+ UniKS-UTF16-V
+ UniKS-UTF32-H
+ UniKS-UTF32-V
+ UniKS-UTF8-H
+ UniKS-UTF8-V/ ] );
+
+my $dry_run = 0;
+my $opt_help = 0;
+my $opt_quiet = 0;
+my $opt_debug = 0;
+my $opt_listaliases = 0;
+my $opt_listallaliases = 0;
+my $opt_listfonts = 0;
+my $opt_info = 0;
+my $opt_fontdef;
+my $opt_output;
+my @opt_aliases;
+my $opt_only_aliases = 0;
+my $opt_machine = 0;
+my $opt_filelist;
+my $opt_force = 0;
+my $opt_texmflink = 0;
+my $opt_markdown = 0;
+
+if (! GetOptions(
+ "n|dry-run" => \$dry_run,
+ "info" => \$opt_info,
+ "list-aliases" => \$opt_listaliases,
+ "list-all-aliases" => \$opt_listallaliases,
+ "list-fonts" => \$opt_listfonts,
+ "link-texmflocal" => \$opt_texmflink,
+ "only-aliases" => \$opt_only_aliases,
+ "machine-readable" => \$opt_machine,
+ "force" => \$opt_force,
+ "filelist=s" => \$opt_filelist,
+ "markdown" => \$opt_markdown,
+ "o|output=s" => \$opt_output,
+ "h|help" => \$opt_help,
+ "q|quiet" => \$opt_quiet,
+ "d|debug+" => \$opt_debug,
+ "f|fontdef=s" => \$opt_fontdef,
+ "a|alias=s" => \@opt_aliases,
+ "v|version" => sub { print &version(); exit(0); }, ) ) {
+ die "Try \"$0 --help\" for more information.\n";
+}
+
+sub win32 { return ($^O=~/^MSWin(32|64)$/i); }
+my $nul = (win32() ? 'nul' : '/dev/null') ;
+my $sep = (win32() ? ';' : ':');
+my %fontdb;
+my %aliases;
+my %user_aliases;
+
+if ($opt_help) {
+ Usage();
+ exit 0;
+}
+
+if ($opt_debug) {
+ require Data::Dumper;
+ $Data::Dumper::Indent = 1;
+}
+
+chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`);
+
+main(@ARGV);
+
+#
+# only sub definitions from here on
+#
+sub main {
+ print_info("reading font database ...\n");
+ read_font_database();
+ if (!$opt_listallaliases) {
+ print_info("checking for files ...\n");
+ check_for_files();
+ } else {
+ make_all_available();
+ }
+ compute_aliases();
+ if ($opt_info) {
+ $opt_listfonts = 1;
+ $opt_listaliases = 1;
+ }
+ if ($opt_listfonts) {
+ info_found_fonts();
+ }
+ if ($opt_listaliases || $opt_listallaliases) {
+ print "List of ", ($opt_listaliases ? "all" : "available"), " aliases and their options (in decreasing priority):\n" unless $opt_machine;
+ my (@jal, @kal, @tal, @sal);
+ for my $al (sort keys %aliases) {
+ my $cl;
+ my @ks = sort { $a <=> $b} keys(%{$aliases{$al}});
+ my $foo = '';
+ $foo = "$al:\n" unless $opt_machine;
+ for my $p (@ks) {
+ my $t = $aliases{$al}{$p};
+ my $fn = ($opt_listallaliases ? "-" : $fontdb{$t}{'target'} );
+ # should always be the same ;-)
+ $cl = $fontdb{$t}{'class'};
+ if (!$opt_listallaliases && $fontdb{$t}{'type'} eq 'TTF' && $fontdb{$t}{'subfont'} > 0) {
+ $fn .= "($fontdb{$t}{'subfont'})";
+ }
+ if ($opt_machine) {
+ $foo .= "$al:$p:$aliases{$al}{$p}:$fn\n";
+ } else {
+ $foo .= "\t($p) $aliases{$al}{$p} ($fn)\n";
+ }
+ }
+ if ($cl eq 'Japan') {
+ push @jal, $foo;
+ } elsif ($cl eq 'Korea') {
+ push @kal, $foo;
+ } elsif ($cl eq 'GB') {
+ push @sal, $foo;
+ } elsif ($cl eq 'CNS') {
+ push @tal, $foo;
+ } else {
+ print STDERR "unknown class $cl for $al\n";
+ }
+ }
+ if ($opt_machine) {
+ print @jal if @jal;
+ print @kal if @kal;
+ print @tal if @tal;
+ print @sal if @sal;
+ } else {
+ print "Aliases for Japanese fonts:\n", @jal, "\n" if @jal;
+ print "Aliases for Korean fonts:\n", @kal, "\n" if @kal;
+ print "Aliases for Traditional Chinese fonts:\n", @tal, "\n" if @tal;
+ print "Aliases for Simplified Chinese fonts:\n", @sal, "\n" if @sal;
+ }
+ }
+ exit(0) if ($opt_listfonts || $opt_listaliases || $opt_listallaliases);
+
+ if (! $opt_output) {
+ print_info("searching for GhostScript resource\n");
+ my $gsres = find_gs_resource();
+ if (!$gsres) {
+ print_error("Cannot find GhostScript, terminating!\n");
+ exit(1);
+ } else {
+ $opt_output = $gsres;
+ }
+ }
+ if (! -d $opt_output) {
+ $dry_run || mkdir($opt_output) ||
+ die ("Cannot create directory $opt_output: $!");
+ }
+ print_info("output is going to $opt_output\n");
+ if (!$opt_only_aliases) {
+ print_info("generating font snippets and link CID fonts ...\n");
+ do_otf_fonts();
+ print_info("generating font snippets, links, and cidfmap.local for TTF fonts ...\n");
+ do_ttf_fonts();
+ }
+ print_info("generating font aliases ...\n");
+ do_aliases();
+ print_info("finished\n");
+}
+
+sub update_master_cidfmap {
+ my $add = shift;
+ my $cidfmap_master = "$opt_output/Init/cidfmap";
+ if (-r $cidfmap_master) {
+ open(FOO, "<", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for reading: $!");
+ my $found = 0;
+ while(<FOO>) {
+ $found = 1 if
+ m/^\s*\(\Q$add\E\)\s\s*\.runlibfile\s*$/;
+ }
+ if ($found) {
+ print_info("$add already loaded in $cidfmap_master, no changes\n");
+ } else {
+ return if $dry_run;
+ open(FOO, ">>", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for appending: $!");
+ print FOO "($add) .runlibfile\n";
+ close(FOO);
+ }
+ } else {
+ return if $dry_run;
+ open(FOO, ">", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for writing: $!");
+ print FOO "($add) .runlibfile\n";
+ close(FOO);
+ }
+}
+
+sub make_dir {
+ my ($d, $w) = @_;
+ if (-r $d) {
+ if (! -d $d) {
+ print_error("$d is not a directory, $w\n");
+ exit 1;
+ }
+ } else {
+ $dry_run || mkdir($d);
+ }
+}
+
+sub do_otf_fonts {
+ my $fontdest = "$opt_output/Font";
+ my $ciddest = "$opt_output/CIDFont";
+ make_dir($fontdest, "cannot create CID snippets there!");
+ make_dir($ciddest, "cannot link CID fonts there!");
+ print "opt_texfmlink = $opt_texmflink\n";
+ make_dir("$TEXMFLOCAL/fonts/opentype/cjk-gs-integrate",
+ "cannot link fonts to it!")
+ if $opt_texmflink;
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'} && $fontdb{$k}{'type'} eq 'CID') {
+ generate_font_snippet($fontdest,
+ $k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'});
+ link_font($fontdb{$k}{'target'}, $ciddest, $k);
+ link_font($fontdb{$k}{'target'}, "$TEXMFLOCAL/fonts/opentype/cjk-gs-integrate")
+ if $opt_texmflink;
+ }
+ }
+}
+
+sub generate_font_snippet {
+ my ($fd, $n, $c, $f) = @_;
+ return if $dry_run;
+ for my $enc (@{$encode_list{$c}}) {
+ open(FOO, ">$fd/$n-$enc") ||
+ die("cannot open $fd/$n-$enc for writing: $!");
+ print FOO "%%!PS-Adobe-3.0 Resource-Font
+%%%%DocumentNeededResources: $enc (CMap)
+%%%%IncludeResource: $enc (CMap)
+%%%%BeginResource: Font ($n-$enc)
+($n-$enc)
+($enc) /CMap findresource
+[($n) /CIDFont findresource]
+composefont
+pop
+%%%%EndResource
+%%%%EOF
+";
+ close(FOO);
+ }
+}
+
+sub link_font {
+ my ($f, $cd, $n) = @_;
+ return if $dry_run;
+ if (!$n) {
+ $n = basename($f);
+ }
+ my $target = "$cd/$n";
+ printf STDERR "link try to $target\n";
+ if ($opt_force && -e $target) {
+ print_info("Removing $target prior to recreation due to --force\n");
+ unlink($target) || die "Cannot unlink $target prior to recreation under --force: $!";
+ }
+ if (-l $target) {
+ my $linkt = readlink($target);
+ if ($linkt && -r $linkt) {
+ if ($linkt eq $f) {
+ # do nothing, it is the same link
+ } else {
+ print_error("link $target already existing, but different target then $target, exiting!\n");
+ exit(1);
+ }
+ } else {
+ print_warning("removing dangling symlink $target to $linkt\n");
+ unlink($target);
+ }
+ } else {
+ if (-e $target) {
+ print_error("$target already existing, but not a link, exiting!\n");
+ exit(1);
+ } else {
+ symlink($f, $target) || die("Cannot link font $f to $target: $!");
+ }
+ }
+}
+
+sub do_ttf_fonts {
+ my $fontdest = "$opt_output/Font";
+ my $cidfsubst = "$opt_output/CIDFSubst";
+ my $outp = '';
+ make_dir($fontdest, "cannot create CID snippets there!");
+ make_dir($cidfsubst, "cannot link TTF fonts there!");
+ make_dir("$TEXMFLOCAL/fonts/truetype/cjk-gs-integrate",
+ "cannot link fonts to it!")
+ if $opt_texmflink;
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'} && $fontdb{$k}{'type'} eq 'TTF') {
+ generate_font_snippet($fontdest,
+ $k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'});
+ $outp .= generate_cidfmap_entry($k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'}, $fontdb{$k}{'subfont'});
+ link_font($fontdb{$k}{'target'}, $cidfsubst);
+ link_font($fontdb{$k}{'target'}, "$TEXMFLOCAL/fonts/truetype/cjk-gs-integrate")
+ if $opt_texmflink;
+ }
+ }
+ return if $dry_run;
+ if ($outp) {
+ if (! -d "$opt_output/Init") {
+ mkdir("$opt_output/Init") ||
+ die("Cannot create directory $opt_output/Init: $!");
+ }
+ open(FOO, ">$opt_output/Init/cidfmap.local") ||
+ die "Cannot open $opt_output/cidfmap.local: $!";
+ print FOO $outp;
+ close(FOO);
+ }
+ print_info("adding cidfmap.local to cidfmap file ...\n");
+ update_master_cidfmap('cidfmap.local');
+}
+
+sub do_aliases {
+ my $fontdest = "$opt_output/Font";
+ my $cidfsubst = "$opt_output/CIDFSubst";
+ my $outp = '';
+ #
+ # alias handling
+ # we use two levels of aliases, one is for the default names that
+ # are not actual fonts:
+ # Ryumin-Light, GothicBBB-Medium, FutoMinA101-Bold, FutoGoB101-Bold,
+ # Jun101-Light which are the original Morisawa names.
+ #
+ # the second level of aliases is for Morisawa OTF font names:
+ # RyuminPro-Light, GothicBBBPro-Medium,
+ # FutoMinA101Pro-Bold, FutoGoB101Pro-Bold
+ # Jun101Pro-Light
+ #
+ # the order of fonts selected is
+ # Morisawa Pr6, Morisawa, Hiragino ProN, Hiragino,
+ # Yu OSX, Yu Win, Kozuka ProN, Kozuka, IPAex, IPA
+ # but is defined in the Provides(Priority): Name in the font definiton
+ #
+ $outp .= "\n\n% Aliases\n";
+ #
+ my (@jal, @kal, @tal, @sal);
+ #
+ for my $al (sort keys %aliases) {
+ my $target;
+ my $class;
+ if ($user_aliases{$al}) {
+ $target = $user_aliases{$al};
+ # determine class
+ if ($fontdb{$target}{'available'}) {
+ $class = $fontdb{$target}{'class'};
+ } else {
+ # must be an aliases, we checked this when initializing %user_aliases
+ # reset the $al value
+ # and since $class is still undefined we will use the next code below
+ $al = $target;
+ }
+ }
+ if (!$class) {
+ # search lowest number
+ my @ks = keys(%{$aliases{$al}});
+ my $first = (sort { $a <=> $b} @ks)[0];
+ $target = $aliases{$al}{$first};
+ $class = $fontdb{$target}{'class'};
+ }
+ # we also need to create font snippets in Font for the aliases!
+ generate_font_snippet($fontdest, $al, $class, $target);
+ if ($class eq 'Japan') {
+ push @jal, "/$al /$target ;";
+ } elsif ($class eq 'Korea') {
+ push @kal, "/$al /$target ;";
+ } elsif ($class eq 'GB') {
+ push @sal, "/$al /$target ;";
+ } elsif ($class eq 'CNS') {
+ push @tal, "/$al /$target ;";
+ } else {
+ print STDERR "unknown class $class for $al\n";
+ }
+ }
+ $outp .= "\n% Japanese fonts\n" . join("\n", @jal) . "\n" if @jal;
+ $outp .= "\n% Korean fonts\n" . join("\n", @kal) . "\n" if @kal;
+ $outp .= "\n% Traditional Chinese fonts\n" . join("\n", @tal) . "\n" if @tal;
+ $outp .= "\n% Simplified Chinese fonts\n" . join("\n", @sal) . "\n" if @sal;
+ #
+ return if $dry_run;
+ if ($outp) {
+ if (! -d "$opt_output/Init") {
+ mkdir("$opt_output/Init") ||
+ die("Cannot create directory $opt_output/Init: $!");
+ }
+ open(FOO, ">$opt_output/Init/cidfmap.aliases") ||
+ die "Cannot open $opt_output/cidfmap.aliases: $!";
+ print FOO $outp;
+ close(FOO);
+ }
+ print_info("adding cidfmap.aliases to cidfmap file ...\n");
+ update_master_cidfmap('cidfmap.aliases');
+}
+
+sub generate_cidfmap_entry {
+ my ($n, $c, $f, $sf) = @_;
+ # we link the ttf fonts, so we use only the base name
+ # otherwise the ps2pdf breaks due to -dSAFER
+ my $bn = basename($f);
+ # extract subfont
+ my $s = "/$n << /FileType /TrueType
+ /Path pssystemparams /GenericResourceDir get
+ (CIDFSubst/$bn) concatstrings
+ /SubfontID $sf
+ /CSI [($c";
+ if ($c eq "Japan") {
+ $s .= "1) 6]";
+ } elsif ($c eq "GB") {
+ $s .= "1) 5]";
+ } elsif ($c eq "CNS") {
+ $s .= "1) 5]";
+ } elsif ($c eq "Korea") {
+ $s .= "1) 2]";
+ } else {
+ print_warning("unknown class $c for $n, skipping.\n");
+ return '';
+ }
+ $s .= " >> ;\n";
+ return $s;
+}
+
+#
+# dump found files
+sub info_found_fonts {
+ print "List of found fonts:\n\n";
+ for my $k (keys %fontdb) {
+ my @foundfiles;
+ if ($fontdb{$k}{'available'}) {
+ print "Font: $k\n";
+ print "Type: $fontdb{$k}{'type'}\n";
+ print "Class: $fontdb{$k}{'class'}\n";
+ my $fn = $fontdb{$k}{'target'};
+ if ($fontdb{$k}{'type'} eq 'TTF' && $fontdb{$k}{'subfont'} > 0) {
+ $fn .= "($fontdb{$k}{'subfont'})";
+ }
+ print "File: $fn\n";
+ print "\n";
+ }
+ }
+}
+
+
+#
+# make all fonts available for listing all aliases
+sub make_all_available {
+ for my $k (keys %fontdb) {
+ $fontdb{$k}{'available'} = 1;
+ delete $fontdb{$k}{'files'};
+ }
+}
+
+#
+# checks all file names listed in %fontdb
+# and sets
+sub check_for_files {
+ my @foundfiles;
+ if ($opt_filelist) {
+ open(FOO, "<", $opt_filelist) || die "Cannot open $opt_filelist: $!";
+ @foundfiles = <FOO>;
+ close(FOO) || warn "Cannot close $opt_filelist: $!";
+ } else {
+ # first collect all files:
+ my @fn;
+ for my $k (keys %fontdb) {
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ # check for subfont extension
+ if ($f =~ m/^(.*)\(\d*\)$/) {
+ push @fn, $1;
+ } else {
+ push @fn, $f;
+ }
+ }
+ }
+ #
+ # collect extra directories for search
+ my @extradirs;
+ if (win32()) {
+ push @extradirs, "c:/windows/fonts//";
+ } else {
+ # other dirs to check, for normal unix?
+ for my $d (qw!/Library/Fonts /System/Library/Fonts /Library/Fonts/Microsoft/ /Network/Library/Fonts!) {
+ push @extradirs, $d if (-d $d);
+ }
+ my $home = $ENV{'HOME'};
+ push @extradirs, "$home/Library/Fonts" if (-d "$home/Library/Fonts");
+ }
+ #
+ if (@extradirs) {
+ # final dummy directory
+ push @extradirs, "/this/does/not/really/exists/unless/you/are/stupid";
+ # push current value of OSFONTDIR
+ push @extradirs, $ENV{'OSFONTDIR'} if $ENV{'OSFONTDIR'};
+ # compose OSFONTDIR
+ my $osfontdir = join ':', @extradirs;
+ $ENV{'OSFONTDIR'} = $osfontdir;
+ }
+ if ($ENV{'OSFONTDIR'}) {
+ print_debug("final setting of OSFONTDIR: $ENV{'OSFONTDIR'}\n");
+ }
+ # prepare for kpsewhich call, we need to do quoting
+ my $cmdl = 'kpsewhich ';
+ for my $f (@fn) {
+ $cmdl .= " \"$f\" ";
+ }
+ # shoot up kpsewhich
+ print_ddebug("checking for $cmdl\n");
+ @foundfiles = `$cmdl`;
+ }
+ chomp(@foundfiles);
+ print_ddebug("Found files @foundfiles\n");
+ # map basenames to filenames
+ my %bntofn;
+ for my $f (@foundfiles) {
+ my $bn = basename($f);
+ $bntofn{$bn} = $f;
+ }
+ if ($opt_debug > 1) {
+ print_ddebug("dumping basename to filename list:\n");
+ print_ddebug(Data::Dumper::Dumper(\%bntofn));
+ }
+
+ # update the %fontdb with the found files
+ for my $k (keys %fontdb) {
+ $fontdb{$k}{'available'} = 0;
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ # check for subfont extension
+ my $realfile = $f;
+ $realfile =~ s/^(.*)\(\d*\)$/$1/;
+ if ($bntofn{$realfile}) {
+ # we found a representative, make it available
+ $fontdb{$k}{'files'}{$f}{'target'} = $bntofn{$realfile};
+ $fontdb{$k}{'available'} = 1;
+ } else {
+ # delete the entry for convenience
+ delete $fontdb{$k}{'files'}{$f};
+ }
+ }
+ }
+ # second round to determine the winner in case of more targets
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'}) {
+ my $mp = 1000000; my $mf;
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ if ($fontdb{$k}{'files'}{$f}{'priority'} < $mp) {
+ $mp = $fontdb{$k}{'files'}{$f}{'priority'};
+ $mf = $f;
+ }
+ }
+ # extract subfont if necessary
+ my $sf = 0;
+ if ($mf =~ m/^(.*)\((\d*)\)$/) { $sf = $2; }
+ $fontdb{$k}{'target'} = $fontdb{$k}{'files'}{$mf}{'target'};
+ $fontdb{$k}{'subfont'} = $sf if ($fontdb{$k}{'type'} eq 'TTF');
+ }
+ # not needed anymore
+ delete $fontdb{$k}{'files'};
+ }
+ if ($opt_debug > 0) {
+ print_debug("dumping font database:\n");
+ print_debug(Data::Dumper::Dumper(\%fontdb));
+ }
+}
+
+sub compute_aliases {
+ # go through fontdb to check for provides
+ # accumulate all provided fonts in @provides
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'}) {
+ for my $p (keys %{$fontdb{$k}{'provides'}}) {
+ # do not check alias if the real font is available
+ next if $fontdb{$p}{'available'};
+ # use the priority as key
+ # if priorities are double, this will pick one at chance
+ if ($aliases{$p}{$fontdb{$k}{'provides'}{$p}}) {
+ print_warning("duplicate provide levels:\n");
+ print_warning(" current $p $fontdb{$k}{'provides'}{$p} $aliases{$p}{$fontdb{$k}{'provides'}{$p}}\n");
+ print_warning(" ignored $p $fontdb{$k}{'provides'}{$p} $k\n");
+ } else {
+ $aliases{$p}{$fontdb{$k}{'provides'}{$p}} = $k;
+ }
+ }
+ }
+ }
+ # check for user supplied aliases
+ for my $a (@opt_aliases) {
+ if ($a =~ m/^(.*)=(.*)$/) {
+ my $ll = $1;
+ my $rr = $2;
+ # check for consistency of user provided aliases:
+ # - ll must not be available
+ # - rr needs to be available as font or alias
+ # check whether $rr is available, either as real font or as alias
+ if ($fontdb{$ll}{'available'}) {
+ print_error("left side of alias spec is provided by a real font: $a\n");
+ print_error("stopping here\n");
+ exit(1);
+ }
+ if (!($fontdb{$rr}{'available'} || $aliases{$rr})) {
+ print_error("right side of alias spec is not available as real font or alias: $a\n");
+ print_error("stopping here\n");
+ exit(1);
+ }
+ $user_aliases{$ll} = $rr;
+ }
+ }
+ if ($opt_debug > 0) {
+ print_debug("dumping aliases:\n");
+ print_debug(Data::Dumper::Dumper(\%aliases));
+ }
+}
+
+sub read_font_database {
+ my @dbl;
+ if ($opt_fontdef) {
+ open (FDB, "<$opt_fontdef") ||
+ die "Cannot find $opt_fontdef: $!";
+ @dbl = <FDB>;
+ close(FDB);
+ } else {
+ @dbl = <DATA>;
+ }
+ chomp(@dbl);
+ # add a "final empty line" to easy parsing
+ push @dbl, "";
+ my $fontname = "";
+ my $fonttype = "";
+ my $fontclass = "";
+ my %fontprovides = ();
+ my %fontfiles;
+ my $psname = "";
+ my $lineno = 0;
+ for my $l (@dbl) {
+ $lineno++;
+
+ next if ($l =~ m/^\s*#/);
+ if ($l =~ m/^\s*$/) {
+ if ($fontname || $fonttype || $fontclass || keys(%fontfiles)) {
+ if ($fontname && $fonttype && $fontclass && keys(%fontfiles)) {
+ my $realfontname = ($psname ? $psname : $fontname);
+ $fontdb{$realfontname}{'type'} = $fonttype;
+ $fontdb{$realfontname}{'class'} = $fontclass;
+ $fontdb{$realfontname}{'files'} = { %fontfiles };
+ $fontdb{$realfontname}{'provides'} = { %fontprovides };
+ # reset to start
+ $fontname = $fonttype = $fontclass = $psname = "";
+ %fontfiles = ();
+ %fontprovides = ();
+ } else {
+ print_warning("incomplete entry above line $lineno for $fontname/$fonttype/$fontclass, skipping!\n");
+ # reset to start
+ $fontname = $fonttype = $fontclass = $psname = "";
+ %fontfiles = ();
+ %fontprovides = ();
+ }
+ } else {
+ # no term is set, so nothing to warn about
+ }
+ next;
+ }
+ if ($l =~ m/^Name:\s*(.*)$/) { $fontname = $1; next; }
+ if ($l =~ m/^PSName:\s*(.*)$/) { $psname = $1; next; }
+ if ($l =~ m/^Type:\s*(.*)$/) { $fonttype = $1 ; next ; }
+ if ($l =~ m/^Class:\s*(.*)$/) { $fontclass = $1 ; next ; }
+ if ($l =~ m/^Filename(\((\d+)\))?:\s*(.*)$/) {
+ $fontfiles{$3}{'priority'} = ($2 ? $2 : 10);
+ next;
+ }
+ if ($l =~ m/^Provides\((\d+)\):\s*(.*)$/) { $fontprovides{$2} = $1; next; }
+ # we are still here??
+ print_error("Cannot parse this file at line $lineno, exiting. Strange line: >>>$l<<<\n");
+ exit (1);
+ }
+}
+
+sub find_gs_resource {
+ # we assume that gs is in the path
+ # on Windows we probably have to try something else
+ my @ret = `gs --help 2>$nul`;
+ my $foundres = '';
+ if ($?) {
+ print_error("Cannot find gs ...\n");
+ } else {
+ # try to find resource line
+ for (@ret) {
+ if (m!Resource/Font!) {
+ $foundres = $_;
+ $foundres =~ s/^\s*//;
+ $foundres =~ s/\s*:\s*$//;
+ $foundres =~ s!/Font!!;
+ last;
+ }
+ }
+ if (!$foundres) {
+ print_error("Found gs but no resource???\n");
+ }
+ }
+ return $foundres;
+}
+
+sub version {
+ my $ret = sprintf "%s version %s\n", $prg, $version;
+ return $ret;
+}
+
+sub Usage {
+ my $headline = "Configuring GhostScript for CJK CID/TTF fonts";
+ my $usage = "[perl] $prg\[.pl\] [OPTIONS]";
+ my $options = "
+-n, --dry-run do not actually output anything
+-f, --fontdef FILE specify alternate set of font definitions, if not
+ given, the built-in set is used
+-o, --output DIR specifies the base output dir, if not provided,
+ the Resource directory of an install GhostScript
+ is searched and used.
+-a, --alias LL=RR defines an alias, or overrides a given alias
+ illegal if LL is provided by a real font, or
+ RR is neither available as real font or alias
+ can be given multiple times
+--filelist FILE read list of available font files from FILE
+ instead of searching with kpathsea
+--link-texmflocal link fonts into
+ TEXMFLOCAL/fonts/opentype/cjk-gs-integrate
+ and
+ TEXMFLOCAL/fonts/truetype/cjk-gs-integrate
+--machine-readable output of --list-aliases is machine readable
+--force do not bail out if linked fonts already exist
+-q, --quiet be less verbose
+-d, --debug output debug information, can be given multiple times
+-v, --version outputs only the version information
+-h, --help this help
+";
+
+ my $commandoptions = "
+--only-aliases do only regenerate the cidfmap.alias file instead of all
+--list-aliases lists the available aliases and their options, with the
+ selected option on top
+--list-all-aliases list all possible aliases without searching for actually
+ present files
+--list-fonts lists the fonts found on the system
+--info combines the above two information
+";
+
+ my $shortdesc = "
+This script searches a list of directories for CJK fonts, and makes
+them available to an installed GhostScript. In the simplest case with
+sufficient privileges, a run without arguments should effect in a
+complete setup of GhostScript.
+";
+
+my $operation = "
+For each found TrueType (TTF) font it creates a cidfmap entry in
+
+ <Resource>/Init/cidfmap.local
+
+and links the font to
+
+ <Resource>/CIDFSubst/
+
+For each CID font it creates a snippet in
+
+ <Resource>/Font/
+
+and links the font to
+
+ <Resource>/CIDFont/
+
+The `<Resource>` dir is either given by `-o`/`--output`, or otherwise searched
+from an installed GhostScript (binary name is assumed to be 'gs').
+
+Aliases are added to
+
+ <Resource>/Init/cidfmap.aliases
+
+Finally, it tries to add runlib calls to
+
+ <Resource>/Init/cidfmap
+
+to load the cidfmap.local and cidfmap.aliases.
+";
+
+ my $dirsearch = '
+Search is done using the kpathsea library, in particular using kpsewhich
+program. By default the following directories are searched:
+ - all TEXMF trees
+ - `/Library/Fonts`, `/Library/Fonts/Microsoft`, `/System/Library/Fonts`,
+ `/Network/Library/Fonts`, and `~/Library/Fonts` (all if available)
+ - `c:/windows/fonts` (on Windows)
+ - the directories in `OSFONTDIR` environment variable
+
+In case you want to add some directories to the search path, adapt the
+`OSFONTDIR` environment variable accordingly: Example:
+
+`````
+ OSFONTDIR="/usr/local/share/fonts/truetype//:/usr/local/share/fonts/opentype//" $prg
+`````
+
+will result in fonts found in the above two given directories to be
+searched in addition.
+';
+
+ my $outputfile = "
+If no output option is given, the program searches for a GhostScript
+interpreter 'gs' and determines its Resource directory. This might
+fail, in which case one need to pass the output directory manually.
+
+Since the program adds files and link to this directory, sufficient
+permissions are necessary.
+";
+
+ my $aliases = "
+Aliases are managed via the Provides values in the font database.
+At the moment entries for the basic font names for CJK fonts
+are added:
+
+Japanese:
+
+ Ryumin-Light GothicBBB-Medium FutoMinA101-Bold FutoGoB101-Bold Jun101-Light
+
+Korean:
+
+ HYGoThic-Medium HYSMyeongJo-Medium
+
+Simplified Chinese:
+
+ STSong-Light STHeiti-Regular STHeiti-Light STKaiti-Regular
+
+Traditional Chinese:
+
+ MSung-Light MHei-Medium MKai-Medium
+
+In addition, we also includes provide entries for the OTF Morisawa names:
+ RyuminPro-Light GothicBBBPro-Medium FutoMinA101Pro-Bold
+ FutoGoB101Pro-Bold Jun101Pro-Light
+
+The order is determined by the Provides setting in the font database,
+and for the Japanese fonts it is currently:
+ Morisawa Pr6, Morisawa, Hiragino ProN, Hiragino,
+ Yu OSX, Yu Win, Kozuka ProN, Kozuka, IPAex, IPA
+
+That is, the first font found in this order will be used to provide the
+alias if necessary.
+
+#### Overriding aliases ####
+
+Using the command line option `--alias LL=RR` one can add arbitrary aliases,
+or override ones selected by the program. For this to work the following
+requirements of `LL` and `RR` must be fulfilled:
+ * `LL` is not provided by a real font
+ * `RR` is available either as real font, or as alias (indirect alias)
+";
+
+ my $authors = "
+The script and its documentation was written by Norbert Preining, based
+on research and work by Yusuke Kuroki, Bruno Voisin, Munehiro Yamamoto
+and the TeX Q&A wiki page.
+
+The script is licensed under GNU General Public License Version 3 or later.
+The contained font data is not copyrightable.
+";
+
+
+ if ($opt_markdown) {
+ print "$headline\n";
+ print ("=" x length($headline));
+ print "\n$shortdesc\nUsage\n-----\n\n`````\n$usage\n`````\n\n";
+ print "#### Options ####\n\n`````";
+ print_for_out($options, " ");
+ print "`````\n\n#### Command like options ####\n\n`````";
+ print_for_out($commandoptions, " ");
+ print "`````\n\nOperation\n---------\n$operation\n";
+ print "How and which directories are searched\n";
+ print "--------------------------------------\n$dirsearch\n";
+ print "Output files\n";
+ print "------------\n$outputfile\n";
+ print "Aliases\n";
+ print "-------\n$aliases\n";
+ print "Authors, Contributors, and Copyright\n";
+ print "------------------------------------\n$authors\n";
+ } else {
+ print "\nUsage: $usage\n\n$headline\n$shortdesc";
+ print "\nOptions:\n";
+ print_for_out($options, " ");
+ print "\nCommand like options:\n";
+ print_for_out($commandoptions, " ");
+ print "\nOperation:\n";
+ print_for_out($operation, " ");
+ print "\nHow and which directories are searched:\n";
+ print_for_out($dirsearch, " ");
+ print "\nOutput files:\n";
+ print_for_out($outputfile, " ");
+ print "\nAliases:\n";
+ print_for_out($aliases, " ");
+ print "\nAuthors, Contributors, and Copyright:\n";
+ print_for_out($authors, " ");
+ print "\n";
+ }
+ exit 0;
+}
+
+sub print_for_out {
+ my ($what, $indent) = @_;
+ for (split /\n/, $what) {
+ next if m/`````/;
+ s/\s*####\s*//g;
+ if ($_ eq '') {
+ print "\n";
+ } else {
+ print "$indent$_\n";
+ }
+ }
+}
+
+# info/warning can be suppressed
+# verbose/error cannot be suppressed
+sub print_info {
+ print STDOUT "$prg: ", @_ if (!$opt_quiet);
+}
+sub print_verbose {
+ print STDOUT "$prg: ", @_;
+}
+sub print_warning {
+ print STDERR "$prg [WARNING]: ", @_ if (!$opt_quiet)
+}
+sub print_error {
+ print STDERR "$prg [ERROR]: ", @_;
+}
+sub print_debug {
+ print STDERR "$prg [DEBUG]: ", @_ if ($opt_debug >= 1);
+}
+sub print_ddebug {
+ print STDERR "$prg [DEBUG]: ", @_ if ($opt_debug >= 2);
+}
+
+
+__DATA__
+#
+# CJK FONT DEFINITIONS
+#
+
+# JAPAN
+
+# Morisawa
+
+Name: A-OTF-FutoGoB101Pr6N-Bold
+PSName: FutoGoB101Pr6N-Bold
+Type: CID
+Class: Japan
+Provides(10): FutoGoB101-Bold
+Provides(10): FutoGoB101Pro-Bold
+Filename: A-OTF-FutoGoB101Pr6N-Bold.otf
+
+Name: A-OTF-FutoGoB101Pro-Bold
+PSName: FutoGoB101Pro-Bold
+Type: CID
+Class: Japan
+Provides(20): FutoGoB101-Bold
+Filename: A-OTF-FutoGoB101Pro-Bold.otf
+
+Name: A-OTF-FutoMinA101Pr6N-Bold
+PSName: FutoMinA101Pr6N-Bold
+Type: CID
+Class: Japan
+Provides(10): FutoMinA101-Bold
+Provides(10): FutoMinA101Pro-Bold
+Filename: A-OTF-FutoMinA101Pr6N-Bold.otf
+
+Name: A-OTF-FutoMinA101Pro-Bold
+PSName: FutoMinA101Pro-Bold
+Type: CID
+Class: Japan
+Provides(20): FutoMinA101-Bold
+Filename: A-OTF-FutoMinA101Pro-Bold.otf
+
+Name: A-OTF-GothicBBBPr6N-Medium
+PSName: GothicBBBPr6N-Medium
+Type: CID
+Class: Japan
+Provides(10): GothicBBB-Medium
+Provides(10): GothicBBBPro-Medium
+Filename: A-OTF-GothicBBBPr6N-Medium.otf
+
+Name: A-OTF-GothicBBBPro-Medium
+PSName: GothicBBBPro-Medium
+Type: CID
+Class: Japan
+Provides(20): GothicBBB-Medium
+Filename: A-OTF-GothicBBBPro-Medium.otf
+
+Name: A-OTF-Jun101Pro-Light
+PSName: Jun101Pro-Light
+Type: CID
+Class: Japan
+Provides(20): Jun101-Light
+Filename: A-OTF-Jun101Pro-Light.otf
+
+Name: A-OTF-MidashiGoPr6N-MB31
+PSName: MidashiGoPr6N-MB31
+Type: CID
+Class: Japan
+Provides(10): MidashiGo-MB31
+Provides(10): MidashiGoPro-MB31
+Filename: A-OTF-MidashiGoPr6N-MB31.otf
+
+Name: A-OTF-MidashiGoPro-MB31
+PSName: MidashiGoPro-MB31
+Type: CID
+Class: Japan
+Provides(20): MidashiGo-MB31
+Filename: A-OTF-MidashiGoPro-MB31.otf
+
+Name: A-OTF-RyuminPr6N-Light
+PSName: RyuminPr6N-Light
+Type: CID
+Class: Japan
+Provides(10): Ryumin-Light
+Provides(10): RyuminPro-Light
+Filename: A-OTF-RyuminPr6N-Light.otf
+
+Name: A-OTF-RyuminPro-Light
+PSName: RyuminPro-Light
+Type: CID
+Class: Japan
+Provides(20): Ryumin-Light
+Filename: A-OTF-RyuminPro-Light.otf
+
+Name: A-OTF-ShinMGoPr6N-Light
+PSName: ShinMGoPr6N-Light
+Type: CID
+Class: Japan
+Provides(10): Jun101-Light
+Provides(10): Jun101Pro-Light
+Filename: A-OTF-ShinMGoPr6N-Light.otf
+
+
+# Hiragino
+
+Name: HiraKakuPro-W3
+Type: CID
+Class: Japan
+Provides(40): GothicBBB-Medium
+Provides(40): GothicBBBPro-Medium
+# the following two are *not* the same
+# one is in decomposed form (for Mac), one is in composed form (for the rest)
+Filename(20): ヒラギノ角ゴ Pro W3.otf
+Filename(19): ヒラギノ角ゴ Pro W3.otf
+Filename(10): HiraKakuPro-W3.otf
+
+Name: HiraKakuPro-W6
+Type: CID
+Class: Japan
+Provides(40): FutoGoB101-Bold
+Provides(40): FutoGoB101Pro-Bold
+Filename(20): ヒラギノ角ゴ Pro W6.otf
+Filename(19): ヒラギノ角ゴ Pro W6.otf
+Filename(10): HiraKakuPro-W6.otf
+
+Name: HiraKakuProN-W3
+Type: CID
+Class: Japan
+Provides(30): GothicBBB-Medium
+Provides(30): GothicBBBPro-Medium
+Filename(20): ヒラギノ角ゴ ProN W3.otf
+Filename(19): ヒラギノ角ゴ ProN W3.otf
+Filename(10): HiraKakuProN-W3.otf
+
+Name: HiraKakuProN-W6
+Type: CID
+Class: Japan
+Provides(30): FutoGoB101-Bold
+Provides(30): FutoGoB101Pro-Bold
+Filename(20): ヒラギノ角ゴ ProN W6.otf
+Filename(19): ヒラギノ角ゴ ProN W6.otf
+Filename(10): HiraKakuProN-W6.otf
+
+Name: HiraKakuStd-W8
+Type: CID
+Class: Japan
+Provides(40): MidashiGo-MB31
+Provides(40): MidashiGoPro-MB31
+Filename(20): ヒラギノ角ゴ Std W8.otf
+Filename(19): ヒラギノ角ゴ Std W8.otf
+Filename(10): HiraKakuStd-W8.otf
+
+Name: HiraKakuStdN-W8
+Type: CID
+Class: Japan
+Provides(30): MidashiGo-MB31
+Provides(30): MidashiGoPro-MB31
+Filename(20): ヒラギノ角ゴ StdN W8.otf
+Filename(19): ヒラギノ角ゴ StdN W8.otf
+Filename(10): HiraKakuStdN-W8.otf
+
+Name: HiraMaruPro-W4
+Type: CID
+Class: Japan
+Provides(40): Jun101-Light
+Provides(40): Jun101Pro-Light
+Filename(20): ヒラギノ丸ゴ Pro W4.otf
+Filename(19): ヒラギノ丸ゴ Pro W4.otf
+Filename(10): HiraMaruPro-W4.otf
+
+Name: HiraMaruProN-W4
+Type: CID
+Class: Japan
+Provides(30): Jun101-Light
+Provides(30): Jun101Pro-Light
+Filename(20): ヒラギノ丸ゴ ProN W4.otf
+Filename(19): ヒラギノ丸ゴ ProN W4.otf
+Filename(10): HiraMaruProN-W4.otf
+
+Name: HiraMinPro-W3
+Type: CID
+Class: Japan
+Provides(40): Ryumin-Light
+Provides(40): RyuminPro-Light
+Filename(20): ヒラギノ明朝 Pro W3.otf
+Filename(19): ヒラギノ明朝 Pro W3.otf
+Filename(10): HiraMinPro-W3.otf
+
+Name: HiraMinPro-W6
+Type: CID
+Class: Japan
+Provides(40): FutoMinA101-Bold
+Provides(40): FutoMinA101Pro-Bold
+Filename(20): ヒラギノ明朝 Pro W6.otf
+Filename(19): ヒラギノ明朝 Pro W6.otf
+Filename(10): HiraMinPro-W6.otf
+
+Name: HiraMinProN-W3
+Type: CID
+Class: Japan
+Provides(30): Ryumin-Light
+Provides(30): RyuminPro-Light
+Filename(20): ヒラギノ明朝 ProN W3.otf
+Filename(19): ヒラギノ明朝 ProN W3.otf
+Filename(10): HiraMinProN-W3.otf
+
+Name: HiraMinProN-W6
+Type: CID
+Class: Japan
+Provides(30): FutoMinA101-Bold
+Provides(30): FutoMinA101Pro-Bold
+Filename(20): ヒラギノ明朝 ProN W6.otf
+Filename(19): ヒラギノ明朝 ProN W6.otf
+Filename(10): HiraMinProN-W6.otf
+
+
+Name: HiraginoSansGB-W3
+Type: CID
+Class: GB
+Filename(20): Hiragino Sans GB W3.otf
+Filename(10): HiraginoSansGB-W3.otf
+
+Name: HiraginoSansGB-W6
+Type: CID
+Class: GB
+Filename(20): Hiragino Sans GB W6.otf
+Filename(10): HiraginoSansGB-W6.otf
+
+
+# Yu-fonts MacOS version
+
+Name: YuGo-Medium
+Type: CID
+Class: Japan
+Provides(50): GothicBBB-Medium
+Provides(50): GothicBBBPro-Medium
+Filename(20): Yu Gothic Medium.otf
+Filename(10): YuGo-Medium.otf
+
+Name: YuGo-Bold
+Type: CID
+Class: Japan
+Provides(50): FutoGoB101-Bold
+Provides(50): FutoGoB101Pro-Bold
+Provides(50): Jun101-Light
+Provides(50): Jun101Pro-Light
+Provides(50): MidashiGo-MB31
+Provides(50): MidashiGoPro-MB31
+Filename(20): Yu Gothic Bold.otf
+Filename(10): YuGo-Bold.otf
+
+Name: YuMin-Medium
+Type: CID
+Class: Japan
+Provides(50): Ryumin-Light
+Provides(50): RyuminPro-Light
+Filename(20): Yu Mincho Medium.otf
+Filename(10): YuMin-Medium.otf
+
+Name: YuMin-Demibold
+Type: CID
+Class: Japan
+Provides(50): FutoMinA101-Bold
+Provides(50): FutoMinA101Pro-Bold
+Filename(20): Yu Mincho Demibold.otf
+Filename(10): YuMin-Demibold.otf
+
+# Yu-fonts Windows version
+
+Name: YuMincho-Regular
+Type: TTF
+Class: Japan
+Provides(60): Ryumin-Light
+Provides(60): RyuminPro-Light
+Filename(20): yumin.ttf
+Filename(10): YuMincho-Regular.ttf
+
+Name: YuMincho-Light
+Type: TTF
+Class: Japan
+Filename(20): yuminl.ttf
+Filename(10): YuMincho-Light.ttf
+
+Name: YuMincho-DemiBold
+Type: TTF
+Class: Japan
+Provides(60): FutoMinA101-Bold
+Provides(60): FutoMinA101Pro-Bold
+Filename(20): yumindb.ttf
+Filename(10): YuMincho-DemiBold.ttf
+
+Name: YuGothic-Regular
+Type: TTF
+Class: Japan
+Provides(60): GothicBBB-Medium
+Provides(60): GothicBBBPro-Medium
+Filename(20): yugothic.ttf
+Filename(10): YuGothic-Regular.ttf
+
+Name: YuGothic-Light
+Type: TTF
+Class: Japan
+Filename(20): yugothil.ttf
+Filename(10): YuGothic-Light.ttf
+
+Name: YuGothic-Bold
+Type: TTF
+Class: Japan
+Provides(60): FutoGoB101-Bold
+Provides(60): FutoGoB101Pro-Bold
+Provides(60): Jun101-Light
+Provides(60): Jun101Pro-Light
+Provides(60): MidashiGo-MB31
+Provides(60): MidashiGoPro-MB31
+Filename(20): yugothib.ttf
+Filename(10): YuGothic-Bold.ttf
+
+# IPA fonts
+
+Name: IPAMincho
+Type: TTF
+Class: Japan
+Provides(110): Ryumin-Light
+Provides(110): RyuminPro-Light
+Provides(110): FutoMinA101-Bold
+Provides(110): FutoMinA101Pro-Bold
+Filename(20): ipam.ttf
+Filename(10): IPAMincho.ttf
+
+Name: IPAGothic
+Type: TTF
+Class: Japan
+Provides(110): GothicBBB-Medium
+Provides(110): GothicBBBPro-Medium
+Provides(110): FutoGoB101-Bold
+Provides(110): FutoGoB101Pro-Bold
+Provides(110): Jun101-Light
+Provides(110): Jun101Pro-Light
+Provides(110): MidashiGo-MB31
+Provides(110): MidashiGoPro-MB31
+Filename(20): ipag.ttf
+Filename(10): IPAGothic.ttf
+
+Name: IPAexMincho
+Type: TTF
+Class: Japan
+Provides(100): Ryumin-Light
+Provides(100): RyuminPro-Light
+Provides(100): FutoMinA101-Bold
+Provides(100): FutoMinA101Pro-Bold
+Filename(20): ipaexm.ttf
+Filename(10): IPAexMincho.ttf
+
+Name: IPAexGothic
+Type: TTF
+Class: Japan
+Provides(100): GothicBBB-Medium
+Provides(100): GothicBBBPro-Medium
+Provides(100): FutoGoB101-Bold
+Provides(100): FutoGoB101Pro-Bold
+Provides(100): Jun101-Light
+Provides(100): Jun101Pro-Light
+Provides(100): MidashiGo-MB31
+Provides(100): MidashiGoPro-MB31
+Filename(20): ipaexg.ttf
+Filename(10): IPAexGothic.ttf
+
+# Kozuka fonts
+
+Name: KozGoPr6N-Bold
+Type: CID
+Class: Japan
+Provides(70): FutoGoB101-Bold
+Provides(70): FutoGoB101Pro-Bold
+Filename: KozGoPr6N-Bold.otf
+
+Name: KozGoPr6N-Heavy
+Type: CID
+Class: Japan
+Provides(70): Jun101-Light
+Provides(70): Jun101Pro-Light
+Provides(70): MidashiGo-MB31
+Provides(70): MidashiGoPro-MB31
+Filename: KozGoPr6N-Heavy.otf
+
+Name: KozGoPr6N-Medium
+Type: CID
+Class: Japan
+Provides(70): GothicBBB-Medium
+Provides(70): GothicBBBPro-Medium
+Filename: KozGoPr6N-Medium.otf
+
+Name: KozGoPr6N-Regular
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-Regular.otf
+
+Name: KozGoPr6N-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-ExtraLight.otf
+
+Name: KozGoPr6N-Light
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-Light.otf
+
+Name: KozGoPro-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozGoPro-ExtraLight.otf
+
+Name: KozGoPro-Light
+Type: CID
+Class: Japan
+Filename: KozGoPro-Light.otf
+
+
+Name: KozGoPro-Bold
+Type: CID
+Class: Japan
+Provides(90): FutoGoB101-Bold
+Provides(90): FutoGoB101Pro-Bold
+Filename: KozGoPro-Bold.otf
+
+Name: KozGoPro-Heavy
+Type: CID
+Class: Japan
+Provides(90): Jun101-Light
+Provides(90): Jun101Pro-Light
+Provides(90): MidashiGo-MB31
+Provides(90): MidashiGoPro-MB31
+Filename: KozGoPro-Heavy.otf
+
+Name: KozGoPro-Medium
+Type: CID
+Class: Japan
+Provides(90): GothicBBB-Medium
+Provides(90): GothicBBBPro-Medium
+Filename: KozGoPro-Medium.otf
+
+Name: KozGoPro-Regular
+Type: CID
+Class: Japan
+Filename: KozGoPro-Regular.otf
+
+Name: KozGoProVI-Bold
+Type: CID
+Class: Japan
+Provides(80): FutoGoB101-Bold
+Provides(80): FutoGoB101Pro-Bold
+Filename: KozGoProVI-Bold.otf
+
+Name: KozGoProVI-Heavy
+Type: CID
+Class: Japan
+Provides(80): Jun101-Light
+Provides(80): Jun101Pro-Light
+Provides(80): MidashiGo-MB31
+Provides(80): MidashiGoPro-MB31
+Filename: KozGoProVI-Heavy.otf
+
+Name: KozGoProVI-Medium
+Type: CID
+Class: Japan
+Provides(80): GothicBBB-Medium
+Provides(80): GothicBBBPro-Medium
+Filename: KozGoProVI-Medium.otf
+
+Name: KozGoProVI-Regular
+Type: CID
+Class: Japan
+Filename: KozGoProVI-Regular.otf
+
+Name: KozMinPr6N-Bold
+Type: CID
+Class: Japan
+Provides(70): FutoMinA101-Bold
+Provides(70): FutoMinA101Pro-Bold
+Filename: KozMinPr6N-Bold.otf
+
+Name: KozMinPr6N-Light
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Light.otf
+
+Name: KozMinPr6N-Regular
+Type: CID
+Class: Japan
+Provides(70): Ryumin-Light
+Provides(70): RyuminPro-Light
+Filename: KozMinPr6N-Regular.otf
+
+Name: KozMinPro-Bold
+Type: CID
+Class: Japan
+Provides(90): FutoMinA101-Bold
+Provides(90): FutoMinA101Pro-Bold
+Filename: KozMinPro-Bold.otf
+
+Name: KozMinPro-Light
+Type: CID
+Class: Japan
+Filename: KozMinPro-Light.otf
+
+Name: KozMinPro-Regular
+Type: CID
+Class: Japan
+Provides(90): Ryumin-Light
+Provides(90): RyuminPro-Light
+Filename: KozMinPro-Regular.otf
+
+Name: KozMinProVI-Bold
+Type: CID
+Class: Japan
+Provides(80): FutoMinA101-Bold
+Provides(80): FutoMinA101Pro-Bold
+Filename: KozMinProVI-Bold.otf
+
+Name: KozMinProVI-Light
+Type: CID
+Class: Japan
+Filename: KozMinProVI-Light.otf
+
+Name: KozMinProVI-Regular
+Type: CID
+Class: Japan
+Provides(80): Ryumin-Light
+Provides(80): RyuminPro-Light
+Filename: KozMinProVI-Regular.otf
+
+Name: KozMinPr6N-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-ExtraLight.otf
+
+Name: KozMinPr6N-Medium
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Medium.otf
+
+Name: KozMinPr6N-Heavy
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Heavy.otf
+
+Name: KozMinPro-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozMinPro-ExtraLight.otf
+
+Name: KozMinPro-Medium
+Type: CID
+Class: Japan
+Filename: KozMinPro-Medium.otf
+
+Name: KozMinPro-Heavy
+Type: CID
+Class: Japan
+Filename: KozMinPro-Heavy.otf
+
+
+#
+# CHINESE FONTS
+#
+
+Name: LiHeiPro
+Type: TTF
+Class: CNS
+Provides(50): MHei-Medium
+Filename(20): 儷黑 Pro.ttf
+Filename(10): LiHeiPro.ttf
+
+Name: LiSongPro
+Type: TTF
+Class: CNS
+# Provides(50): MSung-Medium
+Provides(50): MSung-Light
+Filename(20): 儷宋 Pro.ttf
+Filename(10): LiSongPro.ttf
+
+Name: STXihei
+Type: TTF
+Class: GB
+Provides(20): STHeiti-Light
+Filename(20): 华文细黑.ttf
+Filename(10): STXihei.ttf
+
+Name: STHeiti
+Type: TTF
+Class: GB
+Provides(50): STHeiti-Regular
+Filename(20): 华文黑体.ttf
+Filename(10): STHeiti.ttf
+
+Name: STHeitiSC-Light
+Type: TTF
+Class: GB
+Provides(10): STHeiti-Light
+Filename(10): STHeiti Light.ttc(1)
+Filename(20): STHeitiSC-Light.ttf
+
+Name: STHeitiSC-Medium
+Type: TTF
+Class: GB
+Provides(40): STHeiti-Regular
+Filename(10): STHeiti Medium.ttc(1)
+Filename(20): STHeitiSC-Medium.ttf
+
+Name: STHeitiTC-Light
+Type: TTF
+Class: CNS
+Filename(10): STHeiti Light.ttc(0)
+Filename(20): STHeitiTC-Light.ttf
+
+Name: STHeitiTC-Medium
+Type: TTF
+Class: CNS
+Provides(40): MHei-Medium
+Filename(10): STHeiti Medium.ttc(0)
+Filename(20): STHeitiTC-Medium.ttf
+
+Name: STFangsong
+Type: TTF
+Class: GB
+# Provides(40): STFangsong-Light
+Provides(40): STFangsong-Regular
+Filename(20): 华文仿宋.ttf
+Filename(10): STFangsong.ttf
+
+Name: STSong
+Type: TTF
+Class: GB
+Provides(50): STSong-Light
+Filename(10): Songti.ttc(4)
+Filename(20): 宋体.ttc(3)
+Filename(30): 华文宋体.ttf
+Filename(40): STSong.ttf
+
+Name: STSongti-SC-Light
+Type: TTF
+Class: GB
+Provides(40): STSong-Light
+Filename(10): Songti.ttc(3)
+Filename(20): 宋体.ttc(2)
+Filename(30): STSongti-SC-Light.ttf
+
+Name: STSongti-SC-Regular
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(6)
+Filename(20): 宋体.ttc(4)
+Filename(30): STSongti-SC-Regular.ttf
+
+Name: STSongti-SC-Bold
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(1)
+Filename(20): 宋体.ttc(1)
+Filename(30): STSongti-SC-Bold.ttf
+
+Name: STSongti-SC-Black
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(0)
+Filename(20): 宋体.ttc(0)
+Filename(30): STSongti-SC-Black.ttf
+
+Name: STSongti-TC-Light
+Type: TTF
+Class: CNS
+Provides(40): MSung-Light
+Filename(10): Songti.ttc(5)
+Filename(20): STSongti-TC-Light.ttf
+
+Name: STSongti-TC-Regular
+Type: TTF
+Class: CNS
+# Provides(40): MSung-Medium
+Filename(10): Songti.ttc(7)
+Filename(20): STSongti-TC-Regular.ttf
+
+Name: STSongti-TC-Bold
+Type: TTF
+Class: CNS
+Filename(10): Songti.ttc(2)
+Filename(20): STSongti-TC-Bold.ttf
+
+Name: STKaiti
+Type: TTF
+Class: GB
+Provides(50): STKaiti-Regular
+Filename(10): Kaiti.ttc(4)
+Filename(20): 楷体.ttc(3)
+Filename(30): 华文楷体.ttf
+Filename(40): STKaiti.ttf
+
+Name: STKaiti-SC-Regular
+Type: TTF
+Class: GB
+Provides(40): STKaiti-Regular
+Filename(10): Kaiti.ttc(3)
+Filename(20): 楷体.ttc(2)
+Filename(30): STKaiti-SC-Regular.ttf
+
+Name: STKaiti-SC-Bold
+Type: TTF
+Class: GB
+Filename(10): Kaiti.ttc(1)
+Filename(20): 楷体.ttc(1)
+Filename(30): STKaiti-SC-Bold.ttf
+
+Name: STKaiti-SC-Black
+Type: TTF
+Class: GB
+Filename(10): Kaiti.ttc(0)
+Filename(20): 楷体.ttc(0)
+Filename(30): STKaiti-SC-Black.ttf
+
+Name: STKaiTi-TC-Regular
+Type: TTF
+Class: CNS
+Provides(40): MKai-Medium
+Filename(10): Kaiti.ttc(5)
+Filename(20): STKaiTi-TC-Regular.ttf
+
+Name: STKaiTi-TC-Bold
+Type: TTF
+Class: CNS
+Filename(10): Kaiti.ttc(2)
+Filename(20): STKaiTi-TC-Bold.ttf
+
+Name: STKaiti-Adobe-CNS1
+Type: TTF
+Class: CNS
+Provides(50): MKai-Medium
+Filename(10): Kaiti.ttc(4)
+Filename(20): 楷体.ttc(3)
+Filename(30): 华文楷体.ttf
+Filename(40): STKaiti.ttf
+
+# Adobe fonts
+
+# simplified chinese
+
+Name: AdobeSongStd-Light
+Type: CID
+Class: GB
+Provides(30): STSong-Light
+Filename(10): AdobeSongStd-Light.otf
+
+Name: AdobeHeitiStd-Regular
+Type: CID
+Class: GB
+Provides(30): STHeiti-Regular
+Provides(30): STHeiti-Light
+Filename(20): AdobeHeitiStd-Regular.otf
+
+Name: AdobeKaitiStd-Regular
+Type: CID
+Class: GB
+Provides(30): STKaiti-Regular
+Filename(20): AdobeKaitiStd-Regular.otf
+
+Name: AdobeFangsongStd-Regular
+Type: CID
+Class: GB
+# Provides(30): STFangsong-Light
+Provides(30): STFangsong-Regular
+Filename(20): AdobeFangsongStd-Regular.otf
+
+# traditional chinese
+
+Name: AdobeMingStd-Light
+Type: CID
+Class: CNS
+Provides(30): MSung-Light
+# Provides(30): MSung-Medium
+Filename(20): AdobeMingStd-Light.otf
+
+Name: AdobeFanHeitiStd-Bold
+Type: CID
+Class: CNS
+Provides(30): MHei-Medium
+Provides(30): MKai-Medium
+Filename(20): AdobeFanHeitiStd-Bold.otf
+
+# korean
+
+Name: AdobeMyungjoStd-Medium
+Type: CID
+Class: Korea
+Provides(20): HYSMyeongJo-Medium
+Filename: AdobeMyungjoStd-Medium.otf
+
+Name: AdobeGothicStd-Bold
+Type: CID
+Class: Korea
+Provides(20): HYGoThic-Medium
+Provides(50): HYRGoThic-Medium
+Filename: AdobeGothicStd-Bold.otf
+
+#
+# KOREAN FONTS
+#
+
+# apple fonts
+
+Name: AppleMyungjo
+Type: TTF
+Class: Korea
+Provides(50): HYSMyeongJo-Medium
+Filename: AppleMyungjo.ttf
+
+Name: AppleGothic
+Type: TTF
+Class: Korea
+Provides(50): HYGoThic-Medium
+Provides(80): HYRGoThic-Medium
+Filename: AppleGothic.ttf
+
+Name: NanumMyeongjo
+Type: TTF
+Class: Korea
+Provides(30): HYSMyeongJo-Medium
+Filename: NanumMyeongjo.ttc(0)
+
+Name: NanumMyeongjoBold
+Type: TTF
+Class: Korea
+Filename: NanumMyeongjo.ttc(1)
+
+Name: NanumMyeongjoExtraBold
+Type: TTF
+Class: Korea
+Filename: NanumMyeongjo.ttc(2)
+
+Name: NanumGothic
+Type: TTF
+Class: Korea
+Provides(30): HYGoThic-Medium
+Provides(60): HYRGoThic-Medium
+Filename: NanumGothic.ttc(0)
+
+Name: NanumGothicBold
+Type: TTF
+Class: Korea
+Filename: NanumGothic.ttc(1)
+
+Name: NanumGothicExtraBold
+Type: TTF
+Class: Korea
+Filename: NanumGothic.ttc(2)
+
+Name: NanumBrush
+Type: TTF
+Class: Korea
+Filename: NanumScript.ttc(0)
+
+Name: NanumPen
+Type: TTF
+Class: Korea
+Filename: NanumScript.ttc(1)
+
+Name: AppleSDGothicNeo-Thin
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Thin.otf
+
+Name: AppleSDGothicNeo-UltraLight
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-UltraLight.otf
+
+Name: AppleSDGothicNeo-Light
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Light.otf
+
+Name: AppleSDGothicNeo-Regular
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Regular.otf
+
+Name: AppleSDGothicNeo-Medium
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Medium.otf
+
+Name: AppleSDGothicNeo-SemiBold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-SemiBold.otf
+
+Name: AppleSDGothicNeo-Bold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Bold.otf
+
+Name: AppleSDGothicNeo-ExtraBold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-ExtraBold.otf
+
+Name: AppleSDGothicNeo-Heavy
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Heavy.otf
+
+#
+# Microsoft Mac Office fonts
+#
+
+# Korea
+
+Name: Gulim
+Type: TTF
+Class: Korea
+Provides(70): HYRGoThic-Medium
+Provides(70): HYGoThic-Medium
+Filename(30): Gulim.ttf
+Filename(50): gulim.ttc
+
+Name: Dotum
+Type: TTF
+Class: Korea
+Provides(40): HYGoThic-Medium
+Filename(50): Dotum.ttf
+
+Name: Batang
+Type: TTF
+Class: Korea
+Provides(40): HYSMyeongJo-Medium
+Filename(50): Batang.ttf
+
+# simplified chinese
+
+Name: SimHei
+Type: TTF
+Class: GB
+Provides(60): STHeiti-Regular
+Provides(60): STKaiti-Regular
+Provides(60): STHeiti-Light
+Filename(50): SimHei.ttf
+
+Name: SimSun
+Type: TTF
+Class: GB
+Provides(60): STSong-Light
+# Provides(60): STFangsong-Light
+Provides(60): STFangsong-Regular
+Filename(50): SimSun.ttf
+
+# traditional chinese
+
+Name: MingLiU
+Type: TTF
+Class: CNS
+Provides(60): MHei-Medium
+Provides(60): MKai-Medium
+# Provides(60): MSung-Medium
+Provides(60): MSung-Light
+Filename(50): MingLiU.ttf
+
+Name: PMingLiU
+Type: TTF
+Class: CNS
+Filename(50): PMingLiU.ttf
+
+# japanese
+
+Name: MS-Gothic
+Type: TTF
+Class: Japan
+Provides(95): GothicBBB-Medium
+Provides(95): GothicBBBPro-Medium
+Provides(95): MidashiGo-MB31
+Provides(95): MidashiGoPro-MB31
+Provides(95): FutoGoB101-Bold
+Provides(95): FutoGoB101Pro-Bold
+Provides(95): MidashiGo-MB31
+Provides(95): MidashiGoPro-MB31
+Provides(95): Jun101-Light
+Provides(95): Jun101Pro-Light
+Filename(50): MS Gothic.ttf
+Filename(30): MS-Gothic.ttf
+
+Name: MS-Mincho
+Type: TTF
+Class: Japan
+Provides(95): Ryumin-Light
+Provides(95): RyuminPro-Light
+Provides(95): FutoMinA101-Bold
+Provides(95): FutoMinA101Pro-Bold
+Filename(50): MS Mincho.ttf
+Filename(30): MS-Mincho.ttf
+
+Name: MS-PGothic
+Type: TTF
+Class: Japan
+Filename(50): MS PGothic.ttf
+Filename(30): MS-PGothic.ttf
+
+Name: MS-PMincho
+Type: TTF
+Class: Japan
+Filename(50): MS PMincho.ttf
+Filename(30): MS-PMincho.ttf
+
+Name: Meiryo
+Type: TTF
+Class: Japan
+Filename(50): Meiryo.ttf
+
+Name: Meiryo-Bold
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Bold.ttf
+Filename(30): Meiryo-Bold.ttf
+
+Name: Meiryo-BoldItalic
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Bold Italic.ttf
+Filename(30): Meiryo-BoldItalic.ttf
+
+Name: Meiryo-Italic
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Italic.ttf
+Filename(30): Meiryo-Italic.ttf
+
+
+### Local Variables:
+### perl-indent-level: 2
+### tab-width: 2
+### indent-tabs-mode: nil
+### End:
+# vim: set tabstop=2 expandtab autoindent:
diff --git a/Master/bin/alpha-linux/cjk-gs-integrate b/Master/bin/alpha-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/alpha-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/amd64-freebsd/cjk-gs-integrate b/Master/bin/amd64-freebsd/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/amd64-freebsd/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/amd64-netbsd/cjk-gs-integrate b/Master/bin/amd64-netbsd/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/amd64-netbsd/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/armel-linux/cjk-gs-integrate b/Master/bin/armel-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/armel-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/armhf-linux/cjk-gs-integrate b/Master/bin/armhf-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/armhf-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/i386-cygwin/cjk-gs-integrate b/Master/bin/i386-cygwin/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/i386-cygwin/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/i386-freebsd/cjk-gs-integrate b/Master/bin/i386-freebsd/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/i386-freebsd/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/i386-linux/cjk-gs-integrate b/Master/bin/i386-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/i386-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/i386-netbsd/cjk-gs-integrate b/Master/bin/i386-netbsd/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/i386-netbsd/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/i386-solaris/cjk-gs-integrate b/Master/bin/i386-solaris/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/i386-solaris/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/mipsel-linux/cjk-gs-integrate b/Master/bin/mipsel-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/mipsel-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/powerpc-linux/cjk-gs-integrate b/Master/bin/powerpc-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/powerpc-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/sparc-solaris/cjk-gs-integrate b/Master/bin/sparc-solaris/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/sparc-solaris/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/universal-darwin/cjk-gs-integrate b/Master/bin/universal-darwin/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/universal-darwin/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/win32/cjk-gs-integrate.exe b/Master/bin/win32/cjk-gs-integrate.exe
new file mode 100755
index 00000000000..5777d90a17a
--- /dev/null
+++ b/Master/bin/win32/cjk-gs-integrate.exe
Binary files differ
diff --git a/Master/bin/x86_64-cygwin/cjk-gs-integrate b/Master/bin/x86_64-cygwin/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/x86_64-cygwin/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-darwin/cjk-gs-integrate b/Master/bin/x86_64-darwin/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/x86_64-darwin/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-linux/cjk-gs-integrate b/Master/bin/x86_64-linux/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/x86_64-linux/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-solaris/cjk-gs-integrate b/Master/bin/x86_64-solaris/cjk-gs-integrate
new file mode 120000
index 00000000000..d3959d099b7
--- /dev/null
+++ b/Master/bin/x86_64-solaris/cjk-gs-integrate
@@ -0,0 +1 @@
+../../texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl \ No newline at end of file
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/ChangeLog b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/ChangeLog
new file mode 100644
index 00000000000..1bd7f43821f
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/ChangeLog
@@ -0,0 +1,248 @@
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * Release 20150506.0 (HEAD, master) [24db8e7]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * add a release script [593eb64]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * genrated md and help output from the same source [32c57ed]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * add /Library/Fonts/Microsoft to search path, add --link-texmflocal option (origin/master, origin/HEAD) [fc80300]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * provide family like aliases [32a827a]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * remove provides for two imaginary fonts ;-) [f55f662]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * add more Kozuka fonts (not used in jfontmaps) [32d46e9]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * make gulim provide HyGoThic-Medium in case Dotum is not available [b41adbb]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * STKaiti-Adobe-CNS1 update from Bruno [40ad49f]
+
+2015-05-06 Norbert Preining <norbert@preining.info>
+
+ * add MidashiGo(Pro) provides, fix FutoMin provides for IPA [a173ce6]
+
+2015-04-24 Norbert Preining <norbert@preining.info>
+
+ * make link checking more resilient to errors [fa083ce]
+
+2015-04-24 Norbert Preining <norbert@preining.info>
+
+ * terminate immediately on windows, add some TODOs [8a12b5a]
+
+2015-04-24 Norbert Preining <norbert@preining.info>
+
+ * adjust prefs, add warning when provide priorities agree [c1fffb1]
+
+2015-04-24 Norbert Preining <norbert@preining.info>
+
+ * add more fonts from Microsoft 2015 for Apple [d9348d4]
+
+2015-04-24 Norbert Preining <norbert@preining.info>
+
+ * add --list-all-aliases command [c040122]
+
+2015-04-23 Norbert Preining <norbert@preining.info>
+
+ * add --force option [e4d9ce5]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * add decomposed form filenames for HFS [28c79ea]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * add support for reading files from file list, fix some fonts [a6a4c34]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * update README.md [3d5090f]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * lots of changes, automated testing [8c73fa0]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * order alias output [66bbe4a]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * really fix Morisawa fonts [21be97b]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * make morisawa fonts work [9462210]
+
+2015-04-21 Norbert Preining <norbert@preining.info>
+
+ * add Gulim fonts for HYRGoThic-Medium [1acf5f3]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * remove the strange alias with extra - at the end [5105987]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * add ~/Library/Fonts and /Network/Library/Fonts on unix/mac add alas for HYRGoThic-Medium [7c8f87f]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * link ttf fonts *not* into Font dir, but into CIDFSubst [513adae]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * first step in Morisawa support, add PSName to font database [ef59d24]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * provide more Foobar- font names for GhostScript [7288e8c]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * sort alias names, remove last Std alias [2d47a81]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * rank Adobe CK fonts higher, fix list aliases ouput [0d4b693]
+
+2015-04-20 Norbert Preining <norbert@preining.info>
+
+ * add priority to output of aliases [cb5b296]
+
+2015-04-19 Norbert Preining <norbert@preining.info>
+
+ * list aliases separated in categories [751a7ee]
+
+2015-04-19 Norbert Preining <norbert@preining.info>
+
+ * add entries for Adobe's CK fonts [8c9fb77]
+
+2015-04-19 Norbert Preining <norbert@preining.info>
+
+ * add more strange provides ... [6567c15]
+
+2015-04-19 Norbert Preining <norbert@preining.info>
+
+ * add more aliases after dicsussion with Bruno [e1d089c]
+
+2015-04-16 Norbert Preining <norbert@preining.info>
+
+ * formatting [2f07c70]
+
+2015-04-16 Norbert Preining <norbert@preining.info>
+
+ * README.md and help output editing [ffd1988]
+
+2015-04-16 Norbert Preining <norbert@preining.info>
+
+ * update README.md [b6667d5]
+
+2015-04-16 Norbert Preining <norbert@preining.info>
+
+ * lots of updates, in particular ttf linking and user aliases [060376a]
+
+2015-04-14 Norbert Preining <norbert@preining.info>
+
+ * priorities for file names, unify priority writing [1d2727f]
+
+2015-04-13 Norbert Preining <norbert@preining.info>
+
+ * remove font-definitions.txt, always outdated [b532745]
+
+2015-04-13 Norbert Preining <norbert@preining.info>
+
+ * add more alias for Korean [c610bb8]
+
+2015-04-13 Norbert Preining <norbert@preining.info>
+
+ * add TODO, gitingore, and some tests [8f4de68]
+
+2015-04-13 Norbert Preining <norbert@preining.info>
+
+ * fixes for Korean [287b64d]
+
+2015-04-11 Norbert Preining <norbert@preining.info>
+
+ * fix subfonts in ttcs, add more fonts for Korea (not working) [243b61e]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * more name fixes from Bruno [33fb493]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * update font-definitions file [fb1135a]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * Korean support (hopefully), fix some name errors [1bb8aed]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * add some provides for TC SC and Korean, and fixes, thanks Bruno [5b754be]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * fix spaces in file names [d7b1ab8]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * fix Dumper usage [05e5789]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * load Data::Dumper only when debugging [a839074]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * add font-definitions for ease of access, but not really used [35302c0]
+
+2015-04-08 Norbert Preining <norbert@preining.info>
+
+ * fully working script including aliases [283d64a]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * more or less fully functional [88a478b]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * fix typo in cjk-font-definitons [eed0614]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * bummer [d111a8d]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * fix warning for missing font defs [4130ced]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * don't bail out if gs is not found, for now [b625240]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * more work [5b4489d]
+
+2015-04-07 Norbert Preining <norbert@preining.info>
+
+ * first commit [8011270]
+
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/README.md b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/README.md
new file mode 100644
index 00000000000..b460467c14a
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/README.md
@@ -0,0 +1,170 @@
+Configuring GhostScript for CJK CID/TTF fonts
+=============================================
+
+This script searches a list of directories for CJK fonts, and makes
+them available to an installed GhostScript. In the simplest case with
+sufficient privileges, a run without arguments should effect in a
+complete setup of GhostScript.
+
+Usage
+-----
+
+`````
+[perl] cjk-gs-integrate[.pl] [OPTIONS]
+`````
+
+#### Options ####
+
+`````
+ -n, --dry-run do not actually output anything
+ -f, --fontdef FILE specify alternate set of font definitions, if not
+ given, the built-in set is used
+ -o, --output DIR specifies the base output dir, if not provided,
+ the Resource directory of an install GhostScript
+ is searched and used.
+ -a, --alias LL=RR defines an alias, or overrides a given alias
+ illegal if LL is provided by a real font, or
+ RR is neither available as real font or alias
+ can be given multiple times
+ --filelist FILE read list of available font files from FILE
+ instead of searching with kpathsea
+ --link-texmflocal link fonts into
+ TEXMFLOCAL/fonts/opentype/cjk-gs-integrate
+ and
+ TEXMFLOCAL/fonts/truetype/cjk-gs-integrate
+ --machine-readable output of --list-aliases is machine readable
+ --force do not bail out if linked fonts already exist
+ -q, --quiet be less verbose
+ -d, --debug output debug information, can be given multiple times
+ -v, --version outputs only the version information
+ -h, --help this help
+`````
+
+#### Command like options ####
+
+`````
+ --only-aliases do only regenerate the cidfmap.alias file instead of all
+ --list-aliases lists the available aliases and their options, with the
+ selected option on top
+ --list-all-aliases list all possible aliases without searching for actually
+ present files
+ --list-fonts lists the fonts found on the system
+ --info combines the above two information
+`````
+
+Operation
+---------
+
+For each found TrueType (TTF) font it creates a cidfmap entry in
+
+ <Resource>/Init/cidfmap.local
+
+and links the font to
+
+ <Resource>/CIDFSubst/
+
+For each CID font it creates a snippet in
+
+ <Resource>/Font/
+
+and links the font to
+
+ <Resource>/CIDFont/
+
+The `<Resource>` dir is either given by `-o`/`--output`, or otherwise searched
+from an installed GhostScript (binary name is assumed to be 'gs').
+
+Aliases are added to
+
+ <Resource>/Init/cidfmap.aliases
+
+Finally, it tries to add runlib calls to
+
+ <Resource>/Init/cidfmap
+
+to load the cidfmap.local and cidfmap.aliases.
+
+How and which directories are searched
+--------------------------------------
+
+Search is done using the kpathsea library, in particular using kpsewhich
+program. By default the following directories are searched:
+ - all TEXMF trees
+ - `/Library/Fonts`, `/Library/Fonts/Microsoft`, `/System/Library/Fonts`,
+ `/Network/Library/Fonts`, and `~/Library/Fonts` (all if available)
+ - `c:/windows/fonts` (on Windows)
+ - the directories in `OSFONTDIR` environment variable
+
+In case you want to add some directories to the search path, adapt the
+`OSFONTDIR` environment variable accordingly: Example:
+
+`````
+ OSFONTDIR="/usr/local/share/fonts/truetype//:/usr/local/share/fonts/opentype//" $prg
+`````
+
+will result in fonts found in the above two given directories to be
+searched in addition.
+
+Output files
+------------
+
+If no output option is given, the program searches for a GhostScript
+interpreter 'gs' and determines its Resource directory. This might
+fail, in which case one need to pass the output directory manually.
+
+Since the program adds files and link to this directory, sufficient
+permissions are necessary.
+
+Aliases
+-------
+
+Aliases are managed via the Provides values in the font database.
+At the moment entries for the basic font names for CJK fonts
+are added:
+
+Japanese:
+
+ Ryumin-Light GothicBBB-Medium FutoMinA101-Bold FutoGoB101-Bold Jun101-Light
+
+Korean:
+
+ HYGoThic-Medium HYSMyeongJo-Medium
+
+Simplified Chinese:
+
+ STSong-Light STHeiti-Regular STHeiti-Light STKaiti-Regular
+
+Traditional Chinese:
+
+ MSung-Light MHei-Medium MKai-Medium
+
+In addition, we also includes provide entries for the OTF Morisawa names:
+ RyuminPro-Light GothicBBBPro-Medium FutoMinA101Pro-Bold
+ FutoGoB101Pro-Bold Jun101Pro-Light
+
+The order is determined by the Provides setting in the font database,
+and for the Japanese fonts it is currently:
+ Morisawa Pr6, Morisawa, Hiragino ProN, Hiragino,
+ Yu OSX, Yu Win, Kozuka ProN, Kozuka, IPAex, IPA
+
+That is, the first font found in this order will be used to provide the
+alias if necessary.
+
+#### Overriding aliases ####
+
+Using the command line option `--alias LL=RR` one can add arbitrary aliases,
+or override ones selected by the program. For this to work the following
+requirements of `LL` and `RR` must be fulfilled:
+ * `LL` is not provided by a real font
+ * `RR` is available either as real font, or as alias (indirect alias)
+
+Authors, Contributors, and Copyright
+------------------------------------
+
+The script and its documentation was written by Norbert Preining, based
+on research and work by Yusuke Kuroki, Bruno Voisin, Munehiro Yamamoto
+and the TeX Q&A wiki page.
+
+The script is licensed under GNU General Public License Version 3 or later.
+The contained font data is not copyrightable.
+
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/macosx-filelist b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/macosx-filelist
new file mode 100644
index 00000000000..1dcba5e404e
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/macosx-filelist
@@ -0,0 +1,45 @@
+/Library/Fonts/Yu Mincho Medium.otf
+/Library/Fonts/Yu Mincho Demibold.otf
+/Library/Fonts/Yu Gothic Medium.otf
+/Library/Fonts/Yu Gothic Bold.otf
+/System/Library/Fonts/ヒラギノ明朝 ProN W6.otf
+/System/Library/Fonts/ヒラギノ明朝 ProN W3.otf
+/Library/Fonts/ヒラギノ明朝 Pro W6.otf
+/Library/Fonts/ヒラギノ明朝 Pro W3.otf
+/Library/Fonts/ヒラギノ丸ゴ ProN W4.otf
+/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf
+/Library/Fonts/ヒラギノ角ゴ StdN W8.otf
+/Library/Fonts/ヒラギノ角ゴ Std W8.otf
+/System/Library/Fonts/ヒラギノ角ゴ ProN W6.otf
+/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf
+/Library/Fonts/ヒラギノ角ゴ Pro W6.otf
+/Library/Fonts/ヒラギノ角ゴ Pro W3.otf
+/Library/Fonts/Hiragino Sans GB W6.otf
+/Library/Fonts/Hiragino Sans GB W3.otf
+/Library/Fonts/AppleSDGothicNeo-UltraLight.otf
+/Library/Fonts/AppleSDGothicNeo-Thin.otf
+/Library/Fonts/AppleSDGothicNeo-SemiBold.otf
+/System/Library/Fonts/AppleSDGothicNeo-Regular.otf
+/Library/Fonts/AppleSDGothicNeo-Medium.otf
+/Library/Fonts/AppleSDGothicNeo-Light.otf
+/Library/Fonts/AppleSDGothicNeo-Heavy.otf
+/Library/Fonts/AppleSDGothicNeo-ExtraBold.otf
+/System/Library/Fonts/AppleSDGothicNeo-Bold.otf
+/Library/Fonts/华文细黑.ttf
+/Library/Fonts/华文黑体.ttf
+/System/Library/Fonts/STHeiti Medium.ttc
+/System/Library/Fonts/STHeiti Light.ttc
+/Library/Fonts/华文仿宋.ttf
+/Library/Fonts/Songti.ttc
+/Library/Fonts/NanumScript.ttc
+/Library/Fonts/NanumMyeongjo.ttc
+/Library/Fonts/NanumGothic.ttc
+/Library/Fonts/儷宋 Pro.ttf
+/Library/Fonts/儷黑 Pro.ttf
+/Library/Fonts/Kaiti.ttc
+/Library/TeX/Root/texmf-dist/fonts/truetype/public/ipaex/ipam.ttf
+/Library/TeX/Root/texmf-dist/fonts/truetype/public/ipaex/ipag.ttf
+/Library/TeX/Root/texmf-dist/fonts/truetype/public/ipaex/ipaexm.ttf
+/Library/TeX/Root/texmf-dist/fonts/truetype/public/ipaex/ipaexg.ttf
+/Library/Fonts/AppleMyungjo.ttf
+/Library/Fonts/AppleGothic.ttf
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/Makefile b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/Makefile
new file mode 100644
index 00000000000..0a4847f36c6
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/Makefile
@@ -0,0 +1,12 @@
+
+
+all = gb cns korea japan
+
+$(all) all:
+ bash test-runner.sh $@
+
+clean:
+ rm -f *.log *.dvi *.aux
+
+realclean: clean
+ rm -f *.pdf *.ps
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-CNS1.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-CNS1.tex
new file mode 100644
index 00000000000..6f8c9653acb
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-CNS1.tex
@@ -0,0 +1,40 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-CNS1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\
+ 3 & \colorsample{3} \\
+ 4 & \colorsample{4} \\
+ 5 & \colorsample{5} \\
+ 6 & \colorsample{6} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,957}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>14098 \global\advance\supplement by 1\fi\or
+\ifnum\code>17407 \global\advance\supplement by 1\fi\or
+\ifnum\code>17600 \global\advance\supplement by 1\fi\or
+\ifnum\code>18845 \global\advance\supplement by 1\fi\or
+\ifnum\code>18964 \global\advance\supplement by 1\fi\or
+\ifnum\code>19087 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 19156
+ \colorbox{\colorname{\supplement}}{\CIDT{\code}}\
+\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-012.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-012.tex
new file mode 100644
index 00000000000..1126a53364b
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-012.tex
@@ -0,0 +1,38 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-GB1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\
+ 3 & \colorsample{3} \\
+ 4 & \colorsample{4} \\
+ 5 & \colorsample{5} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,1514}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>7716 \global\advance\supplement by 1\fi\or
+\ifnum\code>9896 \global\advance\supplement by 1\fi\or
+\ifnum\code>22126 \global\advance\supplement by 1\fi\or
+\ifnum\code>22352 \global\advance\supplement by 1\fi\or
+\ifnum\code>29063 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 22353
+ \colorbox{\colorname{\supplement}}{\CIDC{\code}}\
+\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-345.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-345.tex
new file mode 100644
index 00000000000..05f0d11a331
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1-345.tex
@@ -0,0 +1,39 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-GB1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\
+ 3 & \colorsample{3} \\
+ 4 & \colorsample{4} \\
+ 5 & \colorsample{5} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,1514}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>7716 \global\advance\supplement by 1\fi\or
+\ifnum\code>9896 \global\advance\supplement by 1\fi\or
+\ifnum\code>22126 \global\advance\supplement by 1\fi\or
+\ifnum\code>22352 \global\advance\supplement by 1\fi\or
+\ifnum\code>29063 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 30284
+ \ifnum\code > 22126
+ \colorbox{\colorname{\supplement}}{\CIDC{\code}}\
+\fi\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1.tex
new file mode 100644
index 00000000000..fc519fd6e54
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-GB1.tex
@@ -0,0 +1,38 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-GB1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\
+ 3 & \colorsample{3} \\
+ 4 & \colorsample{4} \\
+ 5 & \colorsample{5} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,1514}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>7716 \global\advance\supplement by 1\fi\or
+\ifnum\code>9896 \global\advance\supplement by 1\fi\or
+\ifnum\code>22126 \global\advance\supplement by 1\fi\or
+\ifnum\code>22352 \global\advance\supplement by 1\fi\or
+\ifnum\code>29063 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 30284
+ \colorbox{\colorname{\supplement}}{\CIDC{\code}}\
+\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Japan1.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Japan1.tex
new file mode 100644
index 00000000000..05d51c9e3df
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Japan1.tex
@@ -0,0 +1,40 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-Japan1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\
+ 3 & \colorsample{3} \\
+ 4 & \colorsample{4} \\
+ 5 & \colorsample{5} \\
+ 6 & \colorsample{6} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,1152}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>8283 \global\advance\supplement by 1\fi\or
+\ifnum\code>8358 \global\advance\supplement by 1\fi\or
+\ifnum\code>8719 \global\advance\supplement by 1\fi\or
+\ifnum\code>9353 \global\advance\supplement by 1\fi\or
+\ifnum\code>15443 \global\advance\supplement by 1\fi\or
+\ifnum\code>20316 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 23058
+ \colorbox{\colorname{\supplement}}{\CID{\code}}\
+\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Korea1.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Korea1.tex
new file mode 100644
index 00000000000..a528daef869
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/adobe-Korea1.tex
@@ -0,0 +1,32 @@
+\ifx\dviware\undefined \def\dviware{dvipdfmx}\fi
+\documentclass[\dviware]{jsarticle}
+\usepackage{cidtable}
+
+\begin{document}
+\begin{center}
+Adobe-Korea1 Glyphs\\
+ \begin{tabular}{ll} \hline
+ Supplement & Color \\ \hline
+ 0 & \colorsample{0} \\
+ 1 & \colorsample{1} \\
+ 2 & \colorsample{2} \\ \hline
+ \end{tabular}
+\end{center}
+
+\newcount\code\global\code=0
+\newcount\supplement\global\supplement=0
+
+\noindent
+\foreach \row in {0,...,917}{%
+\hbox to 7ex{\hfill\number\code}\quad
+\foreach \col in {0,...,19}{%
+\ifcase\supplement%
+\ifnum\code>9332 \global\advance\supplement by 1\fi\or
+\ifnum\code>18154 \global\advance\supplement by 1\fi\fi
+\ifnum\code < 18352
+ \colorbox{\colorname{\supplement}}{\CIDK{\code}}\
+\fi
+\global\advance\code by 1
+}\\
+}
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/cidtable.sty b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/cidtable.sty
new file mode 100644
index 00000000000..6d58d40cd64
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/cidtable.sty
@@ -0,0 +1,21 @@
+\usepackage[deluxe, expert, multi]{otf}
+\usepackage{pgffor}
+\usepackage{color}
+\setlength{\fboxsep}{0pt}
+%\setlength{\fboxrule}{0.2pt}
+\definecolor{UClightgray}{cmyk}{.15,.10,.10,0}
+\definecolor{UClightpink}{cmyk}{0,.25,.15,0}
+\definecolor{UClightyellowgreen}{cmyk}{.25,0,.80,0}
+\definecolor{UClightskyblue}{cmyk}{.30,0,0,0}
+\definecolor{UCbeige}{cmyk}{0,.25,.45,0}
+\definecolor{UClightgreen}{cmyk}{.45,0,.45,0}
+\definecolor{UCcream}{cmyk}{0,0,.40,0}
+\definecolor{UClightpurple}{cmyk}{.25,.30,0,0}
+
+\newcommand\colorname[1]{\ifcase#1%
+UClightpink\or
+UClightyellowgreen\or UClightskyblue\or UCbeige\or
+UClightgreen\or UCcream\or UClightpurple\fi}
+\newcommand{\colorsample}[1]{{\color{\colorname{#1}}\rule{10pt}{10pt}} \colorname{#1}}
+
+\endinput
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/do-tests b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/do-tests
new file mode 100644
index 00000000000..33b52d61630
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/do-tests
@@ -0,0 +1,11 @@
+
+PATH=~/tl/2014/bin/x86_64-linux/:$PATH
+export PATH
+
+platex prn-variants.tex
+for i in hiragino hiragino-pron kozuka-pr6n kozuka morisawa yu-win yu-osx ipa ipaex ; do
+ kanji-config-updmap-sys $i
+ dvips prn-variants.dvi -o prn-variants-$i.ps
+ ps2pdf prn-variants-$i.ps
+done
+
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/prn-variants.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/prn-variants.tex
new file mode 100755
index 00000000000..a1495a5b164
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/prn-variants.tex
@@ -0,0 +1,12 @@
+\documentclass{jsarticle}
+\usepackage[deluxe]{otf}
+
+\begin{document}\noindent
+\begin{tabular}{ll}
+ Mincho & {いくつかの漢字の例です:葛芦辻逗飴薩晦茨祇巷卿鯖溢噌} \\
+ Mincho bold & {\bfseries いくつかの漢字の例です:葛芦辻逗飴薩晦茨祇巷卿鯖溢噌} \\
+ Gothic & {\gtfamily いくつかの漢字の例です:葛芦辻逗飴薩晦茨祇巷卿鯖溢噌} \\
+ Gothic bold & {\gtfamily\bfseries いくつかの漢字の例です:葛芦辻逗飴薩晦茨祇巷卿鯖溢噌} \\
+ Maru gothic & {\mgfamily いくつかの漢字の例です:葛芦辻逗飴薩晦茨祇巷卿鯖溢噌}
+\end{tabular}
+\end{document} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/report b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/report
new file mode 100644
index 00000000000..7568e267707
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/japanese-updmap-tests/report
@@ -0,0 +1,4 @@
+Yu-Win:
+ YuGothic-Regular-H not found
+ seems to be problematic
+
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/otfcidsample.tex b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/otfcidsample.tex
new file mode 100644
index 00000000000..e1a03ba5a98
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/otfcidsample.tex
@@ -0,0 +1,46 @@
+% -*- coding: utf-8-unix -*-
+\documentclass{jsarticle}
+\usepackage[deluxe,multi]{otf}
+\newcommand{\sampleSC}{\UTFC{76F4}\UTFC{9AA8}}
+\newcommand{\sampleTC}{\UTFT{76F4}\UTFT{9AA8}}
+\newcommand{\sampleJ}{\UTF{76F4}\UTF{9AA8}}
+\newcommand{\sampleK}{\UTFK{76F4}\UTFK{9AA8}}
+
+\begin{document}\noindent
+\begin{center}
+ \begin{tabular}{lllll}
+ & SC & TC & J & K\\
+ Serif
+ & {\sampleSC}
+ & %{\sampleTC}
+ & {\sampleJ}
+ & {\sampleK}
+ \\
+ Serif bold
+ & %{\bfseries\sampleSC}
+ & %{\bfseries\sampleTC}
+ & {\bfseries\sampleJ}
+ & {\bfseries\sampleK}
+ \\
+ Sans serif
+ & {\gtfamily\sampleSC}
+ & %{\gtfamily\sampleTC}
+ & {\gtfamily\sampleJ}
+ & {\gtfamily\sampleK}
+ \\
+ Sans serif bold
+ & %{\gtfamily\bfseries\sampleSC}
+ & %{\gtfamily\bfseries\sampleTC}
+ & {\gtfamily\bfseries\sampleJ}
+ & {\gtfamily\bfseries\sampleK}
+ \\
+ Sans serif variant
+ & %{\mgfamily\sampleSC}
+ & %{\mgfamily\sampleTC}
+ & {\mgfamily\sampleJ}
+ & {\mgfamily\sampleK}
+ \end{tabular}
+\end{center}
+
+Note. SC: Simplified Chinese, TC: Traditional Chinese, J: Japanese, K: Korean.
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/test-runner.sh b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/test-runner.sh
new file mode 100644
index 00000000000..2f903064cf5
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tests/test-runner.sh
@@ -0,0 +1,96 @@
+#! /bin/sh
+
+
+do_gb() {
+# simplified chinese uses STSong-Light
+platex "\def\dviware{dvipdfmx}\input adobe-GB1-012.tex" && \
+ dvipdfmx -o adobe-GB1-012.dvipdfmx.pdf adobe-GB1-012.dvi
+platex "\def\dviware{dvips}\input adobe-GB1-012.tex" && \
+ dvips adobe-GB1-012.dvi
+platex "\def\dviware{dvipdfmx}\input adobe-GB1-345.tex" && \
+ dvipdfmx -o adobe-GB1-345.dvipdfmx.pdf adobe-GB1-345.dvi
+platex "\def\dviware{dvips}\input adobe-GB1-345.tex" && \
+ dvips adobe-GB1-345.dvi
+
+for i in `perl ../cjk-gs-integrate.pl --list-aliases --machine-readable -q | grep ^STSong-Light: | awk -F: '{print$3}'`; do
+ perl ../cjk-gs-integrate.pl --only-aliases --alias STSong-Light=$i
+ echo ps2pdf adobe-GB1-012.ps -o "adobe-GB1-012-$i.pdf"
+ if ps2pdf adobe-GB1-012.ps "adobe-GB1-012-$i.pdf" > "adobe-GB1-012-$i.ps2pdf.log" 2>&1 ; then
+ echo "success GB1-012 $i" >> status
+ else
+ echo "failure GB1-012 $i" >> status
+ fi
+ echo ps2pdf adobe-GB1-345.ps -o "adobe-GB1-345-$i.pdf"
+ if ps2pdf adobe-GB1-345.ps "adobe-GB1-345-$i.pdf" > "adobe-GB1-345-$i.ps2pdf.log" 2>&1 ; then
+ echo "success GB1-345 $i" >> status
+ else
+ echo "failure GB1-345 $i" >> status
+ fi
+done
+}
+
+
+do_cns() {
+# traditional chinese uses MSung-Light
+platex "\def\dviware{dvipdfmx}\input adobe-CNS1.tex" && \
+ dvipdfmx -o adobe-CNS1.dvipdfmx.pdf adobe-CNS1.dvi
+platex "\def\dviware{dvips}\input adobe-CNS1.tex" && \
+ dvips adobe-CNS1.dvi
+for i in `perl ../cjk-gs-integrate.pl --list-aliases --machine-readable -q | grep ^MSung-Light: | awk -F: '{print$3}'`; do
+ perl ../cjk-gs-integrate.pl --only-aliases --alias MSung-Light=$i
+ echo ps2pdf adobe-CNS1.ps -o "adobe-CNS1-$i.pdf"
+ if ps2pdf adobe-CNS1.ps "adobe-CNS1-$i.pdf" > "adobe-CNS1-$i.ps2pdf.log" 2>&1 ; then
+ echo "success CNS1 $i" >> status
+ else
+ echo "failure CNS1 $i" >> status
+ fi
+done
+}
+
+do_korea() {
+# korean uses HYSMyeongJo-Medium
+platex "\def\dviware{dvipdfmx}\input adobe-Korea1.tex" && \
+ dvipdfmx -o adobe-Korea1.dvipdfmx.pdf adobe-Korea1.dvi
+platex "\def\dviware{dvips}\input adobe-Korea1.tex" && \
+ dvips adobe-Korea1.dvi
+for i in `perl ../cjk-gs-integrate.pl --list-aliases --machine-readable -q | grep ^HYSMyeongJo-Medium: | awk -F: '{print$3}'`; do
+ perl ../cjk-gs-integrate.pl --only-aliases --alias HYSMyeongJo-Medium=$i
+ echo ps2pdf adobe-Korea1.ps -o "adobe-Korea1-$i.pdf"
+ if ps2pdf adobe-Korea1.ps "adobe-Korea1-$i.pdf" > "adobe-Korea1-$i.ps2pdf.log" 2>&1 ; then
+ echo "success Korea1 $i" >> status
+ else
+ echo "failure Korea1 $i" >> status
+ fi
+done
+}
+
+do_japan() {
+# japanese uses Ryumin-Light
+platex "\def\dviware{dvipdfmx}\input adobe-Japan1.tex" && \
+ dvipdfmx -o adobe-Japan1.dvipdfmx.pdf adobe-Japan1.dvi
+platex "\def\dviware{dvips}\input adobe-Japan1.tex" && \
+ dvips adobe-Japan1.dvi
+for i in `perl ../cjk-gs-integrate.pl --list-aliases --machine-readable -q | grep ^Ryumin-Light: | awk -F: '{print$3}'`; do
+ perl ../cjk-gs-integrate.pl --only-aliases --alias Ryumin-Light=$i
+ echo ps2pdf adobe-Japan1.ps -o "adobe-Japan1-$i.pdf"
+ if ps2pdf adobe-Japan1.ps "adobe-Japan1-$i.pdf" > "adobe-Japan1-$i.ps2pdf.log" 2>&1 ; then
+ echo "success Japan1 $i" >> status
+ else
+ echo "failure Japan1 $i" >> status
+ fi
+done
+}
+
+if [ "$1" = "gb" -o "$1" = "all" ] ; then
+ do_gb
+fi
+if [ "$1" = "cns" -o "$1" = "all" ] ; then
+ do_cns
+fi
+if [ "$1" = "korea" -o "$1" = "all" ] ; then
+ do_korea
+fi
+if [ "$1" = "japan" -o "$1" = "all" ] ; then
+ do_japan
+fi
+
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/mkgsfntspecs.sh b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/mkgsfntspecs.sh
new file mode 100644
index 00000000000..b0dc2fb9ff4
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/mkgsfntspecs.sh
@@ -0,0 +1,397 @@
+#!/bin/bash
+
+# This program is licensed under the terms of the MIT License.
+#
+# Copyright (c) 2014 Munehiro Yamamoto <munepixyz@gmail.com>
+# Modified 05/04/2015 by Bruno Voisin <bvoisin@mac.com> for testing purposes
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+GSRESDIR=$(pwd)/Work/share/ghostscript/9.16/Resource
+
+echo -n "Checking your Ghostscript's resource directory..."
+[ -d ${GSRESDIR} ] || exit 1
+echo ${GSRESDIR}
+
+#
+# settings for Hiragino fonts
+#
+FontList=(
+ ## Morisawa NewCID
+ Ryumin-Light,Japan
+ GothicBBB-Medium,Japan
+ FutoMinA101-Bold,Japan
+ FutoGoB101-Bold,Japan
+ Jun101-Light,Japan
+ A-OTF-RyuminPro-Light,Japan
+ A-OTF-GothicBBBPro-Medium,Japan
+ A-OTF-FutoMinA101Pro-Bold,Japan
+ A-OTF-FutoGoB101Pro-Bold,Japan
+ A-OTF-Jun101Pro-Light,Japan
+ ## Screen Hiragino bundled in OS X
+ HiraKakuPro-W3,Japan
+ HiraKakuPro-W6,Japan
+ HiraKakuStd-W8,Japan
+ HiraMaruPro-W4,Japan
+ HiraMinPro-W3,Japan
+ HiraMinPro-W6,Japan
+ HiraKakuProN-W3,Japan
+ HiraKakuProN-W6,Japan
+ HiraKakuStdN-W8,Japan
+ HiraMaruProN-W4,Japan
+ HiraMinProN-W3,Japan
+ HiraMinProN-W6,Japan
+ HiraginoSansGB-W3,GB
+ HiraginoSansGB-W6,GB
+ # HiraginoSansCNS-W3,CNS
+ # HiraginoSansCNS-W6,CNS
+ ## Jiyukobo Yu bundled in OS X
+ YuGo-Bold,Japan
+ YuGo-Medium,Japan
+ YuMin-Demibold,Japan
+ YuMin-Medium,Japan
+ ## Japanese IPA fonts bundled in TeX Live
+ IPAexMincho,Japan
+ IPAexGothic,Japan
+ IPAMincho,Japan
+ IPAGothic,Japan
+ ## Chinese fonts bundled in OS X
+ STHeiti,GB
+ STXihei,GB
+ STHeitiSC-Light,GB
+ STHeitiSC-Medium,GB
+ STHeitiTC-Light,GB
+ STHeitiTC-Medium,GB
+ STSong,GB
+ STSongti-SC-Light,GB
+ STSongti-SC-Regular,GB
+ STSongti-SC-Bold,GB
+ STSongti-SC-Black,GB
+ STSongti-TC-Light,GB
+ STSongti-TC-Regular,GB
+ STSongti-TC-Bold,GB
+ STKaiti,GB
+ STKaiti-SC-Regular,GB
+ STKaiti-SC-Bold,GB
+ STKaiti-SC-Black,GB
+ STKaiTi-TC-Regular,GB
+ STKaiTi-TC-Bold,GB
+ STKaiti-Adobe-CNS1,CNS
+ STKaiti-SC-Regular-Adobe-CNS1,CNS
+ STKaiti-SC-Bold-Adobe-CNS1,CNS
+ STKaiti-SC-Black-Adobe-CNS1,CNS
+ STKaiTi-TC-Regular-Adobe-CNS1,CNS
+ STKaiTi-TC-Bold-Adobe-CNS1,CNS
+ STFangsong,GB
+ LiHeiPro,CNS
+ LiSongPro,CNS
+)
+
+EncodeList_Japan=(
+ 78-EUC-H
+ 78-EUC-V
+ 78-H
+ 78-RKSJ-H
+ 78-RKSJ-V
+ 78-V
+ 78ms-RKSJ-H
+ 78ms-RKSJ-V
+ 83pv-RKSJ-H
+ 90ms-RKSJ-H
+ 90ms-RKSJ-V
+ 90msp-RKSJ-H
+ 90msp-RKSJ-V
+ 90pv-RKSJ-H
+ 90pv-RKSJ-V
+ Add-H
+ Add-RKSJ-H
+ Add-RKSJ-V
+ Add-V
+ Adobe-Japan1-0
+ Adobe-Japan1-1
+ Adobe-Japan1-2
+ Adobe-Japan1-3
+ Adobe-Japan1-4
+ Adobe-Japan1-5
+ Adobe-Japan1-6
+ EUC-H
+ EUC-V
+ Ext-H
+ Ext-RKSJ-H
+ Ext-RKSJ-V
+ Ext-V
+ H
+ Hankaku
+ Hiragana
+ Identity-H
+ Identity-V
+ Katakana
+ NWP-H
+ NWP-V
+ RKSJ-H
+ RKSJ-V
+ Roman
+ UniJIS-UCS2-H
+ UniJIS-UCS2-HW-H
+ UniJIS-UCS2-HW-V
+ UniJIS-UCS2-V
+ UniJIS-UTF16-H
+ UniJIS-UTF16-V
+ UniJIS-UTF32-H
+ UniJIS-UTF32-V
+ UniJIS-UTF8-H
+ UniJIS-UTF8-V
+ UniJIS2004-UTF16-H
+ UniJIS2004-UTF16-V
+ UniJIS2004-UTF32-H
+ UniJIS2004-UTF32-V
+ UniJIS2004-UTF8-H
+ UniJIS2004-UTF8-V
+ UniJISPro-UCS2-HW-V
+ UniJISPro-UCS2-V
+ UniJISPro-UTF8-V
+ UniJISX0213-UTF32-H
+ UniJISX0213-UTF32-V
+ UniJISX02132004-UTF32-H
+ UniJISX02132004-UTF32-V
+ V
+ WP-Symbol
+)
+
+EncodeList_GB=(
+ Adobe-GB1-0
+ Adobe-GB1-1
+ Adobe-GB1-2
+ Adobe-GB1-3
+ Adobe-GB1-4
+ Adobe-GB1-5
+ GB-EUC-H
+ GB-EUC-V
+ GB-H
+ GB-RKSJ-H
+ GB-V
+ GBK-EUC-H
+ GBK-EUC-V
+ GBK2K-H
+ GBK2K-V
+ GBKp-EUC-H
+ GBKp-EUC-V
+ GBT-EUC-H
+ GBT-EUC-V
+ GBT-H
+ GBT-RKSJ-H
+ GBT-V
+ GBTpc-EUC-H
+ GBTpc-EUC-V
+ GBpc-EUC-H
+ GBpc-EUC-V
+ Identity-H
+ Identity-V
+ UniGB-UCS2-H
+ UniGB-UCS2-V
+ UniGB-UTF16-H
+ UniGB-UTF16-V
+ UniGB-UTF32-H
+ UniGB-UTF32-V
+ UniGB-UTF8-H
+ UniGB-UTF8-V
+)
+
+EncodeList_CNS=(
+ Adobe-CNS1-0
+ Adobe-CNS1-1
+ Adobe-CNS1-2
+ Adobe-CNS1-3
+ Adobe-CNS1-4
+ Adobe-CNS1-5
+ Adobe-CNS1-6
+ B5-H
+ B5-V
+ B5pc-H
+ B5pc-V
+ CNS-EUC-H
+ CNS-EUC-V
+ CNS1-H
+ CNS1-V
+ CNS2-H
+ CNS2-V
+ ETHK-B5-H
+ ETHK-B5-V
+ ETen-B5-H
+ ETen-B5-V
+ ETenms-B5-H
+ ETenms-B5-V
+ HKdla-B5-H
+ HKdla-B5-V
+ HKdlb-B5-H
+ HKdlb-B5-V
+ HKgccs-B5-H
+ HKgccs-B5-V
+ HKm314-B5-H
+ HKm314-B5-V
+ HKm471-B5-H
+ HKm471-B5-V
+ HKscs-B5-H
+ HKscs-B5-V
+ Identity-H
+ Identity-V
+ UniCNS-UCS2-H
+ UniCNS-UCS2-V
+ UniCNS-UTF16-H
+ UniCNS-UTF16-V
+ UniCNS-UTF32-H
+ UniCNS-UTF32-V
+ UniCNS-UTF8-H
+ UniCNS-UTF8-V
+)
+
+EncodeList_Korea=(
+ Adobe-Korea1-0
+ Adobe-Korea1-1
+ Adobe-Korea1-2
+ Identity-H
+ Identity-V
+ KSC-EUC-H
+ KSC-EUC-V
+ KSC-H
+ KSC-Johab-H
+ KSC-Johab-V
+ KSC-RKSJ-H
+ KSC-V
+ KSCms-UHC-H
+ KSCms-UHC-HW-H
+ KSCms-UHC-HW-V
+ KSCms-UHC-V
+ KSCpc-EUC-H
+ KSCpc-EUC-V
+ UniKS-UCS2-H
+ UniKS-UCS2-V
+ UniKS-UTF16-H
+ UniKS-UTF16-V
+ UniKS-UTF32-H
+ UniKS-UTF32-V
+ UniKS-UTF8-H
+ UniKS-UTF8-V
+)
+
+## mkgsfontspec [fontname] [encode] > [fontspec]
+mkgsfontspec(){
+ local fontname=$1
+ local encode=$2
+ cat <<EOT
+%%!PS-Adobe-3.0 Resource-Font
+%%%%DocumentNeededResources: ${encode} (CMap)
+%%%%IncludeResource: ${encode} (CMap)
+%%%%BeginResource: Font (${fontname}-${encode})
+(${fontname}-${encode})
+(${encode}) /CMap findresource
+[(${fontname}) /CIDFont findresource]
+composefont
+pop
+%%%%EndResource
+%%%%EOF
+EOT
+}
+
+## mkfontspec [fontspec dir]
+mkfontspec(){
+ local FONTSPECDIR=$1
+
+ mkdir -p $FONTSPECDIR
+
+ for i in ${FontList[@]}; do
+ fnt=$(echo $i | cut -f1 -d",")
+ enc=$(echo $i | cut -f2 -d",")
+
+ case $enc in
+ Japan) enclist="${EncodeList_Japan[@]}";;
+ GB) enclist="${EncodeList_GB[@]}";;
+ CNS) enclist="${EncodeList_CNS[@]}";;
+ Korea) enclist="${EncodeList_Korea[@]}";;
+ *) exit 1;;
+ esac
+
+ for j in $enclist; do
+ mkgsfontspec ${fnt} ${j} > ${FONTSPECDIR}/${fnt}-${j}
+ done
+ done
+
+ return 0
+}
+
+## mkcidfonts [cidfonts dir]
+mkcidfonts(){
+ local CIDFONTSDIR=$1
+
+ mkdir -p $CIDFONTSDIR
+ (cd $CIDFONTSDIR
+ rm -f HiraMinPro{,N}-W{3,6}
+ rm -f HiraMaruPro{,N}-W4
+ rm -f HiraKakuPro{,N}-W{3,6}
+ rm -f HiraKakuStd{,N}-W8
+ rm -f HiraginoSansGB-W{3,6}
+
+ ln -s "/Library/Fonts/ヒラギノ明朝 Pro W3.otf" HiraMinPro-W3
+ ln -s "/Library/Fonts/ヒラギノ明朝 Pro W6.otf" HiraMinPro-W6
+ ln -s "/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf" HiraMaruPro-W4
+ ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf" HiraKakuPro-W3
+ ln -s "/Library/Fonts/ヒラギノ角ゴ Pro W6.otf" HiraKakuPro-W6
+ ln -s "/Library/Fonts/ヒラギノ角ゴ Std W8.otf" HiraKakuStd-W8
+ ln -s "/System/Library/Fonts/ヒラギノ明朝 ProN W3.otf" HiraMinProN-W3
+ ln -s "/System/Library/Fonts/ヒラギノ明朝 ProN W6.otf" HiraMinProN-W6
+ ln -s "/Library/Fonts/ヒラギノ丸ゴ ProN W4.otf" HiraMaruProN-W4
+ ln -s "/System/Library/Fonts/ヒラギノ角ゴ ProN W3.otf" HiraKakuProN-W3
+ ln -s "/System/Library/Fonts/ヒラギノ角ゴ ProN W6.otf" HiraKakuProN-W6
+ ln -s "/Library/Fonts/ヒラギノ角ゴ StdN W8.otf" HiraKakuStdN-W8
+ ln -s "/Library/Fonts/Hiragino Sans GB W3.otf" HiraginoSansGB-W3
+ ln -s "/Library/Fonts/Hiragino Sans GB W6.otf" HiraginoSansGB-W6
+
+ rm -f YuMin-{Medium,Demibold}
+ rm -f YuGo-{Medium,Bold}
+
+ ln -s "/Library/Fonts/Yu Mincho Medium.otf" YuMin-Medium
+ ln -s "/Library/Fonts/Yu Mincho Demibold.otf" YuMin-Demibold
+ ln -s "/Library/Fonts/Yu Gothic Medium.otf" YuGo-Medium
+ ln -s "/Library/Fonts/Yu Gothic Bold.otf" YuGo-Bold
+
+ rm -f STHeiti.ttf
+ rm -f STXihei.ttf
+ rm -f STFangsong.ttf
+ rm -f LiHeiPro.ttf
+ rm -f LiSongPro.ttf
+
+ ln -s /Library/Fonts/华文黑体.ttf STHeiti.ttf
+ ln -s /Library/Fonts/华文细黑.ttf STXihei.ttf
+ ln -s /Library/Fonts/华文仿宋.ttf STFangsong.ttf
+ ln -s "/Library/Fonts/儷黑 Pro.ttf" LiHeiPro.ttf
+ ln -s "/Library/Fonts/儷宋 Pro.ttf" LiSongPro.ttf
+ )
+
+ return 0
+}
+
+
+# generate the Ghostscript FontSpec files for the Hiragino fonts
+# bundled on Mac OS X
+mkfontspec ${GSRESDIR}/Font
+mkcidfonts ${GSRESDIR}/CIDFont
+
+echo $(basename $0): done
+
+# end of file
diff --git a/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/release.sh b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/release.sh
new file mode 100755
index 00000000000..33c61cbdf5c
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/cjk-gs-integrate/tools/release.sh
@@ -0,0 +1,53 @@
+#
+# release.sh
+# copied from jfontmaps project and adapted
+
+PROJECT=cjk-gs-integrate
+DIR=`pwd`/..
+VER=${VER:-`date +%Y%m%d.0`}
+
+TEMP=/tmp
+
+echo "Making Release $VER. Ctrl-C to cancel."
+read REPLY
+if test -d "$TEMP/$PROJECT-$VER"; then
+ echo "Warning: the directory '$TEMP/$PROJECT-$VER' is found:"
+ echo
+ ls $TEMP/$PROJECT-$VER
+ echo
+ echo -n "I'm going to remove this directory. Continue? yes/No"
+ echo
+ read REPLY <&2
+ case $REPLY in
+ y*|Y*) rm -rf $TEMP/$PROJECT-$VER;;
+ *) echo "Aborted."; exit 1;;
+ esac
+fi
+echo
+git commit -m "Release $VER" --allow-empty
+git archive --format=tar --prefix=$PROJECT-$VER/ HEAD | (cd $TEMP && tar xf -)
+git --no-pager log --date=short --format='%ad %aN <%ae>%n%n%x09* %s%d [%h]%n' > $TEMP/$PROJECT-$VER/ChangeLog
+cd $TEMP
+rm -rf $PROJECT-$VER-orig
+cp -r $PROJECT-$VER $PROJECT-$VER-orig
+cd $PROJECT-$VER
+rm -f .gitignore
+for i in cjk-gs-integrate.pl ; do
+ perl -pi.bak -e "s/\\\$VER\\\$/$VER/g" $i
+ rm -f ${i}.bak
+done
+cd ..
+diff -urN $PROJECT-$VER-orig $PROJECT-$VER
+tar zcf $DIR/$PROJECT-$VER.tar.gz $PROJECT-$VER
+echo
+echo You should execute
+echo
+echo " git push && git tag $VER && git push origin $VER"
+echo
+echo Informations for submitting CTAN:
+echo " CONTRIBUTION: $PROJECT"
+echo " SUMMARY: Tools to integrate CJK fonts into Ghostscript"
+echo " DIRECTORY: fonts/$PROJECT"
+echo " LICENSE: free/GPLv3"
+echo " FILE: $DIR/$PROJECT-$VER.tar.gz"
+
diff --git a/Master/texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl b/Master/texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl
new file mode 100755
index 00000000000..980e41329be
--- /dev/null
+++ b/Master/texmf-dist/scripts/cjk-gs-integrate/cjk-gs-integrate.pl
@@ -0,0 +1,2179 @@
+#!/usr/bin/env perl
+#
+# cjk-gs-integrate - setup ghostscript for CID/TTF CJK fonts
+#
+# Copyright 2015 by Norbert Preining
+#
+# Based on research and work by Yusuke Kuroki, Bruno Voisin, Munehiro Yamamoto
+# and the TeX Q&A wiki page
+#
+# This file is licensed under GPL version 3 or any later version.
+# For copyright statements see end of file.
+#
+# For development see
+# https://github.com/norbusan/cjk-gs-support
+#
+# TODO:
+# - how to deal with MacTeX pre-shipped configuration files?
+# - interoperability with updmap-config-kanji
+# - input from CK about font priorities
+#
+
+$^W = 1;
+use Getopt::Long qw(:config no_autoabbrev ignore_case_always);
+use File::Basename;
+use strict;
+
+(my $prg = basename($0)) =~ s/\.pl$//;
+my $version = '20150506.0';
+
+if (win32()) {
+ print_error("Sorry, currently not supported on Windows!\n");
+ exit(1);
+}
+
+my %encode_list = (
+ Japan => [ qw/
+ 78-EUC-H
+ 78-EUC-V
+ 78-H
+ 78-RKSJ-H
+ 78-RKSJ-V
+ 78-V
+ 78ms-RKSJ-H
+ 78ms-RKSJ-V
+ 83pv-RKSJ-H
+ 90ms-RKSJ-H
+ 90ms-RKSJ-V
+ 90msp-RKSJ-H
+ 90msp-RKSJ-V
+ 90pv-RKSJ-H
+ 90pv-RKSJ-V
+ Add-H
+ Add-RKSJ-H
+ Add-RKSJ-V
+ Add-V
+ Adobe-Japan1-0
+ Adobe-Japan1-1
+ Adobe-Japan1-2
+ Adobe-Japan1-3
+ Adobe-Japan1-4
+ Adobe-Japan1-5
+ Adobe-Japan1-6
+ EUC-H
+ EUC-V
+ Ext-H
+ Ext-RKSJ-H
+ Ext-RKSJ-V
+ Ext-V
+ H
+ Hankaku
+ Hiragana
+ Identity-H
+ Identity-V
+ Katakana
+ NWP-H
+ NWP-V
+ RKSJ-H
+ RKSJ-V
+ Roman
+ UniJIS-UCS2-H
+ UniJIS-UCS2-HW-H
+ UniJIS-UCS2-HW-V
+ UniJIS-UCS2-V
+ UniJIS-UTF16-H
+ UniJIS-UTF16-V
+ UniJIS-UTF32-H
+ UniJIS-UTF32-V
+ UniJIS-UTF8-H
+ UniJIS-UTF8-V
+ UniJIS2004-UTF16-H
+ UniJIS2004-UTF16-V
+ UniJIS2004-UTF32-H
+ UniJIS2004-UTF32-V
+ UniJIS2004-UTF8-H
+ UniJIS2004-UTF8-V
+ UniJISPro-UCS2-HW-V
+ UniJISPro-UCS2-V
+ UniJISPro-UTF8-V
+ UniJISX0213-UTF32-H
+ UniJISX0213-UTF32-V
+ UniJISX02132004-UTF32-H
+ UniJISX02132004-UTF32-V
+ V
+ WP-Symbol/ ],
+ GB => [ qw/
+ Adobe-GB1-0
+ Adobe-GB1-1
+ Adobe-GB1-2
+ Adobe-GB1-3
+ Adobe-GB1-4
+ Adobe-GB1-5
+ GB-EUC-H
+ GB-EUC-V
+ GB-H
+ GB-RKSJ-H
+ GB-V
+ GBK-EUC-H
+ GBK-EUC-V
+ GBK2K-H
+ GBK2K-V
+ GBKp-EUC-H
+ GBKp-EUC-V
+ GBT-EUC-H
+ GBT-EUC-V
+ GBT-H
+ GBT-RKSJ-H
+ GBT-V
+ GBTpc-EUC-H
+ GBTpc-EUC-V
+ GBpc-EUC-H
+ GBpc-EUC-V
+ Identity-H
+ Identity-V
+ UniGB-UCS2-H
+ UniGB-UCS2-V
+ UniGB-UTF16-H
+ UniGB-UTF16-V
+ UniGB-UTF32-H
+ UniGB-UTF32-V
+ UniGB-UTF8-H
+ UniGB-UTF8-V/ ],
+ CNS => [ qw/
+ Adobe-CNS1-0
+ Adobe-CNS1-1
+ Adobe-CNS1-2
+ Adobe-CNS1-3
+ Adobe-CNS1-4
+ Adobe-CNS1-5
+ Adobe-CNS1-6
+ B5-H
+ B5-V
+ B5pc-H
+ B5pc-V
+ CNS-EUC-H
+ CNS-EUC-V
+ CNS1-H
+ CNS1-V
+ CNS2-H
+ CNS2-V
+ ETHK-B5-H
+ ETHK-B5-V
+ ETen-B5-H
+ ETen-B5-V
+ ETenms-B5-H
+ ETenms-B5-V
+ HKdla-B5-H
+ HKdla-B5-V
+ HKdlb-B5-H
+ HKdlb-B5-V
+ HKgccs-B5-H
+ HKgccs-B5-V
+ HKm314-B5-H
+ HKm314-B5-V
+ HKm471-B5-H
+ HKm471-B5-V
+ HKscs-B5-H
+ HKscs-B5-V
+ Identity-H
+ Identity-V
+ UniCNS-UCS2-H
+ UniCNS-UCS2-V
+ UniCNS-UTF16-H
+ UniCNS-UTF16-V
+ UniCNS-UTF32-H
+ UniCNS-UTF32-V
+ UniCNS-UTF8-H
+ UniCNS-UTF8-V/ ],
+ Korea => [ qw/
+ Adobe-Korea1-0
+ Adobe-Korea1-1
+ Adobe-Korea1-2
+ Identity-H
+ Identity-V
+ KSC-EUC-H
+ KSC-EUC-V
+ KSC-H
+ KSC-Johab-H
+ KSC-Johab-V
+ KSC-RKSJ-H
+ KSC-V
+ KSCms-UHC-H
+ KSCms-UHC-HW-H
+ KSCms-UHC-HW-V
+ KSCms-UHC-V
+ KSCpc-EUC-H
+ KSCpc-EUC-V
+ UniKS-UCS2-H
+ UniKS-UCS2-V
+ UniKS-UTF16-H
+ UniKS-UTF16-V
+ UniKS-UTF32-H
+ UniKS-UTF32-V
+ UniKS-UTF8-H
+ UniKS-UTF8-V/ ] );
+
+my $dry_run = 0;
+my $opt_help = 0;
+my $opt_quiet = 0;
+my $opt_debug = 0;
+my $opt_listaliases = 0;
+my $opt_listallaliases = 0;
+my $opt_listfonts = 0;
+my $opt_info = 0;
+my $opt_fontdef;
+my $opt_output;
+my @opt_aliases;
+my $opt_only_aliases = 0;
+my $opt_machine = 0;
+my $opt_filelist;
+my $opt_force = 0;
+my $opt_texmflink = 0;
+my $opt_markdown = 0;
+
+if (! GetOptions(
+ "n|dry-run" => \$dry_run,
+ "info" => \$opt_info,
+ "list-aliases" => \$opt_listaliases,
+ "list-all-aliases" => \$opt_listallaliases,
+ "list-fonts" => \$opt_listfonts,
+ "link-texmflocal" => \$opt_texmflink,
+ "only-aliases" => \$opt_only_aliases,
+ "machine-readable" => \$opt_machine,
+ "force" => \$opt_force,
+ "filelist=s" => \$opt_filelist,
+ "markdown" => \$opt_markdown,
+ "o|output=s" => \$opt_output,
+ "h|help" => \$opt_help,
+ "q|quiet" => \$opt_quiet,
+ "d|debug+" => \$opt_debug,
+ "f|fontdef=s" => \$opt_fontdef,
+ "a|alias=s" => \@opt_aliases,
+ "v|version" => sub { print &version(); exit(0); }, ) ) {
+ die "Try \"$0 --help\" for more information.\n";
+}
+
+sub win32 { return ($^O=~/^MSWin(32|64)$/i); }
+my $nul = (win32() ? 'nul' : '/dev/null') ;
+my $sep = (win32() ? ';' : ':');
+my %fontdb;
+my %aliases;
+my %user_aliases;
+
+if ($opt_help) {
+ Usage();
+ exit 0;
+}
+
+if ($opt_debug) {
+ require Data::Dumper;
+ $Data::Dumper::Indent = 1;
+}
+
+chomp (my $TEXMFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`);
+
+main(@ARGV);
+
+#
+# only sub definitions from here on
+#
+sub main {
+ print_info("reading font database ...\n");
+ read_font_database();
+ if (!$opt_listallaliases) {
+ print_info("checking for files ...\n");
+ check_for_files();
+ } else {
+ make_all_available();
+ }
+ compute_aliases();
+ if ($opt_info) {
+ $opt_listfonts = 1;
+ $opt_listaliases = 1;
+ }
+ if ($opt_listfonts) {
+ info_found_fonts();
+ }
+ if ($opt_listaliases || $opt_listallaliases) {
+ print "List of ", ($opt_listaliases ? "all" : "available"), " aliases and their options (in decreasing priority):\n" unless $opt_machine;
+ my (@jal, @kal, @tal, @sal);
+ for my $al (sort keys %aliases) {
+ my $cl;
+ my @ks = sort { $a <=> $b} keys(%{$aliases{$al}});
+ my $foo = '';
+ $foo = "$al:\n" unless $opt_machine;
+ for my $p (@ks) {
+ my $t = $aliases{$al}{$p};
+ my $fn = ($opt_listallaliases ? "-" : $fontdb{$t}{'target'} );
+ # should always be the same ;-)
+ $cl = $fontdb{$t}{'class'};
+ if (!$opt_listallaliases && $fontdb{$t}{'type'} eq 'TTF' && $fontdb{$t}{'subfont'} > 0) {
+ $fn .= "($fontdb{$t}{'subfont'})";
+ }
+ if ($opt_machine) {
+ $foo .= "$al:$p:$aliases{$al}{$p}:$fn\n";
+ } else {
+ $foo .= "\t($p) $aliases{$al}{$p} ($fn)\n";
+ }
+ }
+ if ($cl eq 'Japan') {
+ push @jal, $foo;
+ } elsif ($cl eq 'Korea') {
+ push @kal, $foo;
+ } elsif ($cl eq 'GB') {
+ push @sal, $foo;
+ } elsif ($cl eq 'CNS') {
+ push @tal, $foo;
+ } else {
+ print STDERR "unknown class $cl for $al\n";
+ }
+ }
+ if ($opt_machine) {
+ print @jal if @jal;
+ print @kal if @kal;
+ print @tal if @tal;
+ print @sal if @sal;
+ } else {
+ print "Aliases for Japanese fonts:\n", @jal, "\n" if @jal;
+ print "Aliases for Korean fonts:\n", @kal, "\n" if @kal;
+ print "Aliases for Traditional Chinese fonts:\n", @tal, "\n" if @tal;
+ print "Aliases for Simplified Chinese fonts:\n", @sal, "\n" if @sal;
+ }
+ }
+ exit(0) if ($opt_listfonts || $opt_listaliases || $opt_listallaliases);
+
+ if (! $opt_output) {
+ print_info("searching for GhostScript resource\n");
+ my $gsres = find_gs_resource();
+ if (!$gsres) {
+ print_error("Cannot find GhostScript, terminating!\n");
+ exit(1);
+ } else {
+ $opt_output = $gsres;
+ }
+ }
+ if (! -d $opt_output) {
+ $dry_run || mkdir($opt_output) ||
+ die ("Cannot create directory $opt_output: $!");
+ }
+ print_info("output is going to $opt_output\n");
+ if (!$opt_only_aliases) {
+ print_info("generating font snippets and link CID fonts ...\n");
+ do_otf_fonts();
+ print_info("generating font snippets, links, and cidfmap.local for TTF fonts ...\n");
+ do_ttf_fonts();
+ }
+ print_info("generating font aliases ...\n");
+ do_aliases();
+ print_info("finished\n");
+}
+
+sub update_master_cidfmap {
+ my $add = shift;
+ my $cidfmap_master = "$opt_output/Init/cidfmap";
+ if (-r $cidfmap_master) {
+ open(FOO, "<", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for reading: $!");
+ my $found = 0;
+ while(<FOO>) {
+ $found = 1 if
+ m/^\s*\(\Q$add\E\)\s\s*\.runlibfile\s*$/;
+ }
+ if ($found) {
+ print_info("$add already loaded in $cidfmap_master, no changes\n");
+ } else {
+ return if $dry_run;
+ open(FOO, ">>", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for appending: $!");
+ print FOO "($add) .runlibfile\n";
+ close(FOO);
+ }
+ } else {
+ return if $dry_run;
+ open(FOO, ">", $cidfmap_master) ||
+ die ("Cannot open $cidfmap_master for writing: $!");
+ print FOO "($add) .runlibfile\n";
+ close(FOO);
+ }
+}
+
+sub make_dir {
+ my ($d, $w) = @_;
+ if (-r $d) {
+ if (! -d $d) {
+ print_error("$d is not a directory, $w\n");
+ exit 1;
+ }
+ } else {
+ $dry_run || mkdir($d);
+ }
+}
+
+sub do_otf_fonts {
+ my $fontdest = "$opt_output/Font";
+ my $ciddest = "$opt_output/CIDFont";
+ make_dir($fontdest, "cannot create CID snippets there!");
+ make_dir($ciddest, "cannot link CID fonts there!");
+ print "opt_texfmlink = $opt_texmflink\n";
+ make_dir("$TEXMFLOCAL/fonts/opentype/cjk-gs-integrate",
+ "cannot link fonts to it!")
+ if $opt_texmflink;
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'} && $fontdb{$k}{'type'} eq 'CID') {
+ generate_font_snippet($fontdest,
+ $k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'});
+ link_font($fontdb{$k}{'target'}, $ciddest, $k);
+ link_font($fontdb{$k}{'target'}, "$TEXMFLOCAL/fonts/opentype/cjk-gs-integrate")
+ if $opt_texmflink;
+ }
+ }
+}
+
+sub generate_font_snippet {
+ my ($fd, $n, $c, $f) = @_;
+ return if $dry_run;
+ for my $enc (@{$encode_list{$c}}) {
+ open(FOO, ">$fd/$n-$enc") ||
+ die("cannot open $fd/$n-$enc for writing: $!");
+ print FOO "%%!PS-Adobe-3.0 Resource-Font
+%%%%DocumentNeededResources: $enc (CMap)
+%%%%IncludeResource: $enc (CMap)
+%%%%BeginResource: Font ($n-$enc)
+($n-$enc)
+($enc) /CMap findresource
+[($n) /CIDFont findresource]
+composefont
+pop
+%%%%EndResource
+%%%%EOF
+";
+ close(FOO);
+ }
+}
+
+sub link_font {
+ my ($f, $cd, $n) = @_;
+ return if $dry_run;
+ if (!$n) {
+ $n = basename($f);
+ }
+ my $target = "$cd/$n";
+ printf STDERR "link try to $target\n";
+ if ($opt_force && -e $target) {
+ print_info("Removing $target prior to recreation due to --force\n");
+ unlink($target) || die "Cannot unlink $target prior to recreation under --force: $!";
+ }
+ if (-l $target) {
+ my $linkt = readlink($target);
+ if ($linkt && -r $linkt) {
+ if ($linkt eq $f) {
+ # do nothing, it is the same link
+ } else {
+ print_error("link $target already existing, but different target then $target, exiting!\n");
+ exit(1);
+ }
+ } else {
+ print_warning("removing dangling symlink $target to $linkt\n");
+ unlink($target);
+ }
+ } else {
+ if (-e $target) {
+ print_error("$target already existing, but not a link, exiting!\n");
+ exit(1);
+ } else {
+ symlink($f, $target) || die("Cannot link font $f to $target: $!");
+ }
+ }
+}
+
+sub do_ttf_fonts {
+ my $fontdest = "$opt_output/Font";
+ my $cidfsubst = "$opt_output/CIDFSubst";
+ my $outp = '';
+ make_dir($fontdest, "cannot create CID snippets there!");
+ make_dir($cidfsubst, "cannot link TTF fonts there!");
+ make_dir("$TEXMFLOCAL/fonts/truetype/cjk-gs-integrate",
+ "cannot link fonts to it!")
+ if $opt_texmflink;
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'} && $fontdb{$k}{'type'} eq 'TTF') {
+ generate_font_snippet($fontdest,
+ $k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'});
+ $outp .= generate_cidfmap_entry($k, $fontdb{$k}{'class'}, $fontdb{$k}{'target'}, $fontdb{$k}{'subfont'});
+ link_font($fontdb{$k}{'target'}, $cidfsubst);
+ link_font($fontdb{$k}{'target'}, "$TEXMFLOCAL/fonts/truetype/cjk-gs-integrate")
+ if $opt_texmflink;
+ }
+ }
+ return if $dry_run;
+ if ($outp) {
+ if (! -d "$opt_output/Init") {
+ mkdir("$opt_output/Init") ||
+ die("Cannot create directory $opt_output/Init: $!");
+ }
+ open(FOO, ">$opt_output/Init/cidfmap.local") ||
+ die "Cannot open $opt_output/cidfmap.local: $!";
+ print FOO $outp;
+ close(FOO);
+ }
+ print_info("adding cidfmap.local to cidfmap file ...\n");
+ update_master_cidfmap('cidfmap.local');
+}
+
+sub do_aliases {
+ my $fontdest = "$opt_output/Font";
+ my $cidfsubst = "$opt_output/CIDFSubst";
+ my $outp = '';
+ #
+ # alias handling
+ # we use two levels of aliases, one is for the default names that
+ # are not actual fonts:
+ # Ryumin-Light, GothicBBB-Medium, FutoMinA101-Bold, FutoGoB101-Bold,
+ # Jun101-Light which are the original Morisawa names.
+ #
+ # the second level of aliases is for Morisawa OTF font names:
+ # RyuminPro-Light, GothicBBBPro-Medium,
+ # FutoMinA101Pro-Bold, FutoGoB101Pro-Bold
+ # Jun101Pro-Light
+ #
+ # the order of fonts selected is
+ # Morisawa Pr6, Morisawa, Hiragino ProN, Hiragino,
+ # Yu OSX, Yu Win, Kozuka ProN, Kozuka, IPAex, IPA
+ # but is defined in the Provides(Priority): Name in the font definiton
+ #
+ $outp .= "\n\n% Aliases\n";
+ #
+ my (@jal, @kal, @tal, @sal);
+ #
+ for my $al (sort keys %aliases) {
+ my $target;
+ my $class;
+ if ($user_aliases{$al}) {
+ $target = $user_aliases{$al};
+ # determine class
+ if ($fontdb{$target}{'available'}) {
+ $class = $fontdb{$target}{'class'};
+ } else {
+ # must be an aliases, we checked this when initializing %user_aliases
+ # reset the $al value
+ # and since $class is still undefined we will use the next code below
+ $al = $target;
+ }
+ }
+ if (!$class) {
+ # search lowest number
+ my @ks = keys(%{$aliases{$al}});
+ my $first = (sort { $a <=> $b} @ks)[0];
+ $target = $aliases{$al}{$first};
+ $class = $fontdb{$target}{'class'};
+ }
+ # we also need to create font snippets in Font for the aliases!
+ generate_font_snippet($fontdest, $al, $class, $target);
+ if ($class eq 'Japan') {
+ push @jal, "/$al /$target ;";
+ } elsif ($class eq 'Korea') {
+ push @kal, "/$al /$target ;";
+ } elsif ($class eq 'GB') {
+ push @sal, "/$al /$target ;";
+ } elsif ($class eq 'CNS') {
+ push @tal, "/$al /$target ;";
+ } else {
+ print STDERR "unknown class $class for $al\n";
+ }
+ }
+ $outp .= "\n% Japanese fonts\n" . join("\n", @jal) . "\n" if @jal;
+ $outp .= "\n% Korean fonts\n" . join("\n", @kal) . "\n" if @kal;
+ $outp .= "\n% Traditional Chinese fonts\n" . join("\n", @tal) . "\n" if @tal;
+ $outp .= "\n% Simplified Chinese fonts\n" . join("\n", @sal) . "\n" if @sal;
+ #
+ return if $dry_run;
+ if ($outp) {
+ if (! -d "$opt_output/Init") {
+ mkdir("$opt_output/Init") ||
+ die("Cannot create directory $opt_output/Init: $!");
+ }
+ open(FOO, ">$opt_output/Init/cidfmap.aliases") ||
+ die "Cannot open $opt_output/cidfmap.aliases: $!";
+ print FOO $outp;
+ close(FOO);
+ }
+ print_info("adding cidfmap.aliases to cidfmap file ...\n");
+ update_master_cidfmap('cidfmap.aliases');
+}
+
+sub generate_cidfmap_entry {
+ my ($n, $c, $f, $sf) = @_;
+ # we link the ttf fonts, so we use only the base name
+ # otherwise the ps2pdf breaks due to -dSAFER
+ my $bn = basename($f);
+ # extract subfont
+ my $s = "/$n << /FileType /TrueType
+ /Path pssystemparams /GenericResourceDir get
+ (CIDFSubst/$bn) concatstrings
+ /SubfontID $sf
+ /CSI [($c";
+ if ($c eq "Japan") {
+ $s .= "1) 6]";
+ } elsif ($c eq "GB") {
+ $s .= "1) 5]";
+ } elsif ($c eq "CNS") {
+ $s .= "1) 5]";
+ } elsif ($c eq "Korea") {
+ $s .= "1) 2]";
+ } else {
+ print_warning("unknown class $c for $n, skipping.\n");
+ return '';
+ }
+ $s .= " >> ;\n";
+ return $s;
+}
+
+#
+# dump found files
+sub info_found_fonts {
+ print "List of found fonts:\n\n";
+ for my $k (keys %fontdb) {
+ my @foundfiles;
+ if ($fontdb{$k}{'available'}) {
+ print "Font: $k\n";
+ print "Type: $fontdb{$k}{'type'}\n";
+ print "Class: $fontdb{$k}{'class'}\n";
+ my $fn = $fontdb{$k}{'target'};
+ if ($fontdb{$k}{'type'} eq 'TTF' && $fontdb{$k}{'subfont'} > 0) {
+ $fn .= "($fontdb{$k}{'subfont'})";
+ }
+ print "File: $fn\n";
+ print "\n";
+ }
+ }
+}
+
+
+#
+# make all fonts available for listing all aliases
+sub make_all_available {
+ for my $k (keys %fontdb) {
+ $fontdb{$k}{'available'} = 1;
+ delete $fontdb{$k}{'files'};
+ }
+}
+
+#
+# checks all file names listed in %fontdb
+# and sets
+sub check_for_files {
+ my @foundfiles;
+ if ($opt_filelist) {
+ open(FOO, "<", $opt_filelist) || die "Cannot open $opt_filelist: $!";
+ @foundfiles = <FOO>;
+ close(FOO) || warn "Cannot close $opt_filelist: $!";
+ } else {
+ # first collect all files:
+ my @fn;
+ for my $k (keys %fontdb) {
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ # check for subfont extension
+ if ($f =~ m/^(.*)\(\d*\)$/) {
+ push @fn, $1;
+ } else {
+ push @fn, $f;
+ }
+ }
+ }
+ #
+ # collect extra directories for search
+ my @extradirs;
+ if (win32()) {
+ push @extradirs, "c:/windows/fonts//";
+ } else {
+ # other dirs to check, for normal unix?
+ for my $d (qw!/Library/Fonts /System/Library/Fonts /Library/Fonts/Microsoft/ /Network/Library/Fonts!) {
+ push @extradirs, $d if (-d $d);
+ }
+ my $home = $ENV{'HOME'};
+ push @extradirs, "$home/Library/Fonts" if (-d "$home/Library/Fonts");
+ }
+ #
+ if (@extradirs) {
+ # final dummy directory
+ push @extradirs, "/this/does/not/really/exists/unless/you/are/stupid";
+ # push current value of OSFONTDIR
+ push @extradirs, $ENV{'OSFONTDIR'} if $ENV{'OSFONTDIR'};
+ # compose OSFONTDIR
+ my $osfontdir = join ':', @extradirs;
+ $ENV{'OSFONTDIR'} = $osfontdir;
+ }
+ if ($ENV{'OSFONTDIR'}) {
+ print_debug("final setting of OSFONTDIR: $ENV{'OSFONTDIR'}\n");
+ }
+ # prepare for kpsewhich call, we need to do quoting
+ my $cmdl = 'kpsewhich ';
+ for my $f (@fn) {
+ $cmdl .= " \"$f\" ";
+ }
+ # shoot up kpsewhich
+ print_ddebug("checking for $cmdl\n");
+ @foundfiles = `$cmdl`;
+ }
+ chomp(@foundfiles);
+ print_ddebug("Found files @foundfiles\n");
+ # map basenames to filenames
+ my %bntofn;
+ for my $f (@foundfiles) {
+ my $bn = basename($f);
+ $bntofn{$bn} = $f;
+ }
+ if ($opt_debug > 1) {
+ print_ddebug("dumping basename to filename list:\n");
+ print_ddebug(Data::Dumper::Dumper(\%bntofn));
+ }
+
+ # update the %fontdb with the found files
+ for my $k (keys %fontdb) {
+ $fontdb{$k}{'available'} = 0;
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ # check for subfont extension
+ my $realfile = $f;
+ $realfile =~ s/^(.*)\(\d*\)$/$1/;
+ if ($bntofn{$realfile}) {
+ # we found a representative, make it available
+ $fontdb{$k}{'files'}{$f}{'target'} = $bntofn{$realfile};
+ $fontdb{$k}{'available'} = 1;
+ } else {
+ # delete the entry for convenience
+ delete $fontdb{$k}{'files'}{$f};
+ }
+ }
+ }
+ # second round to determine the winner in case of more targets
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'}) {
+ my $mp = 1000000; my $mf;
+ for my $f (keys %{$fontdb{$k}{'files'}}) {
+ if ($fontdb{$k}{'files'}{$f}{'priority'} < $mp) {
+ $mp = $fontdb{$k}{'files'}{$f}{'priority'};
+ $mf = $f;
+ }
+ }
+ # extract subfont if necessary
+ my $sf = 0;
+ if ($mf =~ m/^(.*)\((\d*)\)$/) { $sf = $2; }
+ $fontdb{$k}{'target'} = $fontdb{$k}{'files'}{$mf}{'target'};
+ $fontdb{$k}{'subfont'} = $sf if ($fontdb{$k}{'type'} eq 'TTF');
+ }
+ # not needed anymore
+ delete $fontdb{$k}{'files'};
+ }
+ if ($opt_debug > 0) {
+ print_debug("dumping font database:\n");
+ print_debug(Data::Dumper::Dumper(\%fontdb));
+ }
+}
+
+sub compute_aliases {
+ # go through fontdb to check for provides
+ # accumulate all provided fonts in @provides
+ for my $k (keys %fontdb) {
+ if ($fontdb{$k}{'available'}) {
+ for my $p (keys %{$fontdb{$k}{'provides'}}) {
+ # do not check alias if the real font is available
+ next if $fontdb{$p}{'available'};
+ # use the priority as key
+ # if priorities are double, this will pick one at chance
+ if ($aliases{$p}{$fontdb{$k}{'provides'}{$p}}) {
+ print_warning("duplicate provide levels:\n");
+ print_warning(" current $p $fontdb{$k}{'provides'}{$p} $aliases{$p}{$fontdb{$k}{'provides'}{$p}}\n");
+ print_warning(" ignored $p $fontdb{$k}{'provides'}{$p} $k\n");
+ } else {
+ $aliases{$p}{$fontdb{$k}{'provides'}{$p}} = $k;
+ }
+ }
+ }
+ }
+ # check for user supplied aliases
+ for my $a (@opt_aliases) {
+ if ($a =~ m/^(.*)=(.*)$/) {
+ my $ll = $1;
+ my $rr = $2;
+ # check for consistency of user provided aliases:
+ # - ll must not be available
+ # - rr needs to be available as font or alias
+ # check whether $rr is available, either as real font or as alias
+ if ($fontdb{$ll}{'available'}) {
+ print_error("left side of alias spec is provided by a real font: $a\n");
+ print_error("stopping here\n");
+ exit(1);
+ }
+ if (!($fontdb{$rr}{'available'} || $aliases{$rr})) {
+ print_error("right side of alias spec is not available as real font or alias: $a\n");
+ print_error("stopping here\n");
+ exit(1);
+ }
+ $user_aliases{$ll} = $rr;
+ }
+ }
+ if ($opt_debug > 0) {
+ print_debug("dumping aliases:\n");
+ print_debug(Data::Dumper::Dumper(\%aliases));
+ }
+}
+
+sub read_font_database {
+ my @dbl;
+ if ($opt_fontdef) {
+ open (FDB, "<$opt_fontdef") ||
+ die "Cannot find $opt_fontdef: $!";
+ @dbl = <FDB>;
+ close(FDB);
+ } else {
+ @dbl = <DATA>;
+ }
+ chomp(@dbl);
+ # add a "final empty line" to easy parsing
+ push @dbl, "";
+ my $fontname = "";
+ my $fonttype = "";
+ my $fontclass = "";
+ my %fontprovides = ();
+ my %fontfiles;
+ my $psname = "";
+ my $lineno = 0;
+ for my $l (@dbl) {
+ $lineno++;
+
+ next if ($l =~ m/^\s*#/);
+ if ($l =~ m/^\s*$/) {
+ if ($fontname || $fonttype || $fontclass || keys(%fontfiles)) {
+ if ($fontname && $fonttype && $fontclass && keys(%fontfiles)) {
+ my $realfontname = ($psname ? $psname : $fontname);
+ $fontdb{$realfontname}{'type'} = $fonttype;
+ $fontdb{$realfontname}{'class'} = $fontclass;
+ $fontdb{$realfontname}{'files'} = { %fontfiles };
+ $fontdb{$realfontname}{'provides'} = { %fontprovides };
+ # reset to start
+ $fontname = $fonttype = $fontclass = $psname = "";
+ %fontfiles = ();
+ %fontprovides = ();
+ } else {
+ print_warning("incomplete entry above line $lineno for $fontname/$fonttype/$fontclass, skipping!\n");
+ # reset to start
+ $fontname = $fonttype = $fontclass = $psname = "";
+ %fontfiles = ();
+ %fontprovides = ();
+ }
+ } else {
+ # no term is set, so nothing to warn about
+ }
+ next;
+ }
+ if ($l =~ m/^Name:\s*(.*)$/) { $fontname = $1; next; }
+ if ($l =~ m/^PSName:\s*(.*)$/) { $psname = $1; next; }
+ if ($l =~ m/^Type:\s*(.*)$/) { $fonttype = $1 ; next ; }
+ if ($l =~ m/^Class:\s*(.*)$/) { $fontclass = $1 ; next ; }
+ if ($l =~ m/^Filename(\((\d+)\))?:\s*(.*)$/) {
+ $fontfiles{$3}{'priority'} = ($2 ? $2 : 10);
+ next;
+ }
+ if ($l =~ m/^Provides\((\d+)\):\s*(.*)$/) { $fontprovides{$2} = $1; next; }
+ # we are still here??
+ print_error("Cannot parse this file at line $lineno, exiting. Strange line: >>>$l<<<\n");
+ exit (1);
+ }
+}
+
+sub find_gs_resource {
+ # we assume that gs is in the path
+ # on Windows we probably have to try something else
+ my @ret = `gs --help 2>$nul`;
+ my $foundres = '';
+ if ($?) {
+ print_error("Cannot find gs ...\n");
+ } else {
+ # try to find resource line
+ for (@ret) {
+ if (m!Resource/Font!) {
+ $foundres = $_;
+ $foundres =~ s/^\s*//;
+ $foundres =~ s/\s*:\s*$//;
+ $foundres =~ s!/Font!!;
+ last;
+ }
+ }
+ if (!$foundres) {
+ print_error("Found gs but no resource???\n");
+ }
+ }
+ return $foundres;
+}
+
+sub version {
+ my $ret = sprintf "%s version %s\n", $prg, $version;
+ return $ret;
+}
+
+sub Usage {
+ my $headline = "Configuring GhostScript for CJK CID/TTF fonts";
+ my $usage = "[perl] $prg\[.pl\] [OPTIONS]";
+ my $options = "
+-n, --dry-run do not actually output anything
+-f, --fontdef FILE specify alternate set of font definitions, if not
+ given, the built-in set is used
+-o, --output DIR specifies the base output dir, if not provided,
+ the Resource directory of an install GhostScript
+ is searched and used.
+-a, --alias LL=RR defines an alias, or overrides a given alias
+ illegal if LL is provided by a real font, or
+ RR is neither available as real font or alias
+ can be given multiple times
+--filelist FILE read list of available font files from FILE
+ instead of searching with kpathsea
+--link-texmflocal link fonts into
+ TEXMFLOCAL/fonts/opentype/cjk-gs-integrate
+ and
+ TEXMFLOCAL/fonts/truetype/cjk-gs-integrate
+--machine-readable output of --list-aliases is machine readable
+--force do not bail out if linked fonts already exist
+-q, --quiet be less verbose
+-d, --debug output debug information, can be given multiple times
+-v, --version outputs only the version information
+-h, --help this help
+";
+
+ my $commandoptions = "
+--only-aliases do only regenerate the cidfmap.alias file instead of all
+--list-aliases lists the available aliases and their options, with the
+ selected option on top
+--list-all-aliases list all possible aliases without searching for actually
+ present files
+--list-fonts lists the fonts found on the system
+--info combines the above two information
+";
+
+ my $shortdesc = "
+This script searches a list of directories for CJK fonts, and makes
+them available to an installed GhostScript. In the simplest case with
+sufficient privileges, a run without arguments should effect in a
+complete setup of GhostScript.
+";
+
+my $operation = "
+For each found TrueType (TTF) font it creates a cidfmap entry in
+
+ <Resource>/Init/cidfmap.local
+
+and links the font to
+
+ <Resource>/CIDFSubst/
+
+For each CID font it creates a snippet in
+
+ <Resource>/Font/
+
+and links the font to
+
+ <Resource>/CIDFont/
+
+The `<Resource>` dir is either given by `-o`/`--output`, or otherwise searched
+from an installed GhostScript (binary name is assumed to be 'gs').
+
+Aliases are added to
+
+ <Resource>/Init/cidfmap.aliases
+
+Finally, it tries to add runlib calls to
+
+ <Resource>/Init/cidfmap
+
+to load the cidfmap.local and cidfmap.aliases.
+";
+
+ my $dirsearch = '
+Search is done using the kpathsea library, in particular using kpsewhich
+program. By default the following directories are searched:
+ - all TEXMF trees
+ - `/Library/Fonts`, `/Library/Fonts/Microsoft`, `/System/Library/Fonts`,
+ `/Network/Library/Fonts`, and `~/Library/Fonts` (all if available)
+ - `c:/windows/fonts` (on Windows)
+ - the directories in `OSFONTDIR` environment variable
+
+In case you want to add some directories to the search path, adapt the
+`OSFONTDIR` environment variable accordingly: Example:
+
+`````
+ OSFONTDIR="/usr/local/share/fonts/truetype//:/usr/local/share/fonts/opentype//" $prg
+`````
+
+will result in fonts found in the above two given directories to be
+searched in addition.
+';
+
+ my $outputfile = "
+If no output option is given, the program searches for a GhostScript
+interpreter 'gs' and determines its Resource directory. This might
+fail, in which case one need to pass the output directory manually.
+
+Since the program adds files and link to this directory, sufficient
+permissions are necessary.
+";
+
+ my $aliases = "
+Aliases are managed via the Provides values in the font database.
+At the moment entries for the basic font names for CJK fonts
+are added:
+
+Japanese:
+
+ Ryumin-Light GothicBBB-Medium FutoMinA101-Bold FutoGoB101-Bold Jun101-Light
+
+Korean:
+
+ HYGoThic-Medium HYSMyeongJo-Medium
+
+Simplified Chinese:
+
+ STSong-Light STHeiti-Regular STHeiti-Light STKaiti-Regular
+
+Traditional Chinese:
+
+ MSung-Light MHei-Medium MKai-Medium
+
+In addition, we also includes provide entries for the OTF Morisawa names:
+ RyuminPro-Light GothicBBBPro-Medium FutoMinA101Pro-Bold
+ FutoGoB101Pro-Bold Jun101Pro-Light
+
+The order is determined by the Provides setting in the font database,
+and for the Japanese fonts it is currently:
+ Morisawa Pr6, Morisawa, Hiragino ProN, Hiragino,
+ Yu OSX, Yu Win, Kozuka ProN, Kozuka, IPAex, IPA
+
+That is, the first font found in this order will be used to provide the
+alias if necessary.
+
+#### Overriding aliases ####
+
+Using the command line option `--alias LL=RR` one can add arbitrary aliases,
+or override ones selected by the program. For this to work the following
+requirements of `LL` and `RR` must be fulfilled:
+ * `LL` is not provided by a real font
+ * `RR` is available either as real font, or as alias (indirect alias)
+";
+
+ my $authors = "
+The script and its documentation was written by Norbert Preining, based
+on research and work by Yusuke Kuroki, Bruno Voisin, Munehiro Yamamoto
+and the TeX Q&A wiki page.
+
+The script is licensed under GNU General Public License Version 3 or later.
+The contained font data is not copyrightable.
+";
+
+
+ if ($opt_markdown) {
+ print "$headline\n";
+ print ("=" x length($headline));
+ print "\n$shortdesc\nUsage\n-----\n\n`````\n$usage\n`````\n\n";
+ print "#### Options ####\n\n`````";
+ print_for_out($options, " ");
+ print "`````\n\n#### Command like options ####\n\n`````";
+ print_for_out($commandoptions, " ");
+ print "`````\n\nOperation\n---------\n$operation\n";
+ print "How and which directories are searched\n";
+ print "--------------------------------------\n$dirsearch\n";
+ print "Output files\n";
+ print "------------\n$outputfile\n";
+ print "Aliases\n";
+ print "-------\n$aliases\n";
+ print "Authors, Contributors, and Copyright\n";
+ print "------------------------------------\n$authors\n";
+ } else {
+ print "\nUsage: $usage\n\n$headline\n$shortdesc";
+ print "\nOptions:\n";
+ print_for_out($options, " ");
+ print "\nCommand like options:\n";
+ print_for_out($commandoptions, " ");
+ print "\nOperation:\n";
+ print_for_out($operation, " ");
+ print "\nHow and which directories are searched:\n";
+ print_for_out($dirsearch, " ");
+ print "\nOutput files:\n";
+ print_for_out($outputfile, " ");
+ print "\nAliases:\n";
+ print_for_out($aliases, " ");
+ print "\nAuthors, Contributors, and Copyright:\n";
+ print_for_out($authors, " ");
+ print "\n";
+ }
+ exit 0;
+}
+
+sub print_for_out {
+ my ($what, $indent) = @_;
+ for (split /\n/, $what) {
+ next if m/`````/;
+ s/\s*####\s*//g;
+ if ($_ eq '') {
+ print "\n";
+ } else {
+ print "$indent$_\n";
+ }
+ }
+}
+
+# info/warning can be suppressed
+# verbose/error cannot be suppressed
+sub print_info {
+ print STDOUT "$prg: ", @_ if (!$opt_quiet);
+}
+sub print_verbose {
+ print STDOUT "$prg: ", @_;
+}
+sub print_warning {
+ print STDERR "$prg [WARNING]: ", @_ if (!$opt_quiet)
+}
+sub print_error {
+ print STDERR "$prg [ERROR]: ", @_;
+}
+sub print_debug {
+ print STDERR "$prg [DEBUG]: ", @_ if ($opt_debug >= 1);
+}
+sub print_ddebug {
+ print STDERR "$prg [DEBUG]: ", @_ if ($opt_debug >= 2);
+}
+
+
+__DATA__
+#
+# CJK FONT DEFINITIONS
+#
+
+# JAPAN
+
+# Morisawa
+
+Name: A-OTF-FutoGoB101Pr6N-Bold
+PSName: FutoGoB101Pr6N-Bold
+Type: CID
+Class: Japan
+Provides(10): FutoGoB101-Bold
+Provides(10): FutoGoB101Pro-Bold
+Filename: A-OTF-FutoGoB101Pr6N-Bold.otf
+
+Name: A-OTF-FutoGoB101Pro-Bold
+PSName: FutoGoB101Pro-Bold
+Type: CID
+Class: Japan
+Provides(20): FutoGoB101-Bold
+Filename: A-OTF-FutoGoB101Pro-Bold.otf
+
+Name: A-OTF-FutoMinA101Pr6N-Bold
+PSName: FutoMinA101Pr6N-Bold
+Type: CID
+Class: Japan
+Provides(10): FutoMinA101-Bold
+Provides(10): FutoMinA101Pro-Bold
+Filename: A-OTF-FutoMinA101Pr6N-Bold.otf
+
+Name: A-OTF-FutoMinA101Pro-Bold
+PSName: FutoMinA101Pro-Bold
+Type: CID
+Class: Japan
+Provides(20): FutoMinA101-Bold
+Filename: A-OTF-FutoMinA101Pro-Bold.otf
+
+Name: A-OTF-GothicBBBPr6N-Medium
+PSName: GothicBBBPr6N-Medium
+Type: CID
+Class: Japan
+Provides(10): GothicBBB-Medium
+Provides(10): GothicBBBPro-Medium
+Filename: A-OTF-GothicBBBPr6N-Medium.otf
+
+Name: A-OTF-GothicBBBPro-Medium
+PSName: GothicBBBPro-Medium
+Type: CID
+Class: Japan
+Provides(20): GothicBBB-Medium
+Filename: A-OTF-GothicBBBPro-Medium.otf
+
+Name: A-OTF-Jun101Pro-Light
+PSName: Jun101Pro-Light
+Type: CID
+Class: Japan
+Provides(20): Jun101-Light
+Filename: A-OTF-Jun101Pro-Light.otf
+
+Name: A-OTF-MidashiGoPr6N-MB31
+PSName: MidashiGoPr6N-MB31
+Type: CID
+Class: Japan
+Provides(10): MidashiGo-MB31
+Provides(10): MidashiGoPro-MB31
+Filename: A-OTF-MidashiGoPr6N-MB31.otf
+
+Name: A-OTF-MidashiGoPro-MB31
+PSName: MidashiGoPro-MB31
+Type: CID
+Class: Japan
+Provides(20): MidashiGo-MB31
+Filename: A-OTF-MidashiGoPro-MB31.otf
+
+Name: A-OTF-RyuminPr6N-Light
+PSName: RyuminPr6N-Light
+Type: CID
+Class: Japan
+Provides(10): Ryumin-Light
+Provides(10): RyuminPro-Light
+Filename: A-OTF-RyuminPr6N-Light.otf
+
+Name: A-OTF-RyuminPro-Light
+PSName: RyuminPro-Light
+Type: CID
+Class: Japan
+Provides(20): Ryumin-Light
+Filename: A-OTF-RyuminPro-Light.otf
+
+Name: A-OTF-ShinMGoPr6N-Light
+PSName: ShinMGoPr6N-Light
+Type: CID
+Class: Japan
+Provides(10): Jun101-Light
+Provides(10): Jun101Pro-Light
+Filename: A-OTF-ShinMGoPr6N-Light.otf
+
+
+# Hiragino
+
+Name: HiraKakuPro-W3
+Type: CID
+Class: Japan
+Provides(40): GothicBBB-Medium
+Provides(40): GothicBBBPro-Medium
+# the following two are *not* the same
+# one is in decomposed form (for Mac), one is in composed form (for the rest)
+Filename(20): ヒラギノ角ゴ Pro W3.otf
+Filename(19): ヒラギノ角ゴ Pro W3.otf
+Filename(10): HiraKakuPro-W3.otf
+
+Name: HiraKakuPro-W6
+Type: CID
+Class: Japan
+Provides(40): FutoGoB101-Bold
+Provides(40): FutoGoB101Pro-Bold
+Filename(20): ヒラギノ角ゴ Pro W6.otf
+Filename(19): ヒラギノ角ゴ Pro W6.otf
+Filename(10): HiraKakuPro-W6.otf
+
+Name: HiraKakuProN-W3
+Type: CID
+Class: Japan
+Provides(30): GothicBBB-Medium
+Provides(30): GothicBBBPro-Medium
+Filename(20): ヒラギノ角ゴ ProN W3.otf
+Filename(19): ヒラギノ角ゴ ProN W3.otf
+Filename(10): HiraKakuProN-W3.otf
+
+Name: HiraKakuProN-W6
+Type: CID
+Class: Japan
+Provides(30): FutoGoB101-Bold
+Provides(30): FutoGoB101Pro-Bold
+Filename(20): ヒラギノ角ゴ ProN W6.otf
+Filename(19): ヒラギノ角ゴ ProN W6.otf
+Filename(10): HiraKakuProN-W6.otf
+
+Name: HiraKakuStd-W8
+Type: CID
+Class: Japan
+Provides(40): MidashiGo-MB31
+Provides(40): MidashiGoPro-MB31
+Filename(20): ヒラギノ角ゴ Std W8.otf
+Filename(19): ヒラギノ角ゴ Std W8.otf
+Filename(10): HiraKakuStd-W8.otf
+
+Name: HiraKakuStdN-W8
+Type: CID
+Class: Japan
+Provides(30): MidashiGo-MB31
+Provides(30): MidashiGoPro-MB31
+Filename(20): ヒラギノ角ゴ StdN W8.otf
+Filename(19): ヒラギノ角ゴ StdN W8.otf
+Filename(10): HiraKakuStdN-W8.otf
+
+Name: HiraMaruPro-W4
+Type: CID
+Class: Japan
+Provides(40): Jun101-Light
+Provides(40): Jun101Pro-Light
+Filename(20): ヒラギノ丸ゴ Pro W4.otf
+Filename(19): ヒラギノ丸ゴ Pro W4.otf
+Filename(10): HiraMaruPro-W4.otf
+
+Name: HiraMaruProN-W4
+Type: CID
+Class: Japan
+Provides(30): Jun101-Light
+Provides(30): Jun101Pro-Light
+Filename(20): ヒラギノ丸ゴ ProN W4.otf
+Filename(19): ヒラギノ丸ゴ ProN W4.otf
+Filename(10): HiraMaruProN-W4.otf
+
+Name: HiraMinPro-W3
+Type: CID
+Class: Japan
+Provides(40): Ryumin-Light
+Provides(40): RyuminPro-Light
+Filename(20): ヒラギノ明朝 Pro W3.otf
+Filename(19): ヒラギノ明朝 Pro W3.otf
+Filename(10): HiraMinPro-W3.otf
+
+Name: HiraMinPro-W6
+Type: CID
+Class: Japan
+Provides(40): FutoMinA101-Bold
+Provides(40): FutoMinA101Pro-Bold
+Filename(20): ヒラギノ明朝 Pro W6.otf
+Filename(19): ヒラギノ明朝 Pro W6.otf
+Filename(10): HiraMinPro-W6.otf
+
+Name: HiraMinProN-W3
+Type: CID
+Class: Japan
+Provides(30): Ryumin-Light
+Provides(30): RyuminPro-Light
+Filename(20): ヒラギノ明朝 ProN W3.otf
+Filename(19): ヒラギノ明朝 ProN W3.otf
+Filename(10): HiraMinProN-W3.otf
+
+Name: HiraMinProN-W6
+Type: CID
+Class: Japan
+Provides(30): FutoMinA101-Bold
+Provides(30): FutoMinA101Pro-Bold
+Filename(20): ヒラギノ明朝 ProN W6.otf
+Filename(19): ヒラギノ明朝 ProN W6.otf
+Filename(10): HiraMinProN-W6.otf
+
+
+Name: HiraginoSansGB-W3
+Type: CID
+Class: GB
+Filename(20): Hiragino Sans GB W3.otf
+Filename(10): HiraginoSansGB-W3.otf
+
+Name: HiraginoSansGB-W6
+Type: CID
+Class: GB
+Filename(20): Hiragino Sans GB W6.otf
+Filename(10): HiraginoSansGB-W6.otf
+
+
+# Yu-fonts MacOS version
+
+Name: YuGo-Medium
+Type: CID
+Class: Japan
+Provides(50): GothicBBB-Medium
+Provides(50): GothicBBBPro-Medium
+Filename(20): Yu Gothic Medium.otf
+Filename(10): YuGo-Medium.otf
+
+Name: YuGo-Bold
+Type: CID
+Class: Japan
+Provides(50): FutoGoB101-Bold
+Provides(50): FutoGoB101Pro-Bold
+Provides(50): Jun101-Light
+Provides(50): Jun101Pro-Light
+Provides(50): MidashiGo-MB31
+Provides(50): MidashiGoPro-MB31
+Filename(20): Yu Gothic Bold.otf
+Filename(10): YuGo-Bold.otf
+
+Name: YuMin-Medium
+Type: CID
+Class: Japan
+Provides(50): Ryumin-Light
+Provides(50): RyuminPro-Light
+Filename(20): Yu Mincho Medium.otf
+Filename(10): YuMin-Medium.otf
+
+Name: YuMin-Demibold
+Type: CID
+Class: Japan
+Provides(50): FutoMinA101-Bold
+Provides(50): FutoMinA101Pro-Bold
+Filename(20): Yu Mincho Demibold.otf
+Filename(10): YuMin-Demibold.otf
+
+# Yu-fonts Windows version
+
+Name: YuMincho-Regular
+Type: TTF
+Class: Japan
+Provides(60): Ryumin-Light
+Provides(60): RyuminPro-Light
+Filename(20): yumin.ttf
+Filename(10): YuMincho-Regular.ttf
+
+Name: YuMincho-Light
+Type: TTF
+Class: Japan
+Filename(20): yuminl.ttf
+Filename(10): YuMincho-Light.ttf
+
+Name: YuMincho-DemiBold
+Type: TTF
+Class: Japan
+Provides(60): FutoMinA101-Bold
+Provides(60): FutoMinA101Pro-Bold
+Filename(20): yumindb.ttf
+Filename(10): YuMincho-DemiBold.ttf
+
+Name: YuGothic-Regular
+Type: TTF
+Class: Japan
+Provides(60): GothicBBB-Medium
+Provides(60): GothicBBBPro-Medium
+Filename(20): yugothic.ttf
+Filename(10): YuGothic-Regular.ttf
+
+Name: YuGothic-Light
+Type: TTF
+Class: Japan
+Filename(20): yugothil.ttf
+Filename(10): YuGothic-Light.ttf
+
+Name: YuGothic-Bold
+Type: TTF
+Class: Japan
+Provides(60): FutoGoB101-Bold
+Provides(60): FutoGoB101Pro-Bold
+Provides(60): Jun101-Light
+Provides(60): Jun101Pro-Light
+Provides(60): MidashiGo-MB31
+Provides(60): MidashiGoPro-MB31
+Filename(20): yugothib.ttf
+Filename(10): YuGothic-Bold.ttf
+
+# IPA fonts
+
+Name: IPAMincho
+Type: TTF
+Class: Japan
+Provides(110): Ryumin-Light
+Provides(110): RyuminPro-Light
+Provides(110): FutoMinA101-Bold
+Provides(110): FutoMinA101Pro-Bold
+Filename(20): ipam.ttf
+Filename(10): IPAMincho.ttf
+
+Name: IPAGothic
+Type: TTF
+Class: Japan
+Provides(110): GothicBBB-Medium
+Provides(110): GothicBBBPro-Medium
+Provides(110): FutoGoB101-Bold
+Provides(110): FutoGoB101Pro-Bold
+Provides(110): Jun101-Light
+Provides(110): Jun101Pro-Light
+Provides(110): MidashiGo-MB31
+Provides(110): MidashiGoPro-MB31
+Filename(20): ipag.ttf
+Filename(10): IPAGothic.ttf
+
+Name: IPAexMincho
+Type: TTF
+Class: Japan
+Provides(100): Ryumin-Light
+Provides(100): RyuminPro-Light
+Provides(100): FutoMinA101-Bold
+Provides(100): FutoMinA101Pro-Bold
+Filename(20): ipaexm.ttf
+Filename(10): IPAexMincho.ttf
+
+Name: IPAexGothic
+Type: TTF
+Class: Japan
+Provides(100): GothicBBB-Medium
+Provides(100): GothicBBBPro-Medium
+Provides(100): FutoGoB101-Bold
+Provides(100): FutoGoB101Pro-Bold
+Provides(100): Jun101-Light
+Provides(100): Jun101Pro-Light
+Provides(100): MidashiGo-MB31
+Provides(100): MidashiGoPro-MB31
+Filename(20): ipaexg.ttf
+Filename(10): IPAexGothic.ttf
+
+# Kozuka fonts
+
+Name: KozGoPr6N-Bold
+Type: CID
+Class: Japan
+Provides(70): FutoGoB101-Bold
+Provides(70): FutoGoB101Pro-Bold
+Filename: KozGoPr6N-Bold.otf
+
+Name: KozGoPr6N-Heavy
+Type: CID
+Class: Japan
+Provides(70): Jun101-Light
+Provides(70): Jun101Pro-Light
+Provides(70): MidashiGo-MB31
+Provides(70): MidashiGoPro-MB31
+Filename: KozGoPr6N-Heavy.otf
+
+Name: KozGoPr6N-Medium
+Type: CID
+Class: Japan
+Provides(70): GothicBBB-Medium
+Provides(70): GothicBBBPro-Medium
+Filename: KozGoPr6N-Medium.otf
+
+Name: KozGoPr6N-Regular
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-Regular.otf
+
+Name: KozGoPr6N-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-ExtraLight.otf
+
+Name: KozGoPr6N-Light
+Type: CID
+Class: Japan
+Filename: KozGoPr6N-Light.otf
+
+Name: KozGoPro-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozGoPro-ExtraLight.otf
+
+Name: KozGoPro-Light
+Type: CID
+Class: Japan
+Filename: KozGoPro-Light.otf
+
+
+Name: KozGoPro-Bold
+Type: CID
+Class: Japan
+Provides(90): FutoGoB101-Bold
+Provides(90): FutoGoB101Pro-Bold
+Filename: KozGoPro-Bold.otf
+
+Name: KozGoPro-Heavy
+Type: CID
+Class: Japan
+Provides(90): Jun101-Light
+Provides(90): Jun101Pro-Light
+Provides(90): MidashiGo-MB31
+Provides(90): MidashiGoPro-MB31
+Filename: KozGoPro-Heavy.otf
+
+Name: KozGoPro-Medium
+Type: CID
+Class: Japan
+Provides(90): GothicBBB-Medium
+Provides(90): GothicBBBPro-Medium
+Filename: KozGoPro-Medium.otf
+
+Name: KozGoPro-Regular
+Type: CID
+Class: Japan
+Filename: KozGoPro-Regular.otf
+
+Name: KozGoProVI-Bold
+Type: CID
+Class: Japan
+Provides(80): FutoGoB101-Bold
+Provides(80): FutoGoB101Pro-Bold
+Filename: KozGoProVI-Bold.otf
+
+Name: KozGoProVI-Heavy
+Type: CID
+Class: Japan
+Provides(80): Jun101-Light
+Provides(80): Jun101Pro-Light
+Provides(80): MidashiGo-MB31
+Provides(80): MidashiGoPro-MB31
+Filename: KozGoProVI-Heavy.otf
+
+Name: KozGoProVI-Medium
+Type: CID
+Class: Japan
+Provides(80): GothicBBB-Medium
+Provides(80): GothicBBBPro-Medium
+Filename: KozGoProVI-Medium.otf
+
+Name: KozGoProVI-Regular
+Type: CID
+Class: Japan
+Filename: KozGoProVI-Regular.otf
+
+Name: KozMinPr6N-Bold
+Type: CID
+Class: Japan
+Provides(70): FutoMinA101-Bold
+Provides(70): FutoMinA101Pro-Bold
+Filename: KozMinPr6N-Bold.otf
+
+Name: KozMinPr6N-Light
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Light.otf
+
+Name: KozMinPr6N-Regular
+Type: CID
+Class: Japan
+Provides(70): Ryumin-Light
+Provides(70): RyuminPro-Light
+Filename: KozMinPr6N-Regular.otf
+
+Name: KozMinPro-Bold
+Type: CID
+Class: Japan
+Provides(90): FutoMinA101-Bold
+Provides(90): FutoMinA101Pro-Bold
+Filename: KozMinPro-Bold.otf
+
+Name: KozMinPro-Light
+Type: CID
+Class: Japan
+Filename: KozMinPro-Light.otf
+
+Name: KozMinPro-Regular
+Type: CID
+Class: Japan
+Provides(90): Ryumin-Light
+Provides(90): RyuminPro-Light
+Filename: KozMinPro-Regular.otf
+
+Name: KozMinProVI-Bold
+Type: CID
+Class: Japan
+Provides(80): FutoMinA101-Bold
+Provides(80): FutoMinA101Pro-Bold
+Filename: KozMinProVI-Bold.otf
+
+Name: KozMinProVI-Light
+Type: CID
+Class: Japan
+Filename: KozMinProVI-Light.otf
+
+Name: KozMinProVI-Regular
+Type: CID
+Class: Japan
+Provides(80): Ryumin-Light
+Provides(80): RyuminPro-Light
+Filename: KozMinProVI-Regular.otf
+
+Name: KozMinPr6N-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-ExtraLight.otf
+
+Name: KozMinPr6N-Medium
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Medium.otf
+
+Name: KozMinPr6N-Heavy
+Type: CID
+Class: Japan
+Filename: KozMinPr6N-Heavy.otf
+
+Name: KozMinPro-ExtraLight
+Type: CID
+Class: Japan
+Filename: KozMinPro-ExtraLight.otf
+
+Name: KozMinPro-Medium
+Type: CID
+Class: Japan
+Filename: KozMinPro-Medium.otf
+
+Name: KozMinPro-Heavy
+Type: CID
+Class: Japan
+Filename: KozMinPro-Heavy.otf
+
+
+#
+# CHINESE FONTS
+#
+
+Name: LiHeiPro
+Type: TTF
+Class: CNS
+Provides(50): MHei-Medium
+Filename(20): 儷黑 Pro.ttf
+Filename(10): LiHeiPro.ttf
+
+Name: LiSongPro
+Type: TTF
+Class: CNS
+# Provides(50): MSung-Medium
+Provides(50): MSung-Light
+Filename(20): 儷宋 Pro.ttf
+Filename(10): LiSongPro.ttf
+
+Name: STXihei
+Type: TTF
+Class: GB
+Provides(20): STHeiti-Light
+Filename(20): 华文细黑.ttf
+Filename(10): STXihei.ttf
+
+Name: STHeiti
+Type: TTF
+Class: GB
+Provides(50): STHeiti-Regular
+Filename(20): 华文黑体.ttf
+Filename(10): STHeiti.ttf
+
+Name: STHeitiSC-Light
+Type: TTF
+Class: GB
+Provides(10): STHeiti-Light
+Filename(10): STHeiti Light.ttc(1)
+Filename(20): STHeitiSC-Light.ttf
+
+Name: STHeitiSC-Medium
+Type: TTF
+Class: GB
+Provides(40): STHeiti-Regular
+Filename(10): STHeiti Medium.ttc(1)
+Filename(20): STHeitiSC-Medium.ttf
+
+Name: STHeitiTC-Light
+Type: TTF
+Class: CNS
+Filename(10): STHeiti Light.ttc(0)
+Filename(20): STHeitiTC-Light.ttf
+
+Name: STHeitiTC-Medium
+Type: TTF
+Class: CNS
+Provides(40): MHei-Medium
+Filename(10): STHeiti Medium.ttc(0)
+Filename(20): STHeitiTC-Medium.ttf
+
+Name: STFangsong
+Type: TTF
+Class: GB
+# Provides(40): STFangsong-Light
+Provides(40): STFangsong-Regular
+Filename(20): 华文仿宋.ttf
+Filename(10): STFangsong.ttf
+
+Name: STSong
+Type: TTF
+Class: GB
+Provides(50): STSong-Light
+Filename(10): Songti.ttc(4)
+Filename(20): 宋体.ttc(3)
+Filename(30): 华文宋体.ttf
+Filename(40): STSong.ttf
+
+Name: STSongti-SC-Light
+Type: TTF
+Class: GB
+Provides(40): STSong-Light
+Filename(10): Songti.ttc(3)
+Filename(20): 宋体.ttc(2)
+Filename(30): STSongti-SC-Light.ttf
+
+Name: STSongti-SC-Regular
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(6)
+Filename(20): 宋体.ttc(4)
+Filename(30): STSongti-SC-Regular.ttf
+
+Name: STSongti-SC-Bold
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(1)
+Filename(20): 宋体.ttc(1)
+Filename(30): STSongti-SC-Bold.ttf
+
+Name: STSongti-SC-Black
+Type: TTF
+Class: GB
+Filename(10): Songti.ttc(0)
+Filename(20): 宋体.ttc(0)
+Filename(30): STSongti-SC-Black.ttf
+
+Name: STSongti-TC-Light
+Type: TTF
+Class: CNS
+Provides(40): MSung-Light
+Filename(10): Songti.ttc(5)
+Filename(20): STSongti-TC-Light.ttf
+
+Name: STSongti-TC-Regular
+Type: TTF
+Class: CNS
+# Provides(40): MSung-Medium
+Filename(10): Songti.ttc(7)
+Filename(20): STSongti-TC-Regular.ttf
+
+Name: STSongti-TC-Bold
+Type: TTF
+Class: CNS
+Filename(10): Songti.ttc(2)
+Filename(20): STSongti-TC-Bold.ttf
+
+Name: STKaiti
+Type: TTF
+Class: GB
+Provides(50): STKaiti-Regular
+Filename(10): Kaiti.ttc(4)
+Filename(20): 楷体.ttc(3)
+Filename(30): 华文楷体.ttf
+Filename(40): STKaiti.ttf
+
+Name: STKaiti-SC-Regular
+Type: TTF
+Class: GB
+Provides(40): STKaiti-Regular
+Filename(10): Kaiti.ttc(3)
+Filename(20): 楷体.ttc(2)
+Filename(30): STKaiti-SC-Regular.ttf
+
+Name: STKaiti-SC-Bold
+Type: TTF
+Class: GB
+Filename(10): Kaiti.ttc(1)
+Filename(20): 楷体.ttc(1)
+Filename(30): STKaiti-SC-Bold.ttf
+
+Name: STKaiti-SC-Black
+Type: TTF
+Class: GB
+Filename(10): Kaiti.ttc(0)
+Filename(20): 楷体.ttc(0)
+Filename(30): STKaiti-SC-Black.ttf
+
+Name: STKaiTi-TC-Regular
+Type: TTF
+Class: CNS
+Provides(40): MKai-Medium
+Filename(10): Kaiti.ttc(5)
+Filename(20): STKaiTi-TC-Regular.ttf
+
+Name: STKaiTi-TC-Bold
+Type: TTF
+Class: CNS
+Filename(10): Kaiti.ttc(2)
+Filename(20): STKaiTi-TC-Bold.ttf
+
+Name: STKaiti-Adobe-CNS1
+Type: TTF
+Class: CNS
+Provides(50): MKai-Medium
+Filename(10): Kaiti.ttc(4)
+Filename(20): 楷体.ttc(3)
+Filename(30): 华文楷体.ttf
+Filename(40): STKaiti.ttf
+
+# Adobe fonts
+
+# simplified chinese
+
+Name: AdobeSongStd-Light
+Type: CID
+Class: GB
+Provides(30): STSong-Light
+Filename(10): AdobeSongStd-Light.otf
+
+Name: AdobeHeitiStd-Regular
+Type: CID
+Class: GB
+Provides(30): STHeiti-Regular
+Provides(30): STHeiti-Light
+Filename(20): AdobeHeitiStd-Regular.otf
+
+Name: AdobeKaitiStd-Regular
+Type: CID
+Class: GB
+Provides(30): STKaiti-Regular
+Filename(20): AdobeKaitiStd-Regular.otf
+
+Name: AdobeFangsongStd-Regular
+Type: CID
+Class: GB
+# Provides(30): STFangsong-Light
+Provides(30): STFangsong-Regular
+Filename(20): AdobeFangsongStd-Regular.otf
+
+# traditional chinese
+
+Name: AdobeMingStd-Light
+Type: CID
+Class: CNS
+Provides(30): MSung-Light
+# Provides(30): MSung-Medium
+Filename(20): AdobeMingStd-Light.otf
+
+Name: AdobeFanHeitiStd-Bold
+Type: CID
+Class: CNS
+Provides(30): MHei-Medium
+Provides(30): MKai-Medium
+Filename(20): AdobeFanHeitiStd-Bold.otf
+
+# korean
+
+Name: AdobeMyungjoStd-Medium
+Type: CID
+Class: Korea
+Provides(20): HYSMyeongJo-Medium
+Filename: AdobeMyungjoStd-Medium.otf
+
+Name: AdobeGothicStd-Bold
+Type: CID
+Class: Korea
+Provides(20): HYGoThic-Medium
+Provides(50): HYRGoThic-Medium
+Filename: AdobeGothicStd-Bold.otf
+
+#
+# KOREAN FONTS
+#
+
+# apple fonts
+
+Name: AppleMyungjo
+Type: TTF
+Class: Korea
+Provides(50): HYSMyeongJo-Medium
+Filename: AppleMyungjo.ttf
+
+Name: AppleGothic
+Type: TTF
+Class: Korea
+Provides(50): HYGoThic-Medium
+Provides(80): HYRGoThic-Medium
+Filename: AppleGothic.ttf
+
+Name: NanumMyeongjo
+Type: TTF
+Class: Korea
+Provides(30): HYSMyeongJo-Medium
+Filename: NanumMyeongjo.ttc(0)
+
+Name: NanumMyeongjoBold
+Type: TTF
+Class: Korea
+Filename: NanumMyeongjo.ttc(1)
+
+Name: NanumMyeongjoExtraBold
+Type: TTF
+Class: Korea
+Filename: NanumMyeongjo.ttc(2)
+
+Name: NanumGothic
+Type: TTF
+Class: Korea
+Provides(30): HYGoThic-Medium
+Provides(60): HYRGoThic-Medium
+Filename: NanumGothic.ttc(0)
+
+Name: NanumGothicBold
+Type: TTF
+Class: Korea
+Filename: NanumGothic.ttc(1)
+
+Name: NanumGothicExtraBold
+Type: TTF
+Class: Korea
+Filename: NanumGothic.ttc(2)
+
+Name: NanumBrush
+Type: TTF
+Class: Korea
+Filename: NanumScript.ttc(0)
+
+Name: NanumPen
+Type: TTF
+Class: Korea
+Filename: NanumScript.ttc(1)
+
+Name: AppleSDGothicNeo-Thin
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Thin.otf
+
+Name: AppleSDGothicNeo-UltraLight
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-UltraLight.otf
+
+Name: AppleSDGothicNeo-Light
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Light.otf
+
+Name: AppleSDGothicNeo-Regular
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Regular.otf
+
+Name: AppleSDGothicNeo-Medium
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Medium.otf
+
+Name: AppleSDGothicNeo-SemiBold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-SemiBold.otf
+
+Name: AppleSDGothicNeo-Bold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Bold.otf
+
+Name: AppleSDGothicNeo-ExtraBold
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-ExtraBold.otf
+
+Name: AppleSDGothicNeo-Heavy
+Type: CID
+Class: Korea
+Filename: AppleSDGothicNeo-Heavy.otf
+
+#
+# Microsoft Mac Office fonts
+#
+
+# Korea
+
+Name: Gulim
+Type: TTF
+Class: Korea
+Provides(70): HYRGoThic-Medium
+Provides(70): HYGoThic-Medium
+Filename(30): Gulim.ttf
+Filename(50): gulim.ttc
+
+Name: Dotum
+Type: TTF
+Class: Korea
+Provides(40): HYGoThic-Medium
+Filename(50): Dotum.ttf
+
+Name: Batang
+Type: TTF
+Class: Korea
+Provides(40): HYSMyeongJo-Medium
+Filename(50): Batang.ttf
+
+# simplified chinese
+
+Name: SimHei
+Type: TTF
+Class: GB
+Provides(60): STHeiti-Regular
+Provides(60): STKaiti-Regular
+Provides(60): STHeiti-Light
+Filename(50): SimHei.ttf
+
+Name: SimSun
+Type: TTF
+Class: GB
+Provides(60): STSong-Light
+# Provides(60): STFangsong-Light
+Provides(60): STFangsong-Regular
+Filename(50): SimSun.ttf
+
+# traditional chinese
+
+Name: MingLiU
+Type: TTF
+Class: CNS
+Provides(60): MHei-Medium
+Provides(60): MKai-Medium
+# Provides(60): MSung-Medium
+Provides(60): MSung-Light
+Filename(50): MingLiU.ttf
+
+Name: PMingLiU
+Type: TTF
+Class: CNS
+Filename(50): PMingLiU.ttf
+
+# japanese
+
+Name: MS-Gothic
+Type: TTF
+Class: Japan
+Provides(95): GothicBBB-Medium
+Provides(95): GothicBBBPro-Medium
+Provides(95): MidashiGo-MB31
+Provides(95): MidashiGoPro-MB31
+Provides(95): FutoGoB101-Bold
+Provides(95): FutoGoB101Pro-Bold
+Provides(95): MidashiGo-MB31
+Provides(95): MidashiGoPro-MB31
+Provides(95): Jun101-Light
+Provides(95): Jun101Pro-Light
+Filename(50): MS Gothic.ttf
+Filename(30): MS-Gothic.ttf
+
+Name: MS-Mincho
+Type: TTF
+Class: Japan
+Provides(95): Ryumin-Light
+Provides(95): RyuminPro-Light
+Provides(95): FutoMinA101-Bold
+Provides(95): FutoMinA101Pro-Bold
+Filename(50): MS Mincho.ttf
+Filename(30): MS-Mincho.ttf
+
+Name: MS-PGothic
+Type: TTF
+Class: Japan
+Filename(50): MS PGothic.ttf
+Filename(30): MS-PGothic.ttf
+
+Name: MS-PMincho
+Type: TTF
+Class: Japan
+Filename(50): MS PMincho.ttf
+Filename(30): MS-PMincho.ttf
+
+Name: Meiryo
+Type: TTF
+Class: Japan
+Filename(50): Meiryo.ttf
+
+Name: Meiryo-Bold
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Bold.ttf
+Filename(30): Meiryo-Bold.ttf
+
+Name: Meiryo-BoldItalic
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Bold Italic.ttf
+Filename(30): Meiryo-BoldItalic.ttf
+
+Name: Meiryo-Italic
+Type: TTF
+Class: Japan
+Filename(50): Meiryo Italic.ttf
+Filename(30): Meiryo-Italic.ttf
+
+
+### Local Variables:
+### perl-indent-level: 2
+### tab-width: 2
+### indent-tabs-mode: nil
+### End:
+# vim: set tabstop=2 expandtab autoindent:
diff --git a/Master/tlpkg/tlpsrc/cjk-gs-integrate.tlpsrc b/Master/tlpkg/tlpsrc/cjk-gs-integrate.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/cjk-gs-integrate.tlpsrc