#!/usr/bin/perl # # A simple wrapper for kingtr command (part of IBM's Translation King). # Copyright (c) 2006, Hiroyuki Ohsaki. # All rights reserved. # # $Id: pkingtr,v 1.8 2010/03/29 12:00:55 oosaki Exp $ # no diagnostics; no warnings; require 'jcode.pl'; use File::Basename; use Getopt::Long; use IPC::Open2; use strict; our %PRE_TRANS_TABLE = ('(ネットワーク|図)中' => '$1内', 'が(.*?)に与える影響' => 'の$1への影響', '\\\%' => '%',); our %POST_TRANS_TABLE = ( '\b(about)\b' => 'approximately', ',\s+([^,]+), etc\.' => ', and $1', '\b(which)\b' => 'that', '\b(Table)\b' => 'Tab.', '\b((figure|Fig.)\s+)' => 'Fig.~', '\b(Eq.\s+)' => 'Eq.~', '\b(Section\s+)' => 'Section~', '\b(Tab.\s+)' => 'Tab.~', '\b(Here,)' => 'where', '\b(to\s+([\d,.]+)\s+from\s+([\d,.]+))' => 'from $3 to $2', '%' => '\\\%', 'In order to' => 'To', 'in order to' => 'to', 'Note that,' => 'Note that',); sub usage { my $prog = basename($0); die <{$label} = $1; $label++; }/eg; $str =~ s/\s*(\$[^\$]+\$)\s*/{ $hashp->{$label} = $1; $label++; }/eg; $str =~ s/\s*(\\cite{.*?})\s*/{ my $key = "[$label]"; $hashp->{$key} = $1; $label++; $key; }/eg; return $str; } sub unmask_strings { my ($str, $hashp) = @_; while (my ($key, $val) = each %{$hashp}) { $key = quotemeta $key; $str =~ s/$key/$val/g; } return $str; } sub replace_with_regexps { my ($str, $hashp) = @_; while (my ($key, $val) = each %{$hashp}) { eval qq(\$str =~ s/$key/$val/g;); } return $str; } sub update_userdic { if (-f "$ENV{HOME}/.king/Makefile") { system "cd $ENV{HOME}/.king && make clean all >/dev/null"; } } our $show_original; our $no_dictionary; our $debug; GetOptions('original' => \$show_original, 'nodict' => \$no_dictionary, 'debug' => \$debug,) or usage; &update_userdic; undef $/; my $original = <>; my %hash; jcode::convert(\$original, 'euc'); $original = mask_strings($original, \%hash); $original = trim_string($original); $original = replace_with_regexps($original, \%PRE_TRANS_TABLE); warn ">> $original\n\n" if $debug; my $opts = $no_dictionary ? 'HOME=/tmp' : ''; my $pid = open2(*IN, *OUT, "LANG=ja_JP.eucJP $opts kingtr"); print OUT $original; close(OUT); my $translated = join('', ); $translated =~ s/([0-9A-Za-z])\n([0-9A-Za-z])/$1 $2/g; $translated =~ s/\n//g; warn ">> $translated\n\n" if $debug; $translated = unmask_strings($translated, \%hash); $translated = replace_with_regexps($translated, \%POST_TRANS_TABLE); print "$original\n" if $show_original; print "$translated\n";