Server IP : 198.23.51.224 / Your IP : 3.138.121.63 Web Server : Apache System : Linux web20.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Wed Oct 16 08:01:30 UTC 2024 x86_64 User : funkesmith ( 274908) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : ON Directory : /bin/ |
Upload File : |
#!/usr/bin/perl -w # # Copyright (C) 2007-2008 ... # Alex Linke <alinke@lingua-systems.com> # Rona Linke <rlinke@lingua-systems.com> # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH # Copyright (C) 2017 Netzum Sorglos Software GmbH # use strict; use Getopt::Long; require 5.008; use Lingua::Translit; use Lingua::Translit::Tables qw/:all/; my $VERSION = '0.5'; =pod =head1 NAME translit - transliterate text between various writing systems =head1 SYNOPSIS translit B<-t> I<name> B<-r> B<-i> I<file> B<-o> I<file> -l -v -h =head1 DESCRIPTION B<translit> transliterates B<UTF-8> encoded natural language text from one writing system to another. It utilizes the Perl module L<Lingua::Translit> to accomplish this task and follows the provided transliteration standards as strict as possible. B<translit> regards the following commandline switches: =over 4 =item B<--trans>, B<-t> I<name> Use the transliteration standard named I<name>. =item B<--reverse>, B<-r> Transliterate in reverse direction. B<NOTE>: Not every transliteration is capable of being reversed. If unsure, have a look at the list of supported transliterations using the B<--list> switch. =item B<--infile>, B<-i> I<FILE> Read text from I<FILE>. Defaults to STDIN. =item B<--outfile>, B<-o> I<FILE> Write the transliterated text to I<FILE>. Defaults to STDOUT. =item B<--list>, B<-l> Print a list of supported transliterations showing their =over 4 =item * name =item * reversibility =item * description =back =item B<--verbose>, B<-v> Print verbose status messages to STDERR. =item B<--help>, B<-h> Show a short help text introducing command line switches only. =back =cut # Set defaults where possible my %opt = ( trans => "", infile => "", outfile => "", reverse => 0, list => 0, verbose => 0, # off help => 0 ); show_help(1) unless GetOptions( "trans|t=s" => \$opt{trans}, "infile|i=s" => \$opt{infile}, "outfile|o=s" => \$opt{outfile}, "reverse|r" => \$opt{reverse}, "list|l" => \$opt{list}, "verbose|v" => \$opt{verbose}, "help|h" => \$opt{help} ); show_help(0) if $opt{help}; show_list() if $opt{list}; show_help(1) unless $opt{trans}; # Assure the requested transliteration is supported... die "$opt{trans} is not supported.\n" unless translit_supported( $opt{trans} ); # ...and reverse transliteration is supported, too - if requested die "$opt{trans} cannot be reversed.\n" if ( $opt{reverse} && !translit_reverse_supported( $opt{trans} ) ); # If no input file was specified, use STDIN as a fallback. This way, translit # may also be used in pipes! my $in; if ( $opt{infile} ) { print STDERR "Reading input from $opt{infile}...\n" if $opt{verbose}; open IN, "$opt{infile}" or die "$opt{infile}: $!\n"; $in = *IN; } else { print STDERR "Reading input from STDIN...\n" if $opt{verbose}; $in = *STDIN; } # If no output file was specified, use STDOUT as a fallback. my $out; if ( $opt{outfile} ) { print STDERR "Writing output to $opt{outfile}...\n" if $opt{verbose}; open OUT, "> $opt{outfile}" or die "$opt{outfile}: $!\n"; $out = *OUT; } else { print STDERR "Writing output to STDOUT...\n" if $opt{verbose}; $out = *STDOUT; } # Slurp in all the input and close filehandle local $/; my $text = <$in>; close($in); # Transliterate my $tr = new Lingua::Translit( $opt{trans} ); my $text_tr; unless ( $opt{reverse} ) { print STDERR "Transliterating according to ", $tr->name(), "...\n" if $opt{verbose}; $text_tr = $tr->translit($text); } else { print STDERR "Transliterating according to ", $tr->name(), " (reverse)...\n" if $opt{verbose}; $text_tr = $tr->translit_reverse($text); } # Write the transliterated text to the filehandle and close it print $out $text_tr; close($out); sub show_help { my $retval = shift(); print "translit v$VERSION -- ", "(c) 2009-2016 Lingua-Systems Software GmbH\n\n", "usage: $0 -i FILE -o FILE -t NAME -r -l -v -h\n\n", " --infile -i FILE read input from FILE\n", " --outfile -o FILE write output to FILE\n", " --trans -t NAME use transliteration NAME\n", " --reverse -r transliterate in reverse direction\n", " --list -l list all supported transliterations\n\n", " --verbose -v print verbose status messages\n", " --help -h show this help\n\n", "Read translit(1) for details.\n"; exit($retval); } sub show_list { print "Transliterations supported by Lingua::Translit v" . $Lingua::Translit::VERSION . ":\n\n"; translit_list_supported(); exit(0); } =head1 RESTRICTIONS The input has to be UTF-8 encoded. =head1 BUGS None known. Please report bugs using CPAN's request tracker at L<https://rt.cpan.org/Public/Dist/Display.html?Name=Lingua-Translit>. =head1 SEE ALSO L<Lingua::Translit>, L<Lingua::Translit::Tables> =head1 AUTHORS Alex Linke <alinke@netzum-sorglos.de> Rona Linke <rlinke@netzum-sorglos.de> =head1 LICENSE AND COPYRIGHT Copyright (C) 2007-2008 Alex Linke and Rona Linke Copyright (C) 2009-2016 Lingua-Systems Software GmbH Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH Copyright (C) 2017 Netzum Sorglos Software GmbH This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut # vim: set ft=perl sts=4 sw=4 ts=4 ai et: