Lingua-Translit-0.29/0000755000175000017500000000000014252326622013755 5ustar alinkealinkeLingua-Translit-0.29/lib/0000755000175000017500000000000014252326622014523 5ustar alinkealinkeLingua-Translit-0.29/lib/Lingua/0000755000175000017500000000000014252326622015742 5ustar alinkealinkeLingua-Translit-0.29/lib/Lingua/Translit/0000755000175000017500000000000014252326622017542 5ustar alinkealinkeLingua-Translit-0.29/lib/Lingua/Translit/Tables.pm0000644000175000017500000002030514252325775021322 0ustar alinkealinkepackage Lingua::Translit::Tables; # # Copyright (C) 2007-2008 ... # Alex Linke # Rona Linke # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH # Copyright (C) 2017-2022 Netzum Sorglos Software GmbH # use strict; use warnings; use utf8; require 5.008; our $VERSION = '0.28'; use Carp; =pod =encoding utf8 =head1 NAME Lingua::Translit::Tables - provides transliteration tables =head1 SYNOPSIS use Lingua::Translit::Tables qw/:checks/; my $truth; $truth = translit_supported("ISO 9"); $truth = translit_reverse_supported("ISO 9"); use Lingua::Translit::Tables qw/:list/; translit_list_supported(); =head1 DESCRIPTION This module is primary used to provide transliteration tables for L and therefore allows one to separate data and algorithm. Beyond that, it provides routines to check if a given transliteration is supported and allows one to print a simple list of supported transliterations along with some meta information. =head1 EXPORTS No symbols are exported by default. Use either the routine's name or one of the following I to import symbols to your namespace. =over 4 =item B Import all routines. =item B Import all routines that allow one to check if a given transliteration is supported: translit_supported() and translit_reverse_supported(). =item B Import translit_list_supported(). (Convenience tag) =back =cut require Exporter; our @ISA = qw/Exporter/; our @EXPORT = qw//; # Export nothing by default our @EXPORT_OK = qw/translit_supported translit_reverse_supported translit_list_supported/; our %EXPORT_TAGS = ( checks => [qw/translit_supported translit_reverse_supported/], list => [qw/translit_list_supported/], all => [@EXPORT_OK] ); # For convenience, the tables are initialized at the bottom of this file. our %tables; # Used internally to retrieve a reference to a single transliteration table. sub _get_table_reference { my $name = shift(); return unless $name; $name = _get_table_id($name); foreach my $table ( keys %tables ) { return _handle_perl_unicode_bug( $tables{$table} ) if $table =~ /^$name$/i; } return; } # Handle the "Unicode Bug" affecting code points in the Latin-1 block. # # Have a look at perlunicode (section "The 'Unicode Bug'") for details. sub _handle_perl_unicode_bug { my $tbl = shift(); foreach my $rule ( @{ $tbl->{rules} } ) { utf8::upgrade( $rule->{from} ); utf8::upgrade( $rule->{to} ); if ( defined( $rule->{context} ) ) { utf8::upgrade( $rule->{context}->{before} ) if defined $rule->{context}->{before}; utf8::upgrade( $rule->{context}->{after} ) if defined $rule->{context}->{after}; } } return $tbl; } =head1 ROUTINES =head2 translit_supported(I) Returns true (1), iff I is supported. False (0) otherwise. =cut sub translit_supported { return ( _get_table_reference( _get_table_id( $_[0] ) ) ? 1 : 0 ); } =head2 translit_reverse_supported(I) Returns true (1), iff I is supported and allows reverse transliteration. False (0) otherwise. =cut sub translit_reverse_supported { my $table = _get_table_reference( _get_table_id( $_[0] ) ); croak("Failed to retrieve table for $_[0].") unless ($table); return ( ( $table->{reverse} =~ /^true$/ ) ? 1 : 0 ); } =head2 B Prints a list of all supported transliterations to STDOUT (UTF-8 encoded), providing the following information: * Name * Reversibility * Description The same information is provided in this document as well: =cut sub translit_list_supported { require Encode; foreach my $table ( sort keys %tables ) { printf( "%s, %sreversible, %s\n", Encode::encode( 'utf8', $tables{$table}->{name} ), ( $tables{$table}->{reverse} eq "false" ? 'not ' : '' ), Encode::encode( 'utf8', $tables{$table}->{desc} ) ); } } =head1 SUPPORTED TRANSLITERATIONS =over 4 =item Cyrillic I, not reversible, ALA-LC:1997, Cyrillic to Latin, Russian I, reversible, ISO 9:1995, Cyrillic to Latin I, reversible, ISO 9:1954, Cyrillic to Latin I, reversible, DIN 1460:1982, Cyrillic to Latin, Russian I, reversible, DIN 1460:1982, Cyrillic to Latin, Ukrainian I, reversible, DIN 1460:1982, Cyrillic to Latin, Bulgarian I, not reversible, The Streamlined System: 2006, Cyrillic to Latin, Bulgarian I, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Russian I, not reversible, GOST 7.79:2000 (table B), Cyrillic to Latin with support for Old Russian (pre 1918), Russian I, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Ukrainian I, not reversible, BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian I, not reversible, BGN/PCGN:1947 (Strict Variant), Cyrillic to Latin, Russian =item Greek I, not reversible, ISO 843:1997, Greek to Latin I, not reversible, DIN 31634:1982, Greek to Latin I, not reversible, Greeklish (Phonetic), Greek to Latin =item Latin I, not reversible, Czech without diacritics I, not reversible, German without umlauts I, not reversible, Unaccented Polish I, not reversible, Romanian without diacritics as commonly used I, not reversible, Slovak without diacritics I, not reversible, Slovenian without diacritics I, reversible, Romanian with appropriate diacritics =item Arabic I, not reversible, Common Romanization of Arabic =item Sanskrit I, not reversible, IAST Romanization to Devanāgarī I, not reversible, Devanāgarī to IAST Romanization =back =head1 ADDING NEW TRANSLITERATIONS In case you want to add your own transliteration tables to L, have a look at the developer documentation at L. A template of a transliteration table is provided as well (F) so you can easily start developing. =head1 BUGS None known. Please report bugs using CPAN's request tracker at L. =head1 SEE ALSO L L =head1 CREDITS Thanks to Dr. Daniel Eiwen, Romanisches Seminar, Universitaet Koeln for his help on Romanian transliteration. Thanks to Dmitry Smal and Rusar Publishing for contributing the "ALA-LC RUS" transliteration table. Thanks to Ahmed Elsheshtawy for his help implementing the "Common ARA" Arabic transliteration. Thanks to Dusan Vuckovic for contributing the "ISO/R 9" transliteration table. Thanks to Ștefan Suciu for contributing the "ISO 8859-16 RON" transliteration table. Thanks to Philip Kime for contributing the "IAST Devanagari" and "Devanagari IAST" transliteration tables. Thanks to Nikola Lečić for contributing the "BGN/PCGN RUS Standard" and "BGN/PCGN RUS Strict" transliteration tables. =head1 AUTHORS Alex Linke Rona Linke =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-2022 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 # Get a table's identifier (based on the table's name) # i.e "Common DEU" -> "common_deu" sub _get_table_id { my $name = shift(); return "" unless $name; $name =~ s/\s/_/g; return lc($name); } # For convenience, the next line is automatically substituted with the set # of transliteration tables at build time. %tables; # PLACEHOLDER 1; # vim: set ft=perl sts=4 sw=4 ts=4 ai et: Lingua-Translit-0.29/lib/Lingua/Translit.pm0000644000175000017500000002701714252325775020117 0ustar alinkealinkepackage Lingua::Translit; # # Copyright (C) 2007-2008 ... # Alex Linke # Rona Linke # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH # Copyright (C) 2017-2022 Netzum Sorglos Software GmbH # use strict; use warnings; require 5.008; use Carp qw/croak/; use Encode qw/encode decode/; use Lingua::Translit::Tables; our $VERSION = '0.29'; =pod =encoding utf8 =head1 NAME Lingua::Translit - transliterates text between writing systems =head1 SYNOPSIS use Lingua::Translit; my $tr = new Lingua::Translit("ISO 843"); my $text_tr = $tr->translit("character oriented string"); if ($tr->can_reverse()) { $text_tr = $tr->translit_reverse("character oriented string"); } =head1 DESCRIPTION Lingua::Translit can be used to convert text from one writing system to another, based on national or international transliteration tables. Where possible a reverse transliteration is supported. The term C describes the conversion of text from one writing system or alphabet to another one. The conversion is ideally unique, mapping one character to exactly one character, so the original spelling can be reconstructed. Practically this is not always the case and one single letter of the original alphabet can be transcribed as two, three or even more letters. Furthermore there is more than one transliteration scheme for one writing system. Therefore it is an important and necessary information, which scheme will be or has been used to transliterate a text, to work integrative and be able to reconstruct the original data. Reconstruction is a problem though for non-unique transliterations, if no language specific knowledge is available as the resulting clusters of letters may be ambiguous. For example, the Greek character "PSI" maps to "ps", but "ps" could also result from the sequence "PI", "SIGMA" since "PI" maps to "p" and "SIGMA" maps to s. If a transliteration table leads to ambiguous conversions, the provided table cannot be used reverse. Otherwise the table can be used in both directions, if appreciated. So if ISO 9 is originally created to convert Cyrillic letters to the Latin alphabet, the reverse transliteration will transform Latin letters to Cyrillic. =head1 METHODS =head2 new(I<"name of table">) Initializes an object with the specific transliteration table, e.g. "ISO 9". =cut sub new { my $class = shift(); my $name = shift(); my $self; # Assure that a table name was set croak("No transliteration name given.") unless $name; # Stay compatible with programs that use Lingua::Translit < 0.05 if ( $name =~ /^DIN 5008$/i ) { $name = "Common DEU"; } my $table = Lingua::Translit::Tables::_get_table_reference($name); # Check that a table reference was assigned to the object croak("No table found for $name.") unless $table; # Assure the table's data is complete croak("$name table: missing 'name'") unless defined $table->{name}; croak("$name table: missing 'desc'") unless defined $table->{desc}; croak("$name table: missing 'reverse'") unless defined $table->{reverse}; croak("$name table: missing 'rules'") unless defined $table->{rules}; # Copy over the table's data $self->{name} = $table->{name}; $self->{desc} = $table->{desc}; $self->{rules} = $table->{rules}; # Set a truth value of the transliteration's reversibility according to # the natural language string in the original transliteration table $self->{reverse} = ( $table->{reverse} =~ /^true$/i ) ? 1 : 0; undef($table); return bless $self, $class; } =head2 translit(I<"character oriented string">) Transliterates the given text according to the object's transliteration table. Returns the transliterated text. =cut sub translit { my $self = shift(); my $text = shift(); # Return if no input was given return undef if ! defined $text; return '' if $text eq ''; my $utf8_flag_on = Encode::is_utf8($text); unless ($utf8_flag_on) { $text = decode( "UTF-8", $text ); } foreach my $rule ( @{ $self->{rules} } ) { if ( defined $rule->{context} ) { my $c = $rule->{context}; # single context rules if ( defined $c->{before} && !defined $c->{after} ) { $text =~ s/$rule->{from}(?=$c->{before})/$rule->{to}/g; } elsif ( defined $c->{after} && !defined $c->{before} ) { $text =~ s/(?<=$c->{after})$rule->{from}/$rule->{to}/g; } # double context rules: logical "inbetween" elsif ( defined $c->{before} && defined $c->{after} ) { $text =~ s/ (?<=$c->{after})$rule->{from}(?=$c->{before}) /$rule->{to}/gx; } else { croak("incomplete rule context"); } } else { $text =~ s/$rule->{from}/$rule->{to}/g; } } unless ($utf8_flag_on) { return encode( "UTF-8", $text ); } else { return $text; } } =head2 translit_reverse(I<"character oriented string">) Transliterates the given text according to the object's transliteration table, but uses it the other way round. For example table ISO 9 is a transliteration scheme for the conversion of Cyrillic letters to the Latin alphabet. So if used reverse, Latin letters will be mapped to Cyrillic ones. Returns the transliterated text. =cut sub translit_reverse { my $self = shift(); my $text = shift(); # Return if no input was given return undef if ! defined $text; return '' if $text eq ''; # Is this transliteration reversible? croak("$self->{name} cannot be reversed") unless $self->{reverse}; my $utf8_flag_on = Encode::is_utf8($text); unless ($utf8_flag_on) { $text = decode( "UTF-8", $text ); } foreach my $rule ( @{ $self->{rules} } ) { if ( defined $rule->{context} ) { my $c = $rule->{context}; # single context rules if ( defined $c->{before} && !defined $c->{after} ) { $text =~ s/$rule->{to}(?=$c->{before})/$rule->{from}/g; } elsif ( defined $c->{after} && !defined $c->{before} ) { $text =~ s/(?<=$c->{after})$rule->{to}/$rule->{from}/g; } # double context rules: logical "inbetween" elsif ( defined $c->{before} && defined $c->{after} ) { $text =~ s/ (?<=$c->{after})$rule->{to}(?=$c->{before}) /$rule->{from}/gx; } else { croak("incomplete rule context"); } } else { $text =~ s/$rule->{to}/$rule->{from}/g; } } unless ($utf8_flag_on) { return encode( "UTF-8", $text ); } else { return $text; } } =head2 can_reverse() Returns true (1), iff reverse transliteration is possible. False (0) otherwise. =cut sub can_reverse { return $_[0]->{reverse}; } =head2 name() Returns the name of the chosen transliteration table, e.g. "ISO 9". =cut sub name { return $_[0]->{name}; } =head2 desc() Returns a description for the transliteration, e.g. "ISO 9:1995, Cyrillic to Latin". =cut sub desc { return $_[0]->{desc}; } =head1 SUPPORTED TRANSLITERATIONS =over 4 =item Cyrillic I, not reversible, ALA-LC:1997, Cyrillic to Latin, Russian I, reversible, ISO 9:1995, Cyrillic to Latin I, reversible, ISO 9:1954, Cyrillic to Latin I, reversible, DIN 1460:1982, Cyrillic to Latin, Russian I, reversible, DIN 1460:1982, Cyrillic to Latin, Ukrainian I, reversible, DIN 1460:1982, Cyrillic to Latin, Bulgarian I, not reversible, The Streamlined System: 2006, Cyrillic to Latin, Bulgarian I, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Russian I, not reversible, GOST 7.79:2000 (table B), Cyrillic to Latin with support for Old Russian (pre 1918), Russian I, reversible, GOST 7.79:2000 (table B), Cyrillic to Latin, Ukrainian I, not reversible, BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian I, not reversible, BGN/PCGN:1947 (Strict Variant), Cyrillic to Latin, Russian =item Greek I, not reversible, ISO 843:1997, Greek to Latin I, not reversible, DIN 31634:1982, Greek to Latin I, not reversible, Greeklish (Phonetic), Greek to Latin =item Latin I, not reversible, Czech without diacritics I, not reversible, German without umlauts I, not reversible, Unaccented Polish I, not reversible, Romanian without diacritics as commonly used I, not reversible, Slovak without diacritics I, not reversible, Slovenian without diacritics I, reversible, Romanian with appropriate diacritics =item Arabic I, not reversible, Common Romanization of Arabic =item Sanskrit I, not reversible, IAST Romanization to Devanāgarī I, not reversible, Devanāgarī to IAST Romanization =back =head1 ADDING NEW TRANSLITERATIONS In case you want to add your own transliteration tables to L, have a look at the developer documentation at L. A template of a transliteration table is provided as well (F) so you can easily start developing. =head1 RESTRICTIONS L is suited to handle B and utilizes comparisons and regular expressions that rely on B. Therefore, any input is supposed to be B (C, ...) instead of byte oriented. However, if your data is byte oriented, be sure to pass it B to translit() and/or translit_reverse() - it will be converted internally. =head1 BUGS None known. Please report bugs using CPAN's request tracker at L. =head1 SEE ALSO L, L, L C's manpage L =head1 CREDITS Thanks to Dr. Daniel Eiwen, Romanisches Seminar, Universitaet Koeln for his help on Romanian transliteration. Thanks to Dmitry Smal and Rusar Publishing for contributing the "ALA-LC RUS" transliteration table. Thanks to Ahmed Elsheshtawy for his help implementing the "Common ARA" Arabic transliteration. Thanks to Dusan Vuckovic for contributing the "ISO/R 9" transliteration table. Thanks to Ștefan Suciu for contributing the "ISO 8859-16 RON" transliteration table. Thanks to Philip Kime for contributing the "IAST Devanagari" and "Devanagari IAST" transliteration tables. Thanks to Nikola Lečić for contributing the "BGN/PCGN RUS Standard" and "BGN/PCGN RUS Strict" transliteration tables. =head1 AUTHORS Alex Linke Rona Linke =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-2022 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 1; # vim: set ft=perl sts=4 sw=4 ts=4 ai et: Lingua-Translit-0.29/README0000644000175000017500000000165314252325775014652 0ustar alinkealinkePerl Module Lingua::Translit ---------------------------- ABOUT Lingua::Translit can be used to convert text from one writing system to another, based on national or international transliteration tables. Where possible a reverse transliteration is supported. PREREQUISTES Perl 5.8.0 or above If you are going to work on the included XML definitions or even want to write your own, XML::LibXML is needed as well. INSTALLATION To test and install Lingua::Translit, untar the archive and execute perl Makefile.PL make make test make install COPYRIGHT AND LICENSE 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-2022 Netzum Sorglos Software GmbH This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Lingua-Translit-0.29/META.yml0000644000175000017500000000104714252326622015230 0ustar alinkealinke--- abstract: 'transliterates text between writing systems' author: - 'Alex Linke ' build_requires: ExtUtils::MakeMaker: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Lingua-Translit no_index: directory: - t - inc version: '0.29' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' Lingua-Translit-0.29/tools/0000755000175000017500000000000014252326622015115 5ustar alinkealinkeLingua-Translit-0.29/tools/substitute_tables.pl0000755000175000017500000000177714252325775021246 0ustar alinkealinke#!/usr/bin/perl -w # # Copyright (C) 2007-2008 Alex Linke # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH # Copyright (C) 2017-2022 Netzum Sorglos Software GmbH # use strict; use IO::File; my $tbl_file = 'xml/tables.dump'; my $infile = $ARGV[0] || die "usage: $0 file"; my $fh = new IO::File(); local $/; # read input file $fh->open($infile) or die "$infile: $!\n"; my $in_content = <$fh>; $fh->close(); # read tables file $fh->open($tbl_file) or die "$tbl_file: $!\n"; my $tbls = <$fh>; $fh->close(); if ( $in_content =~ s/\n\%tables;\s+# PLACEHOLDER\s*\n/\n$tbls\n/ ) { print "$infile: substituted tables: " . length($tbls) . " bytes.\n"; } else { print "$infile: no substitution.\n"; exit 1; } chmod 0644, $infile or die "chmod: $!\n"; # write output to input file $fh->open("> $infile") or die "$infile: $!\n"; print $fh $in_content; $fh->close(); # vim: set ft=perl sts=4 sw=4 ts=4 ai et: Lingua-Translit-0.29/translit0000755000175000017500000001277614252325775015570 0ustar alinkealinke#!/usr/bin/perl -w # # Copyright (C) 2007-2008 ... # Alex Linke # Rona Linke # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016-2017 Netzum Sorglos, Lingua-Systems Software GmbH # Copyright (C) 2017-2022 Netzum Sorglos Software GmbH # use strict; use Getopt::Long; require 5.008; use Lingua::Translit; use Lingua::Translit::Tables qw/:all/; my $VERSION = '0.6'; =pod =head1 NAME translit - transliterate text between various writing systems =head1 SYNOPSIS translit B<-t> I B<-r> B<-i> I B<-o> I -l -v -h =head1 DESCRIPTION B transliterates B encoded natural language text from one writing system to another. It utilizes the Perl module L to accomplish this task and follows the provided transliteration standards as strict as possible. B regards the following commandline switches: =over 4 =item B<--trans>, B<-t> I Use the transliteration standard named I. =item B<--reverse>, B<-r> Transliterate in reverse direction. B: 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 Read text from I. Defaults to STDIN. =item B<--outfile>, B<-o> I Write the transliterated text to I. 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) 2007-2022 Netzum Sorglos 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. =head1 SEE ALSO L, L =head1 AUTHORS Alex Linke Rona Linke =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-2022 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: Lingua-Translit-0.29/Makefile.PL0000644000175000017500000000135012720600042015713 0ustar alinkealinke# Lingua::Translit heavily relies on Perl's UTF-8 implementation and # therefore needs at least Perl 5.8.0 to be installed. require 5.008; use strict; use ExtUtils::MakeMaker; WriteMakefile( NAME => "Lingua::Translit", LICENSE => "perl", VERSION_FROM => "lib/Lingua/Translit.pm", ABSTRACT_FROM => "lib/Lingua/Translit.pm", AUTHOR => 'Alex Linke ', EXE_FILES => [ qw/translit/ ], PL_FILES => { 'tools/substitute_tables.pl' => 'blib/lib/Lingua/Translit/Tables.pm' }, ); package MY; sub postamble { # include target to rebuild tables return "tables:\n\t\$(MAKE) -C xml tables\n"; } # vim: sts=4 sw=4 ts=4 ai et Lingua-Translit-0.29/Changes0000644000175000017500000001662714252325775015274 0ustar alinkealinke0.29 -- 2022-06-15 * Fixed numeric zero and empty string argument handling in translit() & translit_reverse(). 0.28 -- 2017-10-16 * Fixed wrong capitalised Cyrillic A in several context rules of both "BGN/PCGN RUS Standard" and "BGN/PCGN RUS Strict" - thanks to Nikola Lečić for providing the fix! * Spelling corrections in man page - thanks to Lucas Kanashiro for providing a patch! * Updated copyright (Netzum Sorglos Software GmbH). 0.27 -- 2017-04-26 * Added "BGN/PCGN RUS Standard" and "BGN/PCGN RUS Strict" transliterations. Thanks to Nikola Lečić for contributing these tables! 0.26 -- 2016-05-23 * Spelling corrections in man page - thanks to Lucas Kanashiro for providing a patch! * Maintainership passed from Lingua-Systems to Netzum Sorglos. * developer-manual__eng.pdf: removed - the documentation is now available online (see link in Lingua::Translit's man page). 0.25 -- 2016-04-05 * Changed license terms from GPL v2/Artistic to Perl's license terms. * Added "IAST Devanagari" and "Devanagari IAST" transliterations. Thanks to Philip Kime for contributing these tables! 0.24 -- 2015-11-25 * Define POD encoding (UTF-8) - thanks to Lucas Kanashiro and Mohammad Sajid Anwar for reporting this issue! 0.23 -- 2015-11-23 * Added "ISO 8859-16 RON" transliteration. Thanks to Ștefan Suciu for contributing this table! 0.22 -- 2015-07-07 * Added "ISO/R 9" transliteration (ISO/R 9:1954). Thanks to Dusan Vuckovic for contributing this table! 0.21 -- 2014-10-24 * Added "Common ARA" Arabic transliteration. Thanks to Ahmed Elsheshtawy for suggesting this transliteration and his help implementing it! 0.20 -- 2014-05-22 * lib/Lingua/Translit/Tables.pm: Added sub to handle Perl's "Unicode Bug", see perlunicode for details (v0.10). This fixes the errors reported by Perl v5.18.0. * MANIFEST: Added missing "ALA-LC RUS" files to distribution. * xml/: Removed "Common Classical MON" transliteration due to errors and contributors lack of time to fix these. * Code cleanups 0.19 -- 2011-04-15 * Added "ALA-LC RUS" transliteration (ALA-LC:1997). Thanks to Dmitry Smal and Rusar Publishing for contributing this table! 0.18 -- 2010-07-29 * Added transliterations: * "GOST 7.79 RUS OLD" (GOST 7.79:2000 B, support for Old Russian) * "GOST 7.79 RUS" (GOST 7.79:2000 B, reversible) * "GOST 7.79 UKR" (GOST 7.79:2000 B, reversible) * lib/Lingua/Translit/Tables.pm: Improved translit_list_supported() output (v0.9) * translit: Minor improvements (v0.4) * tools/substitute_tables.pl: Typo fixed 0.17 -- 2010-01-20 * Added "DIN 1460 UKR" transliteration * xml/din_1460_rus.xml: Hard and soft sign improvements * t/23_tr_DIN_1460_RUS.t: Added all caps hard sign test 0.16 -- 2010-01-04 * Added "DIN 1460 RUS" transliteration * MANIFEST.SKIP: Added to ignore .git * t/01_Lingua-Translit-Tables.t: Added various tests to verify any supported transliteration can be referenced by a couple of variants of their names, i.e. "Common DEU", "common_deu", "COMMON DEU" or "common deu". * t/11_tr_Common_DEU.t: Added decoded UTF-8 input tests * Replaced HTML developer manual with a PDF version 0.15 -- 2009-10-19 * Added support for the current development version of Perl (5.11) by using named Unicode properties instead of POSIX character classes within any context dependent transliteration rule. The following transliteration tables are affected: * xml/din_1460_bul.xml * xml/iso_9.xml * xml/streamlined_system_bul.xml Closes #50613. Thanks to Andreas Koenig for reporting this issue. * xml/template.xml: Added some more examples, added missing closing tag. * lib/Lingua/Translit/Tables.pm, xml/xml2dump.pl: To increase robustness and ease of use, tables are now associated with an identifier instead of their names. * Removed "utf8" and "bytes" pragmas. * Updated indent of all transliteration tables. 0.14 -- 2009-10-16 * Added Win32 support. (Closes #49544) Please note that a Unix-like environment is still required to develop transliteration tables using the provided set of tools. * t/03_translit.t: Use $^X rather than relying on the shebang * Various trivial fixes, code cleanups and hyperlink updates * xml/manual/manual.pod: Added missing markup 0.13 -- 2008-04-29 * Added developer manual covering the addition of own transliteration tables (xml/manual/). * Added test template (t/xx_tr_template.t.pl) * Makefile.PL: * Added "manual" target * Suited MSWin32 check for CPAN Testers tools 0.12 -- 2008-04-23 * Added common Polish transliteration ("Common POL") 0.11 -- 2008-04-21 * xml/din_1460_bul.xml: changed transliteration of SOFT SIGN to plain ASCII apostrophe. * New transliterations: * Common SLK (Slovak) * Common SLV (Slovenian) 0.10 -- 2008-04-17 * lib/Lingua/Translit.pm, xml/translit.dtd: Contexts can now contain two patterns at a time (before and after). These are combined using AND logics and therefore act as a logical "inbetween". * xml/xml2dump.pl: Switched from XML::Simple to XML::LibXML in order to prevent loss of whitespace charactes like U+180E. * xml/greeklish.xml: GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (U+03AB) bug fixed. * t/13_tr_Greeklish.t: Added test for upsilon bugfix. * Added two transliterations for Bulgarian: * DIN 1460 * Streamlined System 0.09 -- 2008-04-09 * Added Mongolian transliteration "Common Classical MON". Thanks to Bayanzul Lodoysamba (baynaa@users.sourceforge.net) for contributing this table! * lib/Lingua/Translit.pm: "from" and "to" transliteration patterns are now evaluated literally only (within \Q and \E). * lib/Lingua/Translit/Tables.pm: Removed verbose package information from translit_list_supported() * translit: Display Lingua::Translit's version if show_list() is called * translit: For convenience, every underscore in a transliteration's name is substituted by a blank. * Makefile.PL: Exit with a hint on MSWin32 rather than dying in t/03_translit.t * xml/xml2dump.pl: workaround for discarded U+180E character (see l.85) * Added a transliteration table template (xml/template.xml) 0.08 -- 2008-03-31 * Added common Czech transliteration "Common CES" 0.07 -- 2008-03-21 * Fixed a wrong codepoint in an ISO 843 rule. 0.06 -- 2008-03-21 * Fixed a wrong codepoint in a DIN 31634 rule. 0.05 -- 2008-03-10 * Renamed "DIN 5008" to "Common DEU" as the DIN norm doesn't cover the transliteration explicitly. 0.04 -- 2008-02-28 * Added common Romanian transliteration ("Common RON") * Updated Makefile.PL to use tools/substitute_tables.pl to read a transliteration table dump and substitute a placeholder line in lib/Lingua/Translit/Tables.pm with it. 0.03 -- 2008-02-25 * Added DIN 31634 (1982) * Test fixes (require Perl 5.8 if the "utf8" pragma is used) 0.02 -- 2008-02-18 * Added Greeklish * Code cleanup 0.01 -- 2008-02-13 * Initial release * Set of supported transliterations: * ISO 9 * ISO 843 * DIN 5008 # vim: set ft=changelog sw=4 sts=4 ts=4 ai et: Lingua-Translit-0.29/MANIFEST0000644000175000017500000000302514252326622015106 0ustar alinkealinkeChanges lib/Lingua/Translit.pm lib/Lingua/Translit/Tables.pm Makefile.PL MANIFEST MANIFEST.SKIP README t/01_Lingua-Translit-Tables.t t/02_Lingua-Translit.t t/03_translit.t t/10_tr_ISO_843.t t/11_tr_Common_DEU.t t/12_tr_ISO_9.t t/13_tr_Greeklish.t t/14_tr_DIN_31634.t t/15_tr_Common_RON.t t/16_tr_Common_CES.t t/18_tr_DIN_1460_BUL.t t/19_tr_Streamlined_System_BUL.t t/20_tr_Common_SLK.t t/21_tr_Common_SLV.t t/22_tr_Common_POL.t t/23_tr_DIN_1460_RUS.t t/24_tr_DIN_1460_UKR.t t/25_tr_GOST_RUS_OLD.t t/26_tr_GOST_RUS.t t/27_tr_GOST_UKR.t t/28_tr_ALA-LC_RUS.t t/29_tr_Common_ARA.t t/30_tr_ISO-R_9_SR.t t/31_tr_ISO_8859-16_RON.t t/32_tr_IAST_Devanagari.t t/33_tr_BGN-PCGN_RUS_Strict.t t/34_tr_BGN-PCGN_RUS_Standard.t tools/substitute_tables.pl translit t/xx_tr_template.t.pl xml/ala-lc_rus.xml xml/bgn-pcgn_rus_standard.xml xml/bgn-pcgn_rus_strict.xml xml/common_ara.xml xml/common_ces.xml xml/common_deu.xml xml/common_pol.xml xml/common_ron.xml xml/common_slk.xml xml/common_slv.xml xml/devanagari_iast.xml xml/din_1460_bul.xml xml/din_1460_rus.xml xml/din_1460_ukr.xml xml/din_31634.xml xml/gost_7-79_rus_old.xml xml/gost_7-79_rus.xml xml/gost_7-79_ukr.xml xml/greeklish.xml xml/iast_devanagari.xml xml/iso_843.xml xml/iso_8859-16_ron.xml xml/iso_9.xml xml/iso-r_9.xml xml/Makefile xml/streamlined_system_bul.xml xml/tables.dump xml/template.xml xml/translit.dtd xml/xml2dump.pl t/90_zero.t META.yml Module YAML meta-data (added by MakeMaker) META.json Module JSON meta-data (added by MakeMaker) Lingua-Translit-0.29/MANIFEST.SKIP0000644000175000017500000000000511727351000015636 0ustar alinkealinke.git Lingua-Translit-0.29/t/0000755000175000017500000000000014252326622014220 5ustar alinkealinkeLingua-Translit-0.29/t/25_tr_GOST_RUS_OLD.t0000644000175000017500000000401412700411131017404 0ustar alinkealinkeuse strict; use Test::More tests => 4; my $name = "GOST 7.79 RUS OLD"; my $reversible = 0; # Taken from http://www.ohchr.org/EN/UDHR/Pages/Language.aspx?LangID=rus my $input = "№1 " . "Все люди рождаются свободными и равными в своем " . "достоинстве и правах. Они наделены разумом и " . "совестью и должны поступать в отношении друг друга " . "в духе братства."; my $output_ok = "#1 " . "Vse lyudi rozhdayutsya svobodny'mi i ravny'mi v " . "svoem dostoinstve i pravax. Oni nadeleny' razumom i " . "sovest`yu i dolzhny' postupat` v otnoshenii drug " . "druga v duxe bratstva."; my $context = "публикация - Властелин колец - Царства - " . "ЦИК СССР - " . "ЯЗЫК - ВООБЩЕ - вообще - Частной переписке"; my $context_ok = "publikaciya - Vlastelin kolecz - Czarstva - " . "CIK SSSR - YAZY'K - VOOBSHHE - voobshhe - Chastnoj " . "perepiske"; my $old = "сентябрѣ - міръ - Царь Ѳеодоръ - мѵро - сѵнодъ - " . "типографіи - МОСКОВІЯ - далекій"; my $old_ok = "sentyabrye - mi'r`` - Czar` Fheodor`` - myhro - " . "syhnod`` - tipografii - MOSKOVIYA - daleki'j"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 is($output, $output_ok, "$name: UDOHR"); $output = $tr->translit($context); # 3 is($output, $context_ok, "$name: context-sensitive"); $output = $tr->translit($old); # 4 is($output, $old_ok, "$name: Old Russian"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/34_tr_BGN-PCGN_RUS_Standard.t0000644000175000017500000001652113100123740021114 0ustar alinkealinke# =========================================================================== # BGN/PCGN Romanization System for Russian (Standard Variant) # for Lingua::Translit Perl Module # https://github.com/ndlecic/bgn-pcgn_rus # # Copyright 2017 Nikola D. Lečić # =========================================================================== # # This implementation of BGN/PCGN romanization system comes in two # variants: # - strict # - standard # Please see respective XML files for explanations. use strict; use utf8; use Test::More tests => 7; use Lingua::Translit; my $name = "BGN/PCGN RUS Standard"; my $reversible = 0; my $input = "Все люди рождаются свободными и равными в " . "своём достоинстве и правах. Они наделены разумом и " . "совестью и должны поступать в отношении друг " . "друга в духе братства."; my $output_ok = "Vse lyudi rozhdayutsya svobodnymi i ravnymi v " . "svoyëm dostoinstve i pravakh. Oni nadeleny razumom i " . "sovest'yu i dolzhny postupat' v otnoshenii drug " . "druga v dukhe bratstva."; my $context = "акце́нт, Елисеев, Алетейя, Мейер, Кайафа, " . "Йадав, её; Её, подъём, Йэн, йэн, додекаэдр, " . "ещё, чьё, интеръекционный, выудить, Майя, " . "9-е мая, фойе, Фейербах, Чистые пруды, " . "Достоевский, Толстой, Горкий, Аркадий, Белый, " . "Юрий, Сергей, Хрущёв, Горбачёв"; my $context_ok = "aktsent, Yeliseyev, Aleteyya, Meyyer, Kayafa, " . "Yadav, yeyë; Yeyë, pod''yëm, Yen, yen, dodekaedr, " . "yeshchë, ch'yë, inter''yektsionnyy, vyudit', Mayya, " . "9-ye maya, foyye, Feyyerbakh, Chistyye prudy, " . "Dostoyevskiy, Tolstoy, Gorkiy, Arkadiy, Belyy, " . "Yuriy, Sergey, Khrushchëv, Gorbachëv"; my $abbr = "ВЦИОМ, РАНХиГС, НЭП, РОССПЭН, АЭС, РЖД, СПбГУ, " . "ЮАР, ЮФУ, ЮУрГУ, РостГЭУ-РИНХ, " . "Ю. Я. Щербаков и Е. Е. Ёлкина"; my $abbr_ok = "VTsIOM, RANKhiGS, NEP, ROSSPEN, AES, RZhD, SPbGU, " . "YuAR, YuFU, YuUrGU, RostGEU-RINKh, " . "Yu. Ya. Shcherbakov i Ye. Ye. Yëlkina"; my $excl = "Ыыыыыы! ЫЫЫЫЫЫ! Ай-ай-ай. Ээээээххх... " . "Жжжжжж! Йех-ай-яй! Ё-моё..."; my $excl_ok = "Yyyyyy! YYYYYY! Ay-ay-ay. Eeeeeekhkhkh... " . "Zhzhzhzhzhzh! Yyekh-ay-yay! Yë-moyë..."; # Geographic names (geo and nonrusgeo tests) are taken from # https://en.wikipedia.org/wiki/BGN/PCGN_romanization_of_Russian # https://en.wikipedia.org/wiki/Wikipedia:Romanization_of_Russian my $geo = "Азов, Тамбов, Барнаул, Кубань, Владимир, " . "Ульяновск, Грозный, Волгодонск, Дзержинский, " . "Нелидово, Елизово, Чапаевск, Юрьев, Съезд, " . "Белкин, Ёлкин, Остриё, Громадьё, Подъёмный, " . "Озёрный, Жуков, Лужники, Звенигород, Вязьма, " . "Иркутск, Апатиты, Бийск, Киров, Енисейск, " . "Ломоносов, Нелидово, Менделеев, Каменка, " . "Новосибирск, Кандалакша, Омск, Красноярск, " . "Петрозаводск, Серпухов, Ростов, " . "Северобайкальск, Сковородино, Чайковский, " . "Тамбов, Мытищи, Углич, Дудинка, Фурманов, Уфа, " . "Хабаровск, Прохладный, Цимлянск, Ельцин, " . "Чебоксары, Печора, Шахтёрск, Мышкин, Щёлково, " . "Ртищево, Тында, Тюмень, Электрогорск, " . "Радиоэлектроника, Юбилейный, Ключевская, " . "Якутск, Брянск, Набережные Челны"; my $geo_ok = "Azov, Tambov, Barnaul, Kuban', Vladimir, " . "Ul'yanovsk, Groznyy, Volgodonsk, Dzerzhinskiy, " . "Nelidovo, Yelizovo, Chapayevsk, Yur'yev, " . "S''yezd, Belkin, Yëlkin, Ostriyë, Gromad'yë, " . "Pod''yëmnyy, Ozërnyy, Zhukov, Luzhniki, " . "Zvenigorod, Vyaz'ma, Irkutsk, Apatity, Biysk, " . "Kirov, Yeniseysk, Lomonosov, Nelidovo, " . "Mendeleyev, Kamenka, Novosibirsk, Kandalaksha, " . "Omsk, Krasnoyarsk, Petrozavodsk, Serpukhov, " . "Rostov, Severobaykal'sk, Skovorodino, " . "Chaykovskiy, Tambov, Mytishchi, Uglich, " . "Dudinka, Furmanov, Ufa, Khabarovsk, " . "Prokhladnyy, Tsimlyansk, Yel'tsin, Cheboksary, " . "Pechora, Shakhtërsk, Myshkin, Shchëlkovo, " . "Rtishchevo, Tynda, Tyumen', Elektrogorsk, " . "Radioelektronika, Yubileynyy, Klyuchevskaya, " . "Yakutsk, Bryansk, Naberezhnyye Chelny"; my $nonrusgeo = "Йёнчёпинг, Тыайа, Сайылык, Ойусардах, " . "Йошкар-Ола, Ыгыатта, Тыэкан, Суык-Су, " . "Куыркъявр, Иссык-Куль, Вяртсиля, " . "Ташчишма, Улан-Удэ, Мусийкъонгийкоте, " . "Рыркайпий, Йемен"; my $nonrusgeo_ok= "Yyënchëping, Tyaya, Sayylyk, Oyusardakh, " . "Yoshkar-Ola, Ygyatta, Tyekan, Suyk-Su, " . "Kuyrk''yavr, Issyk-Kul', Vyartsilya, " . "Tashchishma, Ulan-Ude, Musiyk''ongiykote, " . "Ryrkaypiy, Yyemen"; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), $reversible, "$name: Reversibility"); # 2 my $output = $tr->translit($input); is($output, $output_ok, "$name: Universal declaration of human rights"); # 3 $output = $tr->translit($context); is($output, $context_ok, "$name: Context-sensitive sequences and various name endings"); # 4 $output = $tr->translit($abbr); is($output, $abbr_ok, "$name: Abbreviations"); # 5 $output = $tr->translit($excl); is($output, $excl_ok, "$name: Various exclamations"); # 6 $output = $tr->translit($geo); is($output, $geo_ok, "$name: Various geographic names"); # 7 $output = $tr->translit($nonrusgeo); is($output, $nonrusgeo_ok, "$name: Complex names of non-Russian origin"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/19_tr_Streamlined_System_BUL.t0000644000175000017500000000354012700411131021724 0ustar alinkealinkeuse strict; require 5.008; use utf8; use Test::More tests => 3; my $name = "Streamlined System BUL"; # Taken from http://www.unhchr.ch/udhr/lang/blg.htm my $udohr_cyr = "Като взе предвид, че пренебрегването и неуважаването " . "на правата на човека доведоха до варварски деяния, " . "които потресоха съвестта на човечеството, и че ". "създаването на един свят, в който хората ще се радват ". "на свобода на словото и убежденията си и ще бъдат " . "свободни от страх и лишения бе провъзгласено за " . "най-съкровения стремеж на човека,"; my $udohr_lat = "Kato vze predvid, che prenebregvaneto i " . "neuvazhavaneto na pravata na choveka dovedoha do " . "varvarski deyaniya, koito potresoha savestta na " . "chovechestvoto, i che sazdavaneto na edin svyat, v " . "koyto horata shte se radvat na svoboda na slovoto " . "i ubezhdeniyata si i shte badat svobodni ot strah i " . "lisheniya be provazglaseno za nay-sakroveniya " . "stremezh na choveka,"; my $all_caps = "ОБЩОТО , ВСЕОБЩА , ДЕКЛАРАЦЯ , ПРЕАМБЮЛ , ЧОВЕКА" . " --- Член, Живопис, Шоуто, Южна Америка"; my $all_caps_ok = "OBSHTOTO , VSEOBSHTA , DEKLARATSYA , PREAMBYUL , " . "CHOVEKA --- Chlen, Zhivopis, Shouto, Yuzhna Amerika"; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); my $o = $tr->translit($udohr_cyr); # 2 is($o, $udohr_lat, "$name: UDOHR transliteration"); $o = $tr->translit($all_caps); # 3 is($o, $all_caps_ok, "$name: all caps"); Lingua-Translit-0.29/t/15_tr_Common_RON.t0000644000175000017500000000215312700411131017350 0ustar alinkealinkeuse strict; require 5.008; use utf8; use Encode; use Test::More tests => 2; my $name = "Common RON"; # Taken from http://www.unhchr.ch/udhr/lang/rum.htm my $input = "Fiecare om se poate prevala de toate drepturile şi ". "libertăţile proclamate în prezenta Declaraţie fără ". "nici un fel de deosebire ca, de pildă, deosebirea ". "de rasă, culoare, sex, limbă, religie, opinie ". "politică sau orice altă opinie, de origine ". "naţională sau socială, avere, naştere sau orice ". "alte împrejurări."; my $output_ok = "Fiecare om se poate prevala de toate drepturile si ". "libertatile proclamate in prezenta Declaratie fara ". "nici un fel de deosebire ca, de pilda, deosebirea ". "de rasa, culoare, sex, limba, religie, opinie ". "politica sau orice alta opinie, de origine ". "nationala sau sociala, avere, nastere sau orice ". "alte imprejurari."; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); my $o = $tr->translit($input); # 2 is($o, $output_ok, "$name: UDOHR transliteration"); Lingua-Translit-0.29/t/03_translit.t0000644000175000017500000000102012700411131016522 0ustar alinkealinkeuse strict; use Test::More tests => 5; my $truth; my $script = "./blib/script/translit"; $truth = -e $script; # 1 is($truth, 1, "translit found"); $truth = system($^X, $script, "-h"); # 2 is($truth, 0, "translit supports -h switch"); $truth = system($^X, $script, "--help"); # 3 is($truth, 0, "translit supports --help switch"); $truth = system($^X, $script, "-l"); # 4 is($truth, 0, "translit supports -l switch"); $truth = system($^X, $script, "--list"); # 5 is($truth, 0, "translit supports --list switch"); Lingua-Translit-0.29/t/12_tr_ISO_9.t0000644000175000017500000000354712700411131016271 0ustar alinkealinkeuse strict; require 5.008; use utf8; use Test::More tests => 5; my $name = "ISO 9"; # Taken from http://www.unhchr.ch/udhr/lang/rus.htm my $udohr_cyr = "Каждый человек должен обладать всеми правами и всеми " . "свободами, провозглашенными настоящей Декларацией, " . "без какого бы то ни было различия, как-то в отношении " . "расы, цвета кожи, пола, языка, религии, политических " . "или иных убеждений, национального или социального " . "происхождения, имущественного, сословного или иного " . "положения."; my $udohr_lat = "Každyj čelovek dolžen obladatʹ vsemi pravami i vsemi " . "svobodami, provozglašennymi nastoâŝej Deklaraciej, " . "bez kakogo by to ni bylo različiâ, kak-to v otnošenii " . "rasy, cveta koži, pola, âzyka, religii, političeskih " . "ili inyh ubeždenij, nacionalʹnogo ili socialʹnogo " . "proishoždeniâ, imuŝestvennogo, soslovnogo ili inogo " . "položeniâ."; # Test hard and soft signs my $context_cyr = "ВЪЕЗД - въезд - альбом"; my $context_lat = "VʺEZD - vʺezd - alʹbom"; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 1, "$name: is reversible"); my $o = $tr->translit($context_cyr); # 2 is($o, $context_lat, "$name: hard and soft signs"); $o = $tr->translit_reverse($o); # 3 is($o, $context_cyr, "$name: hard and soft signs: reverse"); $o = $tr->translit($udohr_cyr); # 4 is($o, $udohr_lat, "$name: UDOHR transliteration"); $o = $tr->translit_reverse($o); # 5 is($o, $udohr_cyr, "$name: UDOHR transliteration (reverse)"); Lingua-Translit-0.29/t/28_tr_ALA-LC_RUS.t0000644000175000017500000000170612700411131017033 0ustar alinkealinkeuse strict; use Test::More tests => 4; my $name = "ALA-LC RUS"; my $reversible = 0; my $upper = "AБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; my $upper_ok = "ABVGDEËZhZIĬKLMNOPRSTUFKhTSChShShch″Y′ĖIUIA"; my $lower = "aбвгдеёжзийклмнопрстуфхцчшщъыьэюя"; my $lower_ok = "abvgdeëzhziĭklmnoprstufkhtschshshch″y′ėiuia"; my $context = "труъ ТРУЪ"; my $context_ok = "tru TRU"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output; # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 $output = $tr->translit($upper); is($output, $upper_ok, "$name: upper transliteration"); # 3 $output = $tr->translit($lower); is($output, $lower_ok, "$name: lower transliteration"); # 4 $output = $tr->translit($context); is($output, $context_ok, "$name: transliteration (context-sensitive)"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/01_Lingua-Translit-Tables.t0000644000175000017500000000326312700411131021120 0ustar alinkealinkeuse strict; use Test::More tests => (12 + (12 * 4)); my $truth; my @check_support = ( "ISO 843", "Common DEU", "ISO 9", "Greeklish", "DIN 31634", "Common RON", "Common CES", "DIN 1460 BUL", "Streamlined System BUL", "Common SLV", "Common SLK", "Common POL" ); BEGIN { # 1 use_ok("Lingua::Translit::Tables"); # 2 use_ok("Lingua::Translit::Tables", qw/translit_supported/); # 3 use_ok("Lingua::Translit::Tables", qw/translit_reverse_supported/); # 4 use_ok("Lingua::Translit::Tables", qw/translit_list_supported/); # 5 use_ok("Lingua::Translit::Tables", qw/:checks/); # 6 use_ok("Lingua::Translit::Tables", qw/:list/); # 7 use_ok("Lingua::Translit::Tables", qw/:all/); } # 8 can_ok("Lingua::Translit::Tables", qw/translit_supported/); # 9 can_ok("Lingua::Translit::Tables", qw/translit_reverse_supported/); # 10 can_ok("Lingua::Translit::Tables", qw/translit_list_supported/); use Lingua::Translit::Tables qw/:checks/; $truth = translit_supported("nonexistent"); # 11 is($truth, 0, "support for nonexistent table"); $truth = translit_supported(""); # 12 is($truth, 0, "support for empty table"); foreach my $name (@check_support) { my $id = Lingua::Translit::Tables::_get_table_id($name); $truth = translit_supported($name); is($truth, 1, "support for existing table $id - by name"); $truth = translit_supported(uc($name)); is($truth, 1, "support for existing table $id - by uc(name)"); $truth = translit_supported(lc($name)); is($truth, 1, "support for existing table $id - by lc(name)"); $truth = translit_supported($id); is($truth, 1, "support for existing table $id - by id"); } Lingua-Translit-0.29/t/10_tr_ISO_843.t0000644000175000017500000000255012700411131016426 0ustar alinkealinkeuse strict; use Test::More tests => 3; my $truth; my $name = "ISO 843"; # Taken from http://www.unhchr.ch/udhr/lang/grk.htm my $greek_valid = "Επειδή η αναγνώριση της αξιοπρέπειας, που είναι " . "σύμφυτη σε όλα τα μέλη της ανθρώπινης οικογένειας, " . "καθώς και των ίσων και αναπαλλοτρίωτων δικαιωμάτων " . "τους αποτελεί το θεμέλιο της ελευθερίας, της " . "δικαιοσύνης και της ειρήνης στον κόσμο."; my $latin_valid = "Epeidī́ ī anagnṓrisī tīs axioprépeias, poy eínai " . "sýmfytī se óla ta mélī tīs anthrṓpinīs oikogéneias, " . "kathṓs kai tōn ísōn kai anapallotríōtōn dikaiōmátōn " . "toys apoteleí to themélio tīs eleytherías, tīs " . "dikaiosýnīs kai tīs eirī́nīs ston kósmo."; my $punct_greek = "και;"; my $punct_valid = "kai?"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $latin_tr = $tr->translit($greek_valid); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($latin_tr, $latin_valid, "$name: UDOHR transliteration"); my $punct_tr = $tr->translit($punct_greek); # 3 is($punct_tr, $punct_valid, "$name: punctation transliteration"); Lingua-Translit-0.29/t/90_zero.t0000644000175000017500000000301214252325775015700 0ustar alinkealinkeuse strict; use Test::More tests => 15; my $name = "DIN 1460 UKR"; my $reversible = 1; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output; # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 $output = $tr->translit( "0" ); is($output, "0", "$name: transliteration #1"); # 3 $output = $tr->translit( 0 ); is($output, "0", "$name: transliteration #2"); # 4 $output = $tr->translit( "\x30" ); is($output, "0", "$name: transliteration #3"); # 5 $output = $tr->translit(); is($output, undef, "$name: transliteration #4"); # 6 $output = $tr->translit( undef ); is($output, undef, "$name: transliteration #5"); # 7 $output = $tr->translit( '' ); is($output, '', "$name: transliteration #6"); # 8 $output = $tr->translit( '01' ); is($output, '01', "$name: transliteration #7"); # 9 $output = $tr->translit_reverse( "0" ); is($output, "0", "$name: transliteration #8"); # 10 $output = $tr->translit_reverse( 0 ); is($output, "0", "$name: transliteration #9"); # 11 $output = $tr->translit_reverse( "\x30" ); is($output, "0", "$name: transliteration #10"); # 12 $output = $tr->translit_reverse(); is($output, undef, "$name: transliteration #11"); # 13 $output = $tr->translit_reverse( undef ); is($output, undef, "$name: transliteration #12"); # 14 $output = $tr->translit_reverse( '' ); is($output, '', "$name: transliteration #13"); # 15 $output = $tr->translit_reverse( '01' ); is($output, '01', "$name: transliteration #14"); # vim: set ft=perl sts=4 sw=4 ts=4 ai et: Lingua-Translit-0.29/t/22_tr_Common_POL.t0000644000175000017500000000326112700411131017343 0ustar alinkealinkeuse strict; use Test::More tests => 3; my $name = "Common POL"; # Taken from http://www.unhchr.ch/udhr/lang/pql.htm my $input = "Nie wolno ponadto czynić żadnej różnicy w zależności " . "od sytuacji politycznej, prawnej lub międzynarodowej " . "kraju lub obszaru, do którego dana osoba przynależy, " . "bez względu na to, czy dany kraj lub obszar jest " . "niepodległy, czy też podlega systemowi powiernictwa, " . "nie rządzi się samodzielnie lub jest w jakikolwiek " . "sposób ograniczony w swej niepodległości."; my $output_ok = "Nie wolno ponadto czynic zadnej roznicy w zaleznosci " . "od sytuacji politycznej, prawnej lub miedzynarodowej " . "kraju lub obszaru, do ktorego dana osoba przynalezy, " . "bez wzgledu na to, czy dany kraj lub obszar jest " . "niepodlegly, czy tez podlega systemowi powiernictwa, " . "nie rzadzi sie samodzielnie lub jest w jakikolwiek " . "sposob ograniczony w swej niepodleglosci."; my $alphabet = "A Ą B C Ć D E Ę F G H I J K L Ł M N Ń O Ó P R S Ś T " . "U W Y Z Ź Ż " . "a ą b c ć d e ę f g h i j k l ł m n ń o ó p r s ś t " . "u w y z ź ż"; my $alphabet_ok = "A A B C C D E E F G H I J K L L M N N O O P R S S T " . "U W Y Z Z Z " . "a a b c c d e e f g h i j k l l m n n o o p r s s t " . "u w y z z z"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($output, $output_ok, "$name: UDOHR transliteration"); my $o = $tr->translit($alphabet); # 3 is($o, $alphabet_ok, "$name: alphabet"); # vim: sts=4 Lingua-Translit-0.29/t/xx_tr_template.t.pl0000644000175000017500000000140411727351000020045 0ustar alinkealinkeuse strict; use Test::More tests => 3; # number of tests my $name = ""; # transliterations name my $reversible = 0; # is the transliteration reversible? my $input = ""; # short corpus... my $output_ok = ""; # ...its correct transliteration my $context = ""; # context-sensitive example my $context_ok = ""; # ...its correct transliteration use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 is($output, $output_ok, "$name: transliteration"); $output = $tr->translit($context); # 3 is($output, $context_ok, "$name: transliteration (context-sensitive)"); # vim: sts=4 sw=4 enc=utf-8 ai et Lingua-Translit-0.29/t/23_tr_DIN_1460_RUS.t0000644000175000017500000000404312700411131017216 0ustar alinkealinkeuse strict; require 5.008; use Test::More tests => 7; my $name = "DIN 1460 RUS"; # Taken from http://www.ohchr.org/EN/UDHR/Pages/Language.aspx?LangID=rus my $udohr_cyr = 'Все люди рождаются свободными и равными в своем ' . 'достоинстве и правах. Они наделены разумом и совестью и ' . 'должны поступать в отношении друг друга в духе братства.'; my $udohr_lat = 'Vse ljudi roždajutsja svobodnymi i ravnymi v svoem ' . 'dostoinstve i pravach. Oni nadeleny razumom i sovest\'ju ' . 'i dolžny postupat\' v otnošenii drug druga v duche ' . 'bratstva.'; my $hypen_cyr = 'также известен как Йа криве́дко - ' . 'от эск. йугыт, йуит люди - ' . 'Кандалакшская (ШЧ-20)'; my $hypen_lat = 'takže izvesten kak J-a krivédko - ' . 'ot ėsk. j-ugyt, j-uit ljudi - ' . 'Kandalakšskaja (Š-Č-20)'; my $sign_cyr = 'объявлять - высказаться - ОБЯЗАЛИСЬ - ' . 'выстроилисъ - ПРЕДЪ'; my $sign_lat = 'ob"javljat\' - vyskazat\'sja - OBJAZALIS\' - ' . 'vystroilis" - PRED"'; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 1, "$name: is reversible"); my $o = $tr->translit($udohr_cyr); # 2 is($o, $udohr_lat, "$name: UDOHR transliteration"); $o = $tr->translit_reverse($o); # 3 is($o, $udohr_cyr, "$name: UDOHR transliteration (reverse)"); $o = $tr->translit($hypen_cyr); # 4 is($o, $hypen_lat, "$name: DIN 1460 §3"); $o = $tr->translit_reverse($o); # 5 is($o, $hypen_cyr, "$name: DIN 1460 §3 (reverse)"); $o = $tr->translit($sign_cyr); # 6 is($o, $sign_lat, "$name: hard and soft signs"); $o = $tr->translit_reverse($o); # 7 is($o, $sign_cyr, "$name: hard and soft signs (reverse)"); # vim: sts=4 sw=4 ai et ft=perl Lingua-Translit-0.29/t/14_tr_DIN_31634.t0000644000175000017500000000426612700411131016562 0ustar alinkealinkeuse strict; require 5.008; use utf8; use Encode; use Test::More tests => 7; my $name = "DIN 31634"; # Taken from http://www.unhchr.ch/udhr/lang/grk.htm my $input = "Επειδή έχει ουσιαστική σημασία να προστατεύονται τα " . "ανθρώπινα δικαιώματα από ένα καθεστώς δικαίου, ώστε ο " . "άνθρωπος να μην αναγκάζεται να προσφεύγει, ως έσχατο " . "καταφύγιο, στην εξέγερση κατά της τυραννίας και της " . "καταπίεσης."; my $output_ok = "Epeidē echei usiastikē sēmasia na prostateyontai ta " . "anthrōpina dikaiōmata apo ena kathestōs dikaiu, ōste " . "o anthrōpos na mēn anankazetai na prospheygei, ōs " . "eschato kataphygio, stēn exegersē kata tēs tyrannias " . "kai tēs katapiesēs."; my $txt_1 = "Νέος ΓΓ του ΝΑΤΟ διορίζεται"; my $txt_1_ok = "Neos NG tu NATO diorizetai"; my $txt_2 = "Γκρουπ 1: Αυστρία, Ελβετία, Ελλάδα, Ολλανδία"; my $txt_2_ok = "Gkrup 1: Austria, Elbetia, Ellada, Ollandia"; my $txt_3 = "Σχετικές αλλαγές"; my $txt_3_ok = "Schetikes allages"; my $txt_4 = "Μπιλ Γκρεγκ -- Αυστραλιανό -- δημιουργήθηκε -- Ουσίες"; my $txt_4_ok = "Mpil Gkrenk -- Australiano -- dēmiurgēthēke -- Usies"; my $txt_5 = "εξαϋλωμένο -- προϋπάρχουσα -- Κεϋλάνη"; my $txt_5_ok = "exaÿlōmeno -- proÿparchusa -- Keylanē"; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); my $o = $tr->translit($input); # 2 is($o, $output_ok, "$name: UDOHR transliteration"); $o = $tr->translit($txt_1); # 3 is($o, $txt_1_ok, "$name: Short text #1"); $o = $tr->translit($txt_2); # 4 is($o, $txt_2_ok, "$name: Short text #2"); $o = $tr->translit($txt_3); # 5 is($o, $txt_3_ok, "$name: Short text #3"); $o = $tr->translit($txt_4); # 6 is($o, $txt_4_ok, "$name: Short text #4"); $o = $tr->translit($txt_5); # 7 is($o, $txt_5_ok, "$name: Short text #5"); Lingua-Translit-0.29/t/26_tr_GOST_RUS.t0000644000175000017500000000505312700411131016713 0ustar alinkealinkeuse strict; use Test::More tests => 7; my $name = "GOST 7.79 RUS"; my $reversible = 1; # Taken from http://www.ohchr.org/EN/UDHR/Pages/Language.aspx?LangID=rus my $input = "№1 " . "Все люди рождаются свободными и равными в своем " . "достоинстве и правах. Они наделены разумом и " . "совестью и должны поступать в отношении друг друга " . "в духе братства."; my $output_ok = "#1 " . "Vse lyudi rozhdayutsya svobodny'mi i ravny'mi v " . "svoem dostoinstve i pravax. Oni nadeleny' razumom i " . "sovest`yu i dolzhny' postupat` v otnoshenii drug " . "druga v duxe bratstva."; my $context = "публикация - Властелин колец - Царства - " . "ЦИК СССР - ЯЗЫК - ВООБЩЕ - вообще - Частной переписке"; my $context_ok = "publikaciya - Vlastelin kolecz - Czarstva - " . "CIK SSSR - YAZY'K - VOOBSHHE - voobshhe - Chastnoj " . "perepiske"; my $reverse = "провозглашает настоящую Всеобщую декларацию прав " . "человека в качестве задачи - цвета кожи - " . "провозглашено - характера этих прав - неотъемлемых"; my $reverse_ok = "provozglashaet nastoyashhuyu Vseobshhuyu " . "deklaraciyu prav cheloveka v kachestve zadachi - " . "czveta kozhi - provozglasheno - xaraktera e`tix " . "prav - neot``emlemy'x"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 is($output, $output_ok, "$name: UDOHR"); # 3 $output = $tr->translit_reverse($output); is($output, $input, "$name: UDOHR (reverse)"); # 4 $output = $tr->translit($context); is($output, $context_ok, "$name: context-sensitive"); # 5 $output = $tr->translit_reverse($output); is($output, $context, "$name: context-sensitive (reverse)"); # 6 $output = $tr->translit($reverse); is($output, $reverse_ok, "$name: reverse"); # 7 $output = $tr->translit_reverse($output); is($output, $reverse, "$name: reverse (reverse)"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/20_tr_Common_SLK.t0000644000175000017500000000342512700411131017342 0ustar alinkealinkeuse strict; use Test::More tests => 4; my $name = "Common SLK"; # Taken from http://www.unhchr.ch/udhr/lang/slo.htm my $input = "že ľud Spojených národov zdoraznil v Charte " . "znovu svoju vieru v základné ľudské práva, v " . "dostojnosť a hodnotu ľudskej osobnosti, v rovnaké " . "práva mužov a žien a že sa rozhodol podporovať " . "sociálny pokrok a vytvoriť lepšie životné " . "podmienky za vačšej slobody, že členské štáty " . "prevzaly závazok zaistiť v spolupráci s " . "Organizáciou Spojeých národov všeobecné uznávanie " . "a zachovávanie ľudských práv a základýých slobod. " . "- dôstojnosti"; my $output_ok = "ze lud Spojenych narodov zdoraznil v Charte " . "znovu svoju vieru v zakladne ludske prava, v " . "dostojnost a hodnotu ludskej osobnosti, v rovnake " . "prava muzov a zien a ze sa rozhodol podporovat " . "socialny pokrok a vytvorit lepsie zivotne podmienky " . "za vacsej slobody, ze clenske staty prevzaly " . "zavazok zaistit v spolupraci s Organizaciou " . "Spojeych narodov vseobecne uznavanie a zachovavanie " . "ludskych prav a zakladyych slobod. - dostojnosti"; my $all_caps = "VŠOBECNÁ DEKLARÁCIA LUDSKÝCH PRÁV"; my $all_caps_ok = "VSOBECNA DEKLARACIA LUDSKYCH PRAV"; my $digraphs = "MEDZI - DŽEM"; my $digraphs_ok = "MEDZI - DZEM"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($output, $output_ok, "$name: UDOHR transliteration"); my $o = $tr->translit($all_caps); # 3 is($o, $all_caps_ok, "$name: all caps"); $o = $tr->translit($digraphs); # 4 is($o, $digraphs_ok, "$name: digraphs"); Lingua-Translit-0.29/t/31_tr_ISO_8859-16_RON.t0000644000175000017500000000237212700411131017474 0ustar alinkealinkeuse strict; require 5.008; use utf8; use Encode; use Test::More tests => 3; use Lingua::Translit; my $name = "ISO 8859-16 RON"; # Taken from http://www.unhchr.ch/udhr/lang/rum.htm my $text_cedila = "Fiecare om se poate prevala de toate drepturile şi ". "libertăţile proclamate în prezenta Declaraţie fără ". "nici un fel de deosebire ca, de pildă, deosebirea ". "de rasă, culoare, sex, limbă, religie, opinie ". "politică sau orice altă opinie, de origine ". "naţională sau socială, avere, naştere sau orice ". "alte împrejurări."; my $text_comma = "Fiecare om se poate prevala de toate drepturile și ". "libertățile proclamate în prezenta Declarație fără ". "nici un fel de deosebire ca, de pildă, deosebirea ". "de rasă, culoare, sex, limbă, religie, opinie ". "politică sau orice altă opinie, de origine ". "națională sau socială, avere, naștere sau orice ". "alte împrejurări."; my $tr = Lingua::Translit->new($name); # 1 is $tr->can_reverse(), 1, "$name: is reversible"; my $o = $tr->translit($text_cedila); # 2 is $o, $text_comma, "$name: UDOHR transliteration"; my $r = $tr->translit_reverse($text_comma); # 3 is $r, $text_cedila, "$name: UDOHR transliteration (reverse)"; Lingua-Translit-0.29/t/24_tr_DIN_1460_UKR.t0000644000175000017500000000346512700411131017216 0ustar alinkealinkeuse strict; require 5.008; use Test::More tests => 7; my $name = "DIN 1460 UKR"; # Taken from http://www.ohchr.org/EN/UDHR/Pages/Language.aspx?LangID=ukr my $udohr_cyr = 'Всі люди народжуються вільними і рівними у своїй гідності' . ' та правах. Вони наділені розумом і совістю і повинні ' . 'діяти у відношенні один до одного в дусі братерства.'; my $udohr_lat = 'Vsi ljudy narodžujut\'sja vil\'nymy i rivnymy u svoïj ' . 'hidnosti ta pravach. Vony nadileni rozumom i sovistju i ' . 'povynni dijaty u vidnošenni odyn do odnoho v dusi ' . 'braterstva.'; my $hypen_cyr = 'йехьван - минийаь - зівйуться - ' . 'цг - тверді ч, шч'; my $hypen_lat = 'j-ech\'van - mynyj-a\' - zivj-ut\'sja - ' . 'c-h - tverdi č, š-č'; my $caps_cyr = 'ЗАГАЛЬНА ДЕКЛАРАЦІЯ ПРАВ ЛЮДИНІ'; my $caps_lat = 'ZAHAL\'NA DEKLARACIJA PRAV LJUDYNI'; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 1, "$name: is reversible"); my $o = $tr->translit($udohr_cyr); # 2 is($o, $udohr_lat, "$name: UDOHR transliteration"); $o = $tr->translit_reverse($o); # 3 is($o, $udohr_cyr, "$name: UDOHR transliteration (reverse)"); $o = $tr->translit($hypen_cyr); # 4 is($o, $hypen_lat, "$name: DIN 1460 §3"); $o = $tr->translit_reverse($o); # 5 is($o, $hypen_cyr, "$name: DIN 1460 §3 (reverse)"); $o = $tr->translit($caps_cyr); # 6 is($o, $caps_lat, "$name: capital letters only"); $o = $tr->translit_reverse($o); # 7 is($o, $caps_cyr, "$name: capital letters only (reverse)"); # vim: sts=4 sw=4 ai et ft=perl Lingua-Translit-0.29/t/29_tr_Common_ARA.t0000644000175000017500000000204212700411131017317 0ustar alinkealinkeuse strict; use Test::More tests => 3; my $name = "Common ARA"; my $reversible = 0; my $input = "اخبار اليوم"; # "News Today" my $output_ok = "akhbar alywm"; my $udohr = "يولد جميع الناس أحراراً متساوين في الكرامة والحقوق، " . "وقد وهبوا عقلاً وضميراً وعليهم أن يعامل بعضهم بعضاً " . "بروح الإخاء."; my $udohr_ok = "ywld jmy'e alnas ahrara mtsawyn fy alkramh walhqwq, " . "wqd whbwa 'eqla wdmyra w'elyhm an y'eaml b'edhm " . "b'eda brwh alekha'."; use Lingua::Translit; my $tr = Lingua::Translit->new( $name ); my $output = $tr->translit( $input ); # 1 is( $tr->can_reverse(), $reversible, "$name: reversibility" ); # 2 is( $output, $output_ok, "$name: transliteration (short)" ); $output = $tr->translit( $udohr ); # 3 is( $output, $udohr_ok, "$name: transliteration (UDOHR)" ); # vim: set sts=4 sw=4 ts=4 ai et ft=perl: Lingua-Translit-0.29/t/18_tr_DIN_1460_BUL.t0000644000175000017500000000552412700411131017200 0ustar alinkealinkeuse strict; require 5.008; use Test::More tests => 7; my $name = "DIN 1460 BUL"; # Taken from http://www.unhchr.ch/udhr/lang/blg.htm my $udohr_cyr = "Като взе предвид, че пренебрегването и неуважаването " . "на правата на човека доведоха до варварски деяния, " . "които потресоха съвестта на човечеството, и че ". "създаването на един свят, в който хората ще се радват ". "на свобода на словото и убежденията си и ще бъдат " . "свободни от страх и лишения бе провъзгласено за " . "най-съкровения стремеж на човека,"; my $udohr_lat = "Kato vze predvid, če prenebregvaneto i " . "neuvažavaneto na pravata na čoveka dovedocha ". "do varvarski dejanija, koito potresocha săvestta " . "na čovečestvoto, i če săzdavaneto na edin svjat, v " . "kojto chorata šte se radvat na svoboda na slovoto i " . "ubeždenijata si i šte bădat svobodni ot strach i " . "lišenija be provăzglaseno za naj-săkrovenija stremež " . "na čoveka,"; # Test hyphen my $hyphen_cyr = "равнище, юрисдикция, задължиха, " . # small without "Южнославянски, Хърватски, " . # capital without "йа, ЙАК, йу, Йуно, пешть, ШТАБ, Штаб"; # these need a hyphen, but as it is very unlikely to # find these combinations, the examples are construed my $hyphen_lat = "ravnište, jurisdikcija, zadălžicha, " . "Južnoslavjanski, Chărvatski, " . "j-a, J-AK, j-u, J-uno, peš-t', Š-TAB, Š-tab"; # Test all caps, hard and soft signs my $context_cyr = "ОБЩОТО , ВСЕОБЩА , ДЕКЛАРАЦЯ , ПРЕАМБЮЛ --- " . #allcaps "внукът , Ъгъл , СЪБРАИНЕ --- " . # hard sign "актьор , СИНЬО" ; # soft sign my $context_lat = "OBŠTOTO , VSEOBŠTA , DEKLARACJA , PREAMBJUL --- " . "vnukăt , Ăgăl , SĂBRAINE --- " . "akt'or , SIN'O"; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 1, "$name: is reversible"); my $o = $tr->translit($context_cyr); # 2 is($o, $context_lat, "$name: hard and soft signs"); $o = $tr->translit_reverse($o); # 3 is($o, $context_cyr, "$name: hard and soft signs (reverse)"); $o = $tr->translit($udohr_cyr); # 4 is($o, $udohr_lat, "$name: UDOHR transliteration"); $o = $tr->translit_reverse($o); # 5 is($o, $udohr_cyr, "$name: UDOHR transliteration (reverse)"); $o = $tr->translit($hyphen_cyr); # 6 is($o, $hyphen_lat, "$name: hyphen separator"); $o = $tr->translit_reverse($o); # 7 is($o, $hyphen_cyr, "$name: hyphen separator (reverse)"); Lingua-Translit-0.29/t/16_tr_Common_CES.t0000644000175000017500000000226712700411131017333 0ustar alinkealinkeuse strict; use Test::More tests => 3; my $name = "Common CES"; # Taken from http://www.unhchr.ch/udhr/lang/czc.htm my $input = "Žádný rozdíl nebude dále činěn z důvodu politického, " . "právního nebo mezinárodního postavení země nebo " . "území, k nimž určitá osoba přísluší, ať jde o zemi " . "nebo území nezávislé nebo pod poručenstvím, " . "nesamosprávné nebo podrobené jakémukoli jinému " . "omezení suverenity."; my $output_ok = "Zadny rozdil nebude dale cinen z duvodu politickeho, " . "pravniho nebo mezinarodniho postaveni zeme nebo " . "uzemi, k nimz urcita osoba prislusi, at jde o zemi " . "nebo uzemi nezavisle nebo pod porucenstvim, " . "nesamospravne nebo podrobene jakemukoli jinemu " . "omezeni suverenity."; my $all_caps = "DĚJSTVÍ PRVNÍ"; my $all_caps_ok = "DEJSTVI PRVNI"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($output, $output_ok, "$name: UDOHR transliteration"); my $o = $tr->translit($all_caps); # 3 is($o, $all_caps_ok, "$name: all caps"); Lingua-Translit-0.29/t/27_tr_GOST_UKR.t0000644000175000017500000000451212700411131016703 0ustar alinkealinkeuse strict; use Test::More tests => 7; my $name = "GOST 7.79 UKR"; my $reversible = 1; # Taken from http://www.ohchr.org/EN/UDHR/Pages/Language.aspx?LangID=ukr my $input = "№1 " . "Всі люди народжуються вільними і рівними у своїй " . "гідності та правах. Вони наділені розумом і совістю " . "і повинні діяти у відношенні один до одного в дусі " . "братерства."; my $output_ok = "#1 " . "Vsi lyudy` narodzhuyut`sya vil`ny`my` i rivny`my` u " . "svoyij gidnosti ta pravax. Vony` nadileni rozumom i " . "sovistyu i povy`nni diyaty` u vidnoshenni ody`n do " . "odnogo v dusi braterstva."; my $context = "вдаватиця - Націй - співробітництві - цих"; my $context_ok = "vdavaty`cya - Nacij - spivrobitny`cztvi - cy`x"; my $reverse = "справедливості - Ємних Їх Прав - щоб людина - " . "між - ґудзик - Націй - співробітництві - членам - " . "проголошено - становища - людина - визнання"; my $reverse_ok = "spravedly`vosti - Yemny`x Yix Prav - shhob " . "lyudy`na - mizh - g`udzy`k - Nacij - " . "spivrobitny`cztvi - chlenam - progolosheno - " . "stanovy`shha - lyudy`na - vy`znannya"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), $reversible, "$name: reversibility"); # 2 is($output, $output_ok, "$name: UDOHR"); # 3 $output = $tr->translit_reverse($output); is($output, $input, "$name: UDOHR (reverse)"); # 4 $output = $tr->translit($context); is($output, $context_ok, "$name: context-sensitive"); # 5 $output = $tr->translit_reverse($output); is($output, $context, "$name: context-sensitive (reverse)"); # 6 $output = $tr->translit($reverse); is($output, $reverse_ok, "$name: reverse"); # 7 $output = $tr->translit_reverse($output); is($output, $reverse, "$name: reverse (reverse)"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/21_tr_Common_SLV.t0000644000175000017500000000240512700411131017353 0ustar alinkealinkeuse strict; use Test::More tests => 3; my $name = "Common SLV"; # Taken from http://www.unhchr.ch/udhr/lang/slv.htm my $input = "ker sta zanikanje in teptanje človekovih pravic " . "pripeljala do barbarskih dejanj, žaljivih za " . "človeško vest, in ker je bila stvaritev sveta, " . "v katerem bi imeli vsi ljudje svobodo govora " . "in verovanja in v katerem ne bi živeli v strahu " . "in pomanjkanju, spoznana za najvišje prizadevanje " . "človeštva;"; my $output_ok = "ker sta zanikanje in teptanje clovekovih pravic " . "pripeljala do barbarskih dejanj, zaljivih za " . "clovesko vest, in ker je bila stvaritev sveta, " . "v katerem bi imeli vsi ljudje svobodo govora in " . "verovanja in v katerem ne bi ziveli v strahu " . "in pomanjkanju, spoznana za najvisje prizadevanje " . "clovestva;"; my $all_caps = "KITAJSKA PUŠČAVSKA MAČKA"; my $all_caps_ok = "KITAJSKA PUSCAVSKA MACKA"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($output, $output_ok, "$name: UDOHR transliteration"); my $o = $tr->translit($all_caps); # 3 is($o, $all_caps_ok, "$name: all caps"); Lingua-Translit-0.29/t/11_tr_Common_DEU.t0000644000175000017500000000315112700411131017322 0ustar alinkealinkeuse strict; use Test::More tests => 7; use Encode qw/decode/; my $name = "Common DEU"; # Taken from http://www.unhchr.ch/udhr/lang/ger.htm my $input = "Alle Menschen sind frei und gleich an Würde und " . "Rechten geboren. Sie sind mit Vernunft und Gewissen " . "begabt und sollen einander im Geist der " . "Brüderlichkeit begegnen."; my $output_ok = "Alle Menschen sind frei und gleich an Wuerde und " . "Rechten geboren. Sie sind mit Vernunft und Gewissen " . "begabt und sollen einander im Geist der " . "Bruederlichkeit begegnen."; my $ext = "ÄÖÜäöüß"; my $ext_out_ok = "AeOeUeaeoeuess"; my $all_caps = "MAßARBEIT -- Spaß"; my $all_caps_ok = "MASSARBEIT -- Spass"; use Lingua::Translit; my $tr = new Lingua::Translit($name); my $output = $tr->translit($input); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); # 2 is($output, $output_ok, "$name: UDOHR transliteration"); $output = $tr->translit(decode("UTF-8", $input)); # 3 is($output, $output_ok, "$name: UDOHR transliteration (decoded)"); my $ext_output = $tr->translit($ext); # 4 is($ext_output, $ext_out_ok, "$name: umlauts and sz-ligature"); $ext_output = $tr->translit(decode("UTF-8", $ext)); # 5 is($ext_output, $ext_out_ok, "$name: umlauts and sz-ligature (decoded)"); my $o = $tr->translit($all_caps); # 6 is($o, $all_caps_ok, "$name: all caps"); $o = $tr->translit(decode("UTF-8", $all_caps)); # 7 is($o, $all_caps_ok, "$name: all caps (decoded)"); # vim: sts=4 sw=4 ai et ft=perl Lingua-Translit-0.29/t/30_tr_ISO-R_9_SR.t0000644000175000017500000000320112700411131017057 0ustar alinkealinkeuse strict; use Test::More tests => 5; use Encode qw/decode/; my $name = "ISO/R 9 - SR"; # Copyright (c) Zoran Radisavljević my $pangram1 = "Њој пљачком згрћеш туђ ЦД, ВХС, беж филџан!"; my $pangram1_ok = "Njoj pljačkom zgrćeš tuđ CD, VHS, bež fildžan!"; # Copyright (c) Rastko Ćirić my $pangram2 = "Дебљој згужвах смеђ филц – њен шкрт џепчић."; my $pangram2_ok = "Debljoj zgužvah smeđ filc – njen škrt džepčić."; # Copyright (c) Ivan Klajn my $pangram3 = "Ђаче, уштеду плаћај жаљењем због џиновских цифара."; my $pangram3_ok = "Đače, uštedu plaćaj žaljenjem zbog džinovskih cifara."; my $lower_case = "абвгдђежзијклљмнњопрстћуфхцчџш"; my $lower_case_ok = "abvgdđežzijklljmnnjoprstćufhcčdžš"; my $upper_case = "АБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШ"; my $upper_case_ok = "ABVGDĐEŽZIJKLLJMNNJOPRSTĆUFHCČDŽŠ"; use Lingua::Translit; my $tr = new Lingua::Translit("ISO/R 9"); # 1 my $output = $tr->translit($pangram1); is($output, $pangram1_ok, "$name: Serbian pangram (33) transliteration"); # 2 $output = $tr->translit($pangram2); is($output, $pangram2_ok, "$name: Serbian pangram (34) transliteration"); # 3 $output = $tr->translit($pangram3); is($output, $pangram3_ok, "$name: Serbian pangram (42) transliteration"); # 4 $output = $tr->translit($lower_case); is($output, $lower_case_ok, "$name: lower case alphabet"); # 5 $output = $tr->translit($upper_case); is($output, $upper_case_ok, "$name: upper case alphabet"); Lingua-Translit-0.29/t/02_Lingua-Translit.t0000644000175000017500000000236212700411131017710 0ustar alinkealinkeuse strict; use Test::More tests => (8 + (12 * 4)); my $truth; my @check_support = ( "ISO 843", "Common DEU", "ISO 9", "Greeklish", "DIN 31634", "Common RON", "Common CES", "DIN 1460 BUL", "Streamlined System BUL", "Common SLV", "Common SLK", "Common POL" ); my $num_str = "1234567890"; BEGIN { # 1 use_ok("Lingua::Translit"); } use Lingua::Translit; # create new object my $tr = new Lingua::Translit($check_support[0]); # 2 can_ok($tr, "translit"); # 3 can_ok($tr, "translit_reverse"); # 4 can_ok($tr, "can_reverse"); # 5 can_ok($tr, "name"); # 6 can_ok($tr, "desc"); undef($tr); eval { $tr = new Lingua::Translit(""); }; # 7 isnt($@, '', "create object from empty transliteration"); undef($tr); eval { $tr = new Lingua::Translit("DIN 5008"); }; # 8 is ($@, '', "legacy 'DIN 5008' compatibility"); undef($tr); foreach my $name (@check_support) { eval { $tr = new Lingua::Translit($name); }; is($@, '', "$name: create object"); is($tr->name(), $name, "$name: compare names"); isnt($tr->desc(), '', "$name: has a description"); # transliterating a number string should lead to an exact copy my $num_str_tr = $tr->translit($num_str); is($num_str, $num_str_tr, "$name: number transliteration"); } Lingua-Translit-0.29/t/32_tr_IAST_Devanagari.t0000644000175000017500000024245612700675125020315 0ustar alinkealinkeuse strict; use Lingua::Translit; use Test::More tests => 2; use utf8; $/ = undef; my $bhagavad_gita = ; my $t = new Lingua::Translit( 'IAST Devanagari' ); my $tr = new Lingua::Translit( 'Devanagari IAST' ); my $bgout = $tr->translit($t->translit($bhagavad_gita)); my @input = qw/ a ā i ī u ū ṛ ṝ ḷ ḹ e ai o au ṃ aṃ ḥ aḥ ka kā ki kī ku kū kṛ kṝ kḷ kḹ ke kai ko kau kha ga gha ṅa ca cha ja jha ña ṭa ṭha ḍa ḍha ṇa ta tha da dha na pa pha ba bha ma ya ra la va śa ṣa sa ha bh /; my $output = 'अ आ इ ई उ ऊ ऋ ॠ ऌ ॡ ए ऐ ओ औ ं अं ः अः क का कि की कु कू कृ कॄ कॢ कॣ के' . ' कै को कौ ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल ' . 'व श ष स ह भ्'; is($output, join(' ', map {$t->translit($_)} @input) , "IAST -> Devanagari"); # This tests a complete round-trip of transliterating the Bhagavad Gita from # IAST to Devanāgarī and back to IAST is($bgout, $bhagavad_gita, "IAST -> Devanagari -> IAST"); __DATA__ dhṛtarāṣṭra uvāca dharmakṣetre kurukṣetre samavetā yuyutsavaḥ māmakāḥ pāṇḍavāś caiva kim akurvata saṃjaya saṃjaya uvāca dṛṣṭvā tu pāṇḍavānīkaṃ vyūḍhaṃ duryodhanas tadā ācāryam upasaṃgamya rājā vacanam abravīt paśyaitāṃ pāṇḍuputrāṇām ācārya mahatīṃ camūm vyūḍhāṃ drupadaputreṇa tava śiṣyeṇa dhīmatā atra śūrā maheṣvāsā bhīmārjunasamā yudhi yuyudhāno virāṭaś ca drupadaś ca mahārathaḥ dhṛṣṭaketuś cekitānaḥ kāśirājaś ca vīryavān purujit kuntibhojaś ca śaibyaś ca narapuṃgavaḥ yudhāmanyuś ca vikrānta uttamaujāś ca vīryavān saubhadro draupadeyāś ca sarva eva mahārathāḥ asmākaṃ tu viśiṣṭā ye tān nibodha dvijottama nāyakā mama sainyasya saṃjñārthaṃ tān bravīmi te bhavān bhīṣmaś ca karṇaś ca kṛpaś ca samitiṃjayaḥ aśvatthāmā vikarṇaś ca saumadattis tathaiva ca anye ca bahavaḥ śūrā madarthe tyaktajīvitāḥ nānāśastrapraharaṇāḥ sarve yuddhaviśāradāḥ aparyāptaṃ tad asmākaṃ balaṃ bhīṣmābhirakṣitam paryāptaṃ tv idam eteṣāṃ balaṃ bhīmābhirakṣitam ayaneṣu ca sarveṣu yathābhāgam avasthitāḥ bhīṣmam evābhirakṣantu bhavantaḥ sarva eva hi tasya saṃjanayan harṣaṃ kuruvṛddhaḥ pitāmahaḥ siṃhanādaṃ vinadyoccaiḥ śaṅkhaṃ dadhmau pratāpavān tataḥ śaṅkhāś ca bheryaś ca paṇavānakagomukhāḥ sahasaivābhyahanyanta sa śabdas tumulo 'bhavat tataḥ śvetair hayair yukte mahati syandane sthitau mādhavaḥ pāṇḍavaś caiva divyau śaṅkhau pradadhmatuḥ pāñcajanyaṃ hṛṣīkeśo devadattaṃ dhanaṃjayaḥ pauṇḍraṃ dadhmau mahāśaṅkhaṃ bhīmakarmā vṛkodaraḥ anantavijayaṃ rājā kuntīputro yudhiṣṭhiraḥ nakulaḥ sahadevaś ca sughoṣamaṇipuṣpakau kāśyaś ca parameṣvāsaḥ śikhaṇḍī ca mahārathaḥ dhṛṣṭadyumno virāṭaś ca sātyakiś cāparājitaḥ drupado draupadeyāś ca sarvaśaḥ pṛthivīpate saubhadraś ca mahābāhuḥ śaṅkhān dadhmuḥ pṛthak pṛthak sa ghoṣo dhārtarāṣṭrāṇāṃ hṛdayāni vyadārayat nabhaś ca pṛthivīṃ caiva tumulo vyanunādayan atha vyavasthitān dṛṣṭvā dhārtarāṣṭrān kapidhvajaḥ pravṛtte śastrasaṃpāte dhanur udyamya pāṇḍavaḥ hṛṣīkeśaṃ tadā vākyam idam āha mahīpate senayor ubhayor madhye rathaṃ sthāpaya me 'cyuta yāvad etān nirīkṣe 'haṃ yoddhukāmān avasthitān kair mayā saha yoddhavyam asmin raṇasamudyame yotsyamānān avekṣe 'haṃ ya ete 'tra samāgatāḥ dhārtarāṣṭrasya durbuddher yuddhe priyacikīrṣavaḥ evam ukto hṛṣīkeśo guḍākeśena bhārata senayor ubhayor madhye sthāpayitvā rathottamam bhīṣmadroṇapramukhataḥ sarveṣāṃ ca mahīkṣitām uvāca pārtha paśyaitān samavetān kurūn iti tatrāpaśyat sthitān pārthaḥ pitṝn atha pitāmahān ācāryān mātulān bhrātṝn putrān pautrān sakhīṃs tathā śvaśurān suhṛdaś caiva senayor ubhayor api tān samīkṣya sa kaunteyaḥ sarvān bandhūn avasthitān kṛpayā parayāviṣṭo viṣīdann idam abravīt dṛṣṭvemān svajanān kṛṣṇa yuyutsūn samavasthitān sīdanti mama gātrāṇi mukhaṃ ca pariśuṣyati vepathuś ca śarīre me romaharṣaś ca jāyate gāṇḍīvaṃ sraṃsate hastāt tvak caiva paridahyate na ca śaknomy avasthātuṃ bhramatīva ca me manaḥ nimittāni ca paśyāmi viparītāni keśava na ca śreyo 'nupaśyāmi hatvā svajanam āhave na kāṅkṣe vijayaṃ kṛṣṇa na ca rājyaṃ sukhāni ca kiṃ no rājyena govinda kiṃ bhogair jīvitena vā yeṣām arthe kāṅkṣitaṃ no rājyaṃ bhogāḥ sukhāni ca ta ime 'vasthitā yuddhe prāṇāṃs tyaktvā dhanāni ca ācāryāḥ pitaraḥ putrās tathaiva ca pitāmahāḥ mātulāḥ śvaśurāḥ pautrāḥ syālāḥ saṃbandhinas tathā etān na hantum icchāmi ghnato 'pi madhusūdana api trailokyarājyasya hetoḥ kiṃ nu mahīkṛte nihatya dhārtarāṣṭrān naḥ kā prītiḥ syāj janārdana pāpam evāśrayed asmān hatvaitān ātatāyinaḥ tasmān nārhā vayaṃ hantuṃ dhārtarāṣṭrān sabāndhavān svajanaṃ hi kathaṃ hatvā sukhinaḥ syāma mādhava yady apy ete na paśyanti lobhopahatacetasaḥ kulakṣayakṛtaṃ doṣaṃ mitradrohe ca pātakam kathaṃ na jñeyam asmābhiḥ pāpād asmān nivartitum kulakṣayakṛtaṃ doṣaṃ prapaśyadbhir janārdana kulakṣaye praṇaśyanti kuladharmāḥ sanātanāḥ dharme naṣṭe kulaṃ kṛtsnam adharmo 'bhibhavaty uta adharmābhibhavāt kṛṣṇa praduṣyanti kulastriyaḥ strīṣu duṣṭāsu vārṣṇeya jāyate varṇasaṃkaraḥ saṃkaro narakāyaiva kulaghnānāṃ kulasya ca patanti pitaro hy eṣāṃ luptapiṇḍodakakriyāḥ doṣair etaiḥ kulaghnānāṃ varṇasaṃkarakārakaiḥ utsādyante jātidharmāḥ kuladharmāś ca śāśvatāḥ utsannakuladharmāṇāṃ manuṣyāṇāṃ janārdana narake niyataṃ vāso bhavatīty anuśuśruma aho bata mahat pāpaṃ kartuṃ vyavasitā vayam yad rājyasukhalobhena hantuṃ svajanam udyatāḥ yadi mām apratīkāram aśastraṃ śastrapāṇayaḥ dhārtarāṣṭrā raṇe hanyus tan me kṣemataraṃ bhavet evam uktvārjunaḥ saṃkhye rathopastha upāviśat visṛjya saśaraṃ cāpaṃ śokasaṃvignamānasaḥ saṃjaya uvāca taṃ tathā kṛpayāviṣṭam aśrupūrṇākulekṣaṇam viṣīdantam idaṃ vākyam uvāca madhusūdanaḥ śrībhagavān uvāca kutas tvā kaśmalam idaṃ viṣame samupasthitam anāryajuṣṭam asvargyam akīrtikaram arjuna klaibyaṃ mā sma gamaḥ pārtha naitat tvayy upapadyate kṣudraṃ hṛdayadaurbalyaṃ tyaktvottiṣṭha paraṃtapa arjuna uvāca kathaṃ bhīṣmam ahaṃ saṃkhye droṇaṃ ca madhusūdana iṣubhiḥ pratiyotsyāmi pūjārhāv arisūdana gurūn ahatvā hi mahānubhāvāñ; śreyo bhoktuṃ bhaikṣam apīha loke hatvārthakāmāṃs tu gurūn ihaiva; bhuñjīya bhogān rudhirapradigdhān na caitad vidmaḥ kataran no garīyo; yad vā jayema yadi vā no jayeyuḥ yān eva hatvā na jijīviṣāmas; te 'vasthitāḥ pramukhe dhārtarāṣṭrāḥ kārpaṇyadoṣopahatasvabhāvaḥ; pṛcchāmi tvāṃ dharmasaṃmūḍhacetāḥ yac chreyaḥ syān niścitaṃ brūhi tan me; śiṣyas te 'haṃ śādhi māṃ tvāṃ prapannam na hi prapaśyāmi mamāpanudyād; yac chokam ucchoṣaṇam indriyāṇām avāpya bhūmāv asapatnam ṛddhaṃ; rājyaṃ surāṇām api cādhipatyam saṃjaya uvāca evam uktvā hṛṣīkeśaṃ guḍākeśaḥ paraṃtapa na yotsya iti govindam uktvā tūṣṇīṃ babhūva ha tam uvāca hṛṣīkeśaḥ prahasann iva bhārata senayor ubhayor madhye viṣīdantam idaṃ vacaḥ śrībhagavān uvāca aśocyān anvaśocas tvaṃ prajñāvādāṃś ca bhāṣase gatāsūn agatāsūṃś ca nānuśocanti paṇḍitāḥ na tv evāhaṃ jātu nāsaṃ na tvaṃ neme janādhipāḥ na caiva na bhaviṣyāmaḥ sarve vayam ataḥ param dehino 'smin yathā dehe kaumāraṃ yauvanaṃ jarā tathā dehāntaraprāptir dhīras tatra na muhyati mātrāsparśās tu kaunteya śītoṣṇasukhaduḥkhadāḥ āgamāpāyino 'nityās tāṃs titikṣasva bhārata yaṃ hi na vyathayanty ete puruṣaṃ puruṣarṣabha samaduḥkhasukhaṃ dhīraṃ so 'mṛtatvāya kalpate nāsato vidyate bhāvo nābhāvo vidyate sataḥ ubhayor api dṛṣṭo 'ntas tv anayos tattvadarśibhiḥ avināśi tu tad viddhi yena sarvam idaṃ tatam vināśam avyayasyāsya na kaś cit kartum arhati antavanta ime dehā nityasyoktāḥ śarīriṇaḥ anāśino 'prameyasya tasmād yudhyasva bhārata ya enaṃ vetti hantāraṃ yaś cainaṃ manyate hatam ubhau tau na vijānīto nāyaṃ hanti na hanyate na jāyate mriyate vā kadā cin; nāyaṃ bhūtvā bhavitā vā na bhūyaḥ ajo nityaḥ śāśvato 'yaṃ purāṇo; na hanyate hanyamāne śarīre vedāvināśinaṃ nityaṃ ya enam ajam avyayam kathaṃ sa puruṣaḥ pārtha kaṃ ghātayati hanti kam vāsāṃsi jīrṇāni yathā vihāya; navāni gṛhṇāti naro 'parāṇi tathā śarīrāṇi vihāya jīrṇāny; anyāni saṃyāti navāni dehī nainaṃ chindanti śastrāṇi nainaṃ dahati pāvakaḥ na cainaṃ kledayanty āpo na śoṣayati mārutaḥ acchedyo 'yam adāhyo 'yam akledyo 'śoṣya eva ca nityaḥ sarvagataḥ sthāṇur acalo 'yaṃ sanātanaḥ avyakto 'yam acintyo 'yam avikāryo 'yam ucyate tasmād evaṃ viditvainaṃ nānuśocitum arhasi atha cainaṃ nityajātaṃ nityaṃ vā manyase mṛtam tathāpi tvaṃ mahābāho nainaṃ śocitum arhasi jātasya hi dhruvo mṛtyur dhruvaṃ janma mṛtasya ca tasmād aparihārye 'rthe na tvaṃ śocitum arhasi avyaktādīni bhūtāni vyaktamadhyāni bhārata avyaktanidhanāny eva tatra kā paridevanā āścaryavat paśyati kaś cid enam; āścaryavad vadati tathaiva cānyaḥ āścaryavac cainam anyaḥ śṛṇoti; śrutvāpy enaṃ veda na caiva kaś cit dehī nityam avadhyo 'yaṃ dehe sarvasya bhārata tasmāt sarvāṇi bhūtāni na tvaṃ śocitum arhasi svadharmam api cāvekṣya na vikampitum arhasi dharmyād dhi yuddhāc chreyo 'nyat kṣatriyasya na vidyate yadṛcchayā copapannaṃ svargadvāram apāvṛtam sukhinaḥ kṣatriyāḥ pārtha labhante yuddham īdṛśam atha cet tvam imaṃ dharmyaṃ saṃgrāmaṃ na kariṣyasi tataḥ svadharmaṃ kīrtiṃ ca hitvā pāpam avāpsyasi akīrtiṃ cāpi bhūtāni kathayiṣyanti te 'vyayām saṃbhāvitasya cākīrtir maraṇād atiricyate bhayād raṇād uparataṃ maṃsyante tvāṃ mahārathāḥ yeṣāṃ ca tvaṃ bahumato bhūtvā yāsyasi lāghavam avācyavādāṃś ca bahūn vadiṣyanti tavāhitāḥ nindantas tava sāmarthyaṃ tato duḥkhataraṃ nu kim hato vā prāpsyasi svargaṃ jitvā vā bhokṣyase mahīm tasmād uttiṣṭha kaunteya yuddhāya kṛtaniścayaḥ sukhaduḥkhe same kṛtvā lābhālābhau jayājayau tato yuddhāya yujyasva naivaṃ pāpam avāpsyasi eṣā te 'bhihitā sāṃkhye buddhir yoge tv imāṃ śṛṇu buddhyā yukto yayā pārtha karmabandhaṃ prahāsyasi nehābhikramanāśo 'sti pratyavāyo na vidyate svalpam apy asya dharmasya trāyate mahato bhayāt vyavasāyātmikā buddhir ekeha kurunandana bahuśākhā hy anantāś ca buddhayo 'vyavasāyinām yām imāṃ puṣpitāṃ vācaṃ pravadanty avipaścitaḥ vedavādaratāḥ pārtha nānyad astīti vādinaḥ kāmātmānaḥ svargaparā janmakarmaphalapradām kriyāviśeṣabahulāṃ bhogaiśvaryagatiṃ prati bhogaiśvaryaprasaktānāṃ tayāpahṛtacetasām vyavasāyātmikā buddhiḥ samādhau na vidhīyate traiguṇyaviṣayā vedā nistraiguṇyo bhavārjuna nirdvaṃdvo nityasattvastho niryogakṣema ātmavān yāvān artha udapāne sarvataḥ saṃplutodake tāvān sarveṣu vedeṣu brāhmaṇasya vijānataḥ karmaṇy evādhikāras te mā phaleṣu kadā cana mā karmaphalahetur bhūr mā te saṅgo 'stv akarmaṇi yogasthaḥ kuru karmāṇi saṅgaṃ tyaktvā dhanaṃjaya siddhyasiddhyoḥ samo bhūtvā samatvaṃ yoga ucyate dūreṇa hy avaraṃ karma buddhiyogād dhanaṃjaya buddhau śaraṇam anviccha kṛpaṇāḥ phalahetavaḥ buddhiyukto jahātīha ubhe sukṛtaduṣkṛte tasmād yogāya yujyasva yogaḥ karmasu kauśalam karmajaṃ buddhiyuktā hi phalaṃ tyaktvā manīṣiṇaḥ janmabandhavinirmuktāḥ padaṃ gacchanty anāmayam yadā te mohakalilaṃ buddhir vyatitariṣyati tadā gantāsi nirvedaṃ śrotavyasya śrutasya ca śrutivipratipannā te yadā sthāsyati niścalā samādhāv acalā buddhis tadā yogam avāpsyasi arjuna uvāca sthitaprajñasya kā bhāṣā samādhisthasya keśava sthitadhīḥ kiṃ prabhāṣeta kim āsīta vrajeta kim śrībhagavān uvāca prajahāti yadā kāmān sarvān pārtha manogatān ātmany evātmanā tuṣṭaḥ sthitaprajñas tadocyate duḥkheṣv anudvignamanāḥ sukheṣu vigataspṛhaḥ vītarāgabhayakrodhaḥ sthitadhīr munir ucyate yaḥ sarvatrānabhisnehas tat tat prāpya śubhāśubham nābhinandati na dveṣṭi tasya prajñā pratiṣṭhitā yadā saṃharate cāyaṃ kūrmo 'ṅgānīva sarvaśaḥ indriyāṇīndriyārthebhyas tasya prajñā pratiṣṭhitā viṣayā vinivartante nirāhārasya dehinaḥ rasavarjaṃ raso 'py asya paraṃ dṛṣṭvā nivartate yatato hy api kaunteya puruṣasya vipaścitaḥ indriyāṇi pramāthīni haranti prasabhaṃ manaḥ tāni sarvāṇi saṃyamya yukta āsīta matparaḥ vaśe hi yasyendriyāṇi tasya prajñā pratiṣṭhitā dhyāyato viṣayān puṃsaḥ saṅgas teṣūpajāyate saṅgāt saṃjāyate kāmaḥ kāmāt krodho 'bhijāyate krodhād bhavati saṃmohaḥ saṃmohāt smṛtivibhramaḥ smṛtibhraṃśād buddhināśo buddhināśāt praṇaśyati rāgadveṣaviyuktais tu viṣayān indriyaiś caran ātmavaśyair vidheyātmā prasādam adhigacchati prasāde sarvaduḥkhānāṃ hānir asyopajāyate prasannacetaso hy āśu buddhiḥ paryavatiṣṭhate nāsti buddhir ayuktasya na cāyuktasya bhāvanā na cābhāvayataḥ śāntir aśāntasya kutaḥ sukham indriyāṇāṃ hi caratāṃ yan mano 'nuvidhīyate tad asya harati prajñāṃ vāyur nāvam ivāmbhasi tasmād yasya mahābāho nigṛhītāni sarvaśaḥ indriyāṇīndriyārthebhyas tasya prajñā pratiṣṭhitā yā niśā sarvabhūtānāṃ tasyāṃ jāgarti saṃyamī yasyāṃ jāgrati bhūtāni sā niśā paśyato muneḥ āpūryamāṇam acalapratiṣṭhaṃ; samudram āpaḥ praviśanti yadvat tadvat kāmā yaṃ praviśanti sarve; sa śāntim āpnoti na kāmakāmī vihāya kāmān yaḥ sarvān pumāṃś carati niḥspṛhaḥ nirmamo nirahaṃkāraḥ sa śāntim adhigacchati eṣā brāhmī sthitiḥ pārtha naināṃ prāpya vimuhyati sthitvāsyām antakāle 'pi brahmanirvāṇam ṛcchati arjuna uvāca jyāyasī cet karmaṇas te matā buddhir janārdana tat kiṃ karmaṇi ghore māṃ niyojayasi keśava vyāmiśreṇaiva vākyena buddhiṃ mohayasīva me tad ekaṃ vada niścitya yena śreyo 'ham āpnuyām śrībhagavān uvāca loke 'smin dvividhā niṣṭhā purā proktā mayānagha jñānayogena sāṃkhyānāṃ karmayogena yoginām na karmaṇām anārambhān naiṣkarmyaṃ puruṣo 'śnute na ca saṃnyasanād eva siddhiṃ samadhigacchati na hi kaś cit kṣaṇam api jātu tiṣṭhaty akarmakṛt kāryate hy avaśaḥ karma sarvaḥ prakṛtijair guṇaiḥ karmendriyāṇi saṃyamya ya āste manasā smaran indriyārthān vimūḍhātmā mithyācāraḥ sa ucyate yas tv indriyāṇi manasā niyamyārabhate 'rjuna karmendriyaiḥ karmayogam asaktaḥ sa viśiṣyate niyataṃ kuru karma tvaṃ karma jyāyo hy akarmaṇaḥ śarīrayātrāpi ca te na prasidhyed akarmaṇaḥ yajñārthāt karmaṇo 'nyatra loko 'yaṃ karmabandhanaḥ tadarthaṃ karma kaunteya muktasaṅgaḥ samācara sahayajñāḥ prajāḥ sṛṣṭvā purovāca prajāpatiḥ anena prasaviṣyadhvam eṣa vo 'stv iṣṭakāmadhuk devān bhāvayatānena te devā bhāvayantu vaḥ parasparaṃ bhāvayantaḥ śreyaḥ param avāpsyatha iṣṭān bhogān hi vo devā dāsyante yajñabhāvitāḥ tair dattān apradāyaibhyo yo bhuṅkte stena eva saḥ yajñaśiṣṭāśinaḥ santo mucyante sarvakilbiṣaiḥ bhuñjate te tv aghaṃ pāpā ye pacanty ātmakāraṇāt annād bhavanti bhūtāni parjanyād annasaṃbhavaḥ yajñād bhavati parjanyo yajñaḥ karmasamudbhavaḥ karma brahmodbhavaṃ viddhi brahmākṣarasamudbhavam tasmāt sarvagataṃ brahma nityaṃ yajñe pratiṣṭhitam evaṃ pravartitaṃ cakraṃ nānuvartayatīha yaḥ aghāyur indriyārāmo moghaṃ pārtha sa jīvati yas tv ātmaratir eva syād ātmatṛptaś ca mānavaḥ ātmany eva ca saṃtuṣṭas tasya kāryaṃ na vidyate naiva tasya kṛtenārtho nākṛteneha kaś cana na cāsya sarvabhūteṣu kaś cid arthavyapāśrayaḥ tasmād asaktaḥ satataṃ kāryaṃ karma samācara asakto hy ācaran karma param āpnoti pūruṣaḥ karmaṇaiva hi saṃsiddhim āsthitā janakādayaḥ lokasaṃgraham evāpi saṃpaśyan kartum arhasi yad yad ācarati śreṣṭhas tat tad evetaro janaḥ sa yat pramāṇaṃ kurute lokas tad anuvartate na me pārthāsti kartavyaṃ triṣu lokeṣu kiṃ cana nānavāptam avāptavyaṃ varta eva ca karmaṇi yadi hy ahaṃ na varteyaṃ jātu karmaṇy atandritaḥ mama vartmānuvartante manuṣyāḥ pārtha sarvaśaḥ utsīdeyur ime lokā na kuryāṃ karma ced aham saṃkarasya ca kartā syām upahanyām imāḥ prajāḥ saktāḥ karmaṇy avidvāṃso yathā kurvanti bhārata kuryād vidvāṃs tathāsaktaś cikīrṣur lokasaṃgraham na buddhibhedaṃ janayed ajñānāṃ karmasaṅginām joṣayet sarvakarmāṇi vidvān yuktaḥ samācaran prakṛteḥ kriyamāṇāni guṇaiḥ karmāṇi sarvaśaḥ ahaṃkāravimūḍhātmā kartāham iti manyate tattvavit tu mahābāho guṇakarmavibhāgayoḥ guṇā guṇeṣu vartanta iti matvā na sajjate prakṛter guṇasaṃmūḍhāḥ sajjante guṇakarmasu tān akṛtsnavido mandān kṛtsnavin na vicālayet mayi sarvāṇi karmāṇi saṃnyasyādhyātmacetasā nirāśīr nirmamo bhūtvā yudhyasva vigatajvaraḥ ye me matam idaṃ nityam anutiṣṭhanti mānavāḥ śraddhāvanto 'nasūyanto mucyante te 'pi karmabhiḥ ye tv etad abhyasūyanto nānutiṣṭhanti me matam sarvajñānavimūḍhāṃs tān viddhi naṣṭān acetasaḥ sadṛśaṃ ceṣṭate svasyāḥ prakṛter jñānavān api prakṛtiṃ yānti bhūtāni nigrahaḥ kiṃ kariṣyati indriyasyendriyasyārthe rāgadveṣau vyavasthitau tayor na vaśam āgacchet tau hy asya paripanthinau śreyān svadharmo viguṇaḥ paradharmāt svanuṣṭhitāt svadharme nidhanaṃ śreyaḥ paradharmo bhayāvahaḥ arjuna uvāca atha kena prayukto 'yaṃ pāpaṃ carati pūruṣaḥ anicchann api vārṣṇeya balād iva niyojitaḥ śrībhagavān uvāca kāma eṣa krodha eṣa rajoguṇasamudbhavaḥ mahāśano mahāpāpmā viddhy enam iha vairiṇam dhūmenāvriyate vahnir yathādarśo malena ca yatholbenāvṛto garbhas tathā tenedam āvṛtam āvṛtaṃ jñānam etena jñānino nityavairiṇā kāmarūpeṇa kaunteya duṣpūreṇānalena ca indriyāṇi mano buddhir asyādhiṣṭhānam ucyate etair vimohayaty eṣa jñānam āvṛtya dehinam tasmāt tvam indriyāṇy ādau niyamya bharatarṣabha pāpmānaṃ prajahihy enaṃ jñānavijñānanāśanam indriyāṇi parāṇy āhur indriyebhyaḥ paraṃ manaḥ manasas tu parā buddhir yo buddheḥ paratas tu saḥ evaṃ buddheḥ paraṃ buddhvā saṃstabhyātmānam ātmanā jahi śatruṃ mahābāho kāmarūpaṃ durāsadam śrībhagavān uvāca imaṃ vivasvate yogaṃ proktavān aham avyayam vivasvān manave prāha manur ikṣvākave 'bravīt evaṃ paraṃparāprāptam imaṃ rājarṣayo viduḥ sa kāleneha mahatā yogo naṣṭaḥ paraṃtapa sa evāyaṃ mayā te 'dya yogaḥ proktaḥ purātanaḥ bhakto 'si me sakhā ceti rahasyaṃ hy etad uttamam arjuna uvāca aparaṃ bhavato janma paraṃ janma vivasvataḥ katham etad vijānīyāṃ tvam ādau proktavān iti śrībhagavān uvāca bahūni me vyatītāni janmāni tava cārjuna tāny ahaṃ veda sarvāṇi na tvaṃ vettha paraṃtapa ajo 'pi sann avyayātmā bhūtānām īśvaro 'pi san prakṛtiṃ svām adhiṣṭhāya saṃbhavāmy ātmamāyayā yadā yadā hi dharmasya glānir bhavati bhārata abhyutthānam adharmasya tadātmānaṃ sṛjāmy aham paritrāṇāya sādhūnāṃ vināśāya ca duṣkṛtām dharmasaṃsthāpanārthāya saṃbhavāmi yuge yuge janma karma ca me divyam evaṃ yo vetti tattvataḥ tyaktvā dehaṃ punarjanma naiti mām eti so 'rjuna vītarāgabhayakrodhā manmayā mām upāśritāḥ bahavo jñānatapasā pūtā madbhāvam āgatāḥ ye yathā māṃ prapadyante tāṃs tathaiva bhajāmy aham mama vartmānuvartante manuṣyāḥ pārtha sarvaśaḥ kāṅkṣantaḥ karmaṇāṃ siddhiṃ yajanta iha devatāḥ kṣipraṃ hi mānuṣe loke siddhir bhavati karmajā cāturvarṇyaṃ mayā sṛṣṭaṃ guṇakarmavibhāgaśaḥ tasya kartāram api māṃ viddhy akartāram avyayam na māṃ karmāṇi limpanti na me karmaphale spṛhā iti māṃ yo 'bhijānāti karmabhir na sa badhyate evaṃ jñātvā kṛtaṃ karma pūrvair api mumukṣubhiḥ kuru karmaiva tasmāt tvaṃ pūrvaiḥ pūrvataraṃ kṛtam kiṃ karma kim akarmeti kavayo 'py atra mohitāḥ tat te karma pravakṣyāmi yaj jñātvā mokṣyase 'śubhāt karmaṇo hy api boddhavyaṃ boddhavyaṃ ca vikarmaṇaḥ akarmaṇaś ca boddhavyaṃ gahanā karmaṇo gatiḥ karmaṇy akarma yaḥ paśyed akarmaṇi ca karma yaḥ sa buddhimān manuṣyeṣu sa yuktaḥ kṛtsnakarmakṛt yasya sarve samārambhāḥ kāmasaṃkalpavarjitāḥ jñānāgnidagdhakarmāṇaṃ tam āhuḥ paṇḍitaṃ budhāḥ tyaktvā karmaphalāsaṅgaṃ nityatṛpto nirāśrayaḥ karmaṇy abhipravṛtto 'pi naiva kiṃ cit karoti saḥ nirāśīr yatacittātmā tyaktasarvaparigrahaḥ śārīraṃ kevalaṃ karma kurvan nāpnoti kilbiṣam yadṛcchālābhasaṃtuṣṭo dvaṃdvātīto vimatsaraḥ samaḥ siddhāv asiddhau ca kṛtvāpi na nibadhyate gatasaṅgasya muktasya jñānāvasthitacetasaḥ yajñāyācarataḥ karma samagraṃ pravilīyate brahmārpaṇaṃ brahmahavir brahmāgnau brahmaṇā hutam brahmaiva tena gantavyaṃ brahmakarmasamādhinā daivam evāpare yajñaṃ yoginaḥ paryupāsate brahmāgnāv apare yajñaṃ yajñenaivopajuhvati śrotrādīnīndriyāṇy anye saṃyamāgniṣu juhvati śabdādīn viṣayān anya indriyāgniṣu juhvati sarvāṇīndriyakarmāṇi prāṇakarmāṇi cāpare ātmasaṃyamayogāgnau juhvati jñānadīpite dravyayajñās tapoyajñā yogayajñās tathāpare svādhyāyajñānayajñāś ca yatayaḥ saṃśitavratāḥ apāne juhvati prāṇaṃ prāṇe 'pānaṃ tathāpare prāṇāpānagatī ruddhvā prāṇāyāmaparāyaṇāḥ apare niyatāhārāḥ prāṇān prāṇeṣu juhvati sarve 'py ete yajñavido yajñakṣapitakalmaṣāḥ yajñaśiṣṭāmṛtabhujo yānti brahma sanātanam nāyaṃ loko 'sty ayajñasya kuto 'nyaḥ kurusattama evaṃ bahuvidhā yajñā vitatā brahmaṇo mukhe karmajān viddhi tān sarvān evaṃ jñātvā vimokṣyase śreyān dravyamayād yajñāj jñānayajñaḥ paraṃtapa sarvaṃ karmākhilaṃ pārtha jñāne parisamāpyate tad viddhi praṇipātena paripraśnena sevayā upadekṣyanti te jñānaṃ jñāninas tattvadarśinaḥ yaj jñātvā na punar moham evaṃ yāsyasi pāṇḍava yena bhūtāny aśeṣeṇa drakṣyasy ātmany atho mayi api ced asi pāpebhyaḥ sarvebhyaḥ pāpakṛttamaḥ sarvaṃ jñānaplavenaiva vṛjinaṃ saṃtariṣyasi yathaidhāṃsi samiddho 'gnir bhasmasāt kurute 'rjuna jñānāgniḥ sarvakarmāṇi bhasmasāt kurute tathā na hi jñānena sadṛśaṃ pavitram iha vidyate tat svayaṃ yogasaṃsiddhaḥ kālenātmani vindati śraddhāvāṃl labhate jñānaṃ tatparaḥ saṃyatendriyaḥ jñānaṃ labdhvā parāṃ śāntim acireṇādhigacchati ajñaś cāśraddadhānaś ca saṃśayātmā vinaśyati nāyaṃ loko 'sti na paro na sukhaṃ saṃśayātmanaḥ yogasaṃnyastakarmāṇaṃ jñānasaṃchinnasaṃśayam ātmavantaṃ na karmāṇi nibadhnanti dhanaṃjaya tasmād ajñānasaṃbhūtaṃ hṛtsthaṃ jñānāsinātmanaḥ chittvainaṃ saṃśayaṃ yogam ātiṣṭhottiṣṭha bhārata arjuna uvāca saṃnyāsaṃ karmaṇāṃ kṛṣṇa punar yogaṃ ca śaṃsasi yac chreya etayor ekaṃ tan me brūhi suniścitam śrībhagavān uvāca saṃnyāsaḥ karmayogaś ca niḥśreyasakarāv ubhau tayos tu karmasaṃnyāsāt karmayogo viśiṣyate jñeyaḥ sa nityasaṃnyāsī yo na dveṣṭi na kāṅkṣati nirdvaṃdvo hi mahābāho sukhaṃ bandhāt pramucyate sāṃkhyayogau pṛthag bālāḥ pravadanti na paṇḍitāḥ ekam apy āsthitaḥ samyag ubhayor vindate phalam yat sāṃkhyaiḥ prāpyate sthānaṃ tad yogair api gamyate ekaṃ sāṃkhyaṃ ca yogaṃ ca yaḥ paśyati sa paśyati saṃnyāsas tu mahābāho duḥkham āptum ayogataḥ yogayukto munir brahma nacireṇādhigacchati yogayukto viśuddhātmā vijitātmā jitendriyaḥ sarvabhūtātmabhūtātmā kurvann api na lipyate naiva kiṃ cit karomīti yukto manyeta tattvavit paśyañ śṛṇvan spṛśañ jighrann aśnan gacchan svapañ śvasan pralapan visṛjan gṛhṇann unmiṣan nimiṣann api indriyāṇīndriyārtheṣu vartanta iti dhārayan brahmaṇy ādhāya karmāṇi saṅgaṃ tyaktvā karoti yaḥ lipyate na sa pāpena padmapatram ivāmbhasā kāyena manasā buddhyā kevalair indriyair api yoginaḥ karma kurvanti saṅgaṃ tyaktvātmaśuddhaye yuktaḥ karmaphalaṃ tyaktvā śāntim āpnoti naiṣṭhikīm ayuktaḥ kāmakāreṇa phale sakto nibadhyate sarvakarmāṇi manasā saṃnyasyāste sukhaṃ vaśī navadvāre pure dehī naiva kurvan na kārayan na kartṛtvaṃ na karmāṇi lokasya sṛjati prabhuḥ na karmaphalasaṃyogaṃ svabhāvas tu pravartate nādatte kasya cit pāpaṃ na caiva sukṛtaṃ vibhuḥ ajñānenāvṛtaṃ jñānaṃ tena muhyanti jantavaḥ jñānena tu tad ajñānaṃ yeṣāṃ nāśitam ātmanaḥ teṣām ādityavaj jñānaṃ prakāśayati tatparam tadbuddhayas tadātmānas tanniṣṭhās tatparāyaṇāḥ gacchanty apunarāvṛttiṃ jñānanirdhūtakalmaṣāḥ vidyāvinayasaṃpanne brāhmaṇe gavi hastini śuni caiva śvapāke ca paṇḍitāḥ samadarśinaḥ ihaiva tair jitaḥ sargo yeṣāṃ sāmye sthitaṃ manaḥ nirdoṣaṃ hi samaṃ brahma tasmād brahmaṇi te sthitāḥ na prahṛṣyet priyaṃ prāpya nodvijet prāpya cāpriyam sthirabuddhir asaṃmūḍho brahmavid brahmaṇi sthitaḥ bāhyasparśeṣv asaktātmā vindaty ātmani yat sukham sa brahmayogayuktātmā sukham akṣayam aśnute ye hi saṃsparśajā bhogā duḥkhayonaya eva te ādyantavantaḥ kaunteya na teṣu ramate budhaḥ śaknotīhaiva yaḥ soḍhuṃ prāk śarīravimokṣaṇāt kāmakrodhodbhavaṃ vegaṃ sa yuktaḥ sa sukhī naraḥ yo 'ntaḥsukho 'ntarārāmas tathāntarjyotir eva yaḥ sa yogī brahmanirvāṇaṃ brahmabhūto 'dhigacchati labhante brahmanirvāṇam ṛṣayaḥ kṣīṇakalmaṣāḥ chinnadvaidhā yatātmānaḥ sarvabhūtahite ratāḥ kāmakrodhaviyuktānāṃ yatīnāṃ yatacetasām abhito brahmanirvāṇaṃ vartate viditātmanām sparśān kṛtvā bahir bāhyāṃś cakṣuś caivāntare bhruvoḥ prāṇāpānau samau kṛtvā nāsābhyantaracāriṇau yatendriyamanobuddhir munir mokṣaparāyaṇaḥ vigatecchābhayakrodho yaḥ sadā mukta eva saḥ bhoktāraṃ yajñatapasāṃ sarvalokamaheśvaram suhṛdaṃ sarvabhūtānāṃ jñātvā māṃ śāntim ṛcchati śrībhagavān uvāca anāśritaḥ karmaphalaṃ kāryaṃ karma karoti yaḥ sa saṃnyāsī ca yogī ca na niragnir na cākriyaḥ yaṃ saṃnyāsam iti prāhur yogaṃ taṃ viddhi pāṇḍava na hy asaṃnyastasaṃkalpo yogī bhavati kaś cana ārurukṣor muner yogaṃ karma kāraṇam ucyate yogārūḍhasya tasyaiva śamaḥ kāraṇam ucyate yadā hi nendriyārtheṣu na karmasv anuṣajjate sarvasaṃkalpasaṃnyāsī yogārūḍhas tadocyate uddhared ātmanātmānaṃ nātmānam avasādayet ātmaiva hy ātmano bandhur ātmaiva ripur ātmanaḥ bandhur ātmātmanas tasya yenātmaivātmanā jitaḥ anātmanas tu śatrutve vartetātmaiva śatruvat jitātmanaḥ praśāntasya paramātmā samāhitaḥ śītoṣṇasukhaduḥkheṣu tathā mānāvamānayoḥ jñānavijñānatṛptātmā kūṭastho vijitendriyaḥ yukta ity ucyate yogī samaloṣṭāśmakāñcanaḥ suhṛnmitrāryudāsīnamadhyasthadveṣyabandhuṣu sādhuṣv api ca pāpeṣu samabuddhir viśiṣyate yogī yuñjīta satatam ātmānaṃ rahasi sthitaḥ ekākī yatacittātmā nirāśīr aparigrahaḥ śucau deśe pratiṣṭhāpya sthiram āsanam ātmanaḥ nātyucchritaṃ nātinīcaṃ cailājinakuśottaram tatraikāgraṃ manaḥ kṛtvā yatacittendriyakriyaḥ upaviśyāsane yuñjyād yogam ātmaviśuddhaye samaṃ kāyaśirogrīvaṃ dhārayann acalaṃ sthiraḥ saṃprekṣya nāsikāgraṃ svaṃ diśaś cānavalokayan praśāntātmā vigatabhīr brahmacārivrate sthitaḥ manaḥ saṃyamya maccitto yukta āsīta matparaḥ yuñjann evaṃ sadātmānaṃ yogī niyatamānasaḥ śāntiṃ nirvāṇaparamāṃ matsaṃsthām adhigacchati nātyaśnatas tu yogo 'sti na caikāntam anaśnataḥ na cātisvapnaśīlasya jāgrato naiva cārjuna yuktāhāravihārasya yuktaceṣṭasya karmasu yuktasvapnāvabodhasya yogo bhavati duḥkhahā yadā viniyataṃ cittam ātmany evāvatiṣṭhate niḥspṛhaḥ sarvakāmebhyo yukta ity ucyate tadā yathā dīpo nivātastho neṅgate sopamā smṛtā yogino yatacittasya yuñjato yogam ātmanaḥ yatroparamate cittaṃ niruddhaṃ yogasevayā yatra caivātmanātmānaṃ paśyann ātmani tuṣyati sukham ātyantikaṃ yat tad buddhigrāhyam atīndriyam vetti yatra na caivāyaṃ sthitaś calati tattvataḥ yaṃ labdhvā cāparaṃ lābhaṃ manyate nādhikaṃ tataḥ yasmin sthito na duḥkhena guruṇāpi vicālyate taṃ vidyād duḥkhasaṃyogaviyogaṃ yogasaṃjñitam sa niścayena yoktavyo yogo 'nirviṇṇacetasā saṃkalpaprabhavān kāmāṃs tyaktvā sarvān aśeṣataḥ manasaivendriyagrāmaṃ viniyamya samantataḥ śanaiḥ śanair uparamed buddhyā dhṛtigṛhītayā ātmasaṃsthaṃ manaḥ kṛtvā na kiṃ cid api cintayet yato yato niścarati manaś cañcalam asthiram tatas tato niyamyaitad ātmany eva vaśaṃ nayet praśāntamanasaṃ hy enaṃ yoginaṃ sukham uttamam upaiti śāntarajasaṃ brahmabhūtam akalmaṣam yuñjann evaṃ sadātmānaṃ yogī vigatakalmaṣaḥ sukhena brahmasaṃsparśam atyantaṃ sukham aśnute sarvabhūtastham ātmānaṃ sarvabhūtāni cātmani īkṣate yogayuktātmā sarvatra samadarśanaḥ yo māṃ paśyati sarvatra sarvaṃ ca mayi paśyati tasyāhaṃ na praṇaśyāmi sa ca me na praṇaśyati sarvabhūtasthitaṃ yo māṃ bhajaty ekatvam āsthitaḥ sarvathā vartamāno 'pi sa yogī mayi vartate ātmaupamyena sarvatra samaṃ paśyati yo 'rjuna sukhaṃ vā yadi vā duḥkhaṃ sa yogī paramo mataḥ arjuna uvāca yo 'yaṃ yogas tvayā proktaḥ sāmyena madhusūdana etasyāhaṃ na paśyāmi cañcalatvāt sthitiṃ sthirām cañcalaṃ hi manaḥ kṛṣṇa pramāthi balavad dṛḍham tasyāhaṃ nigrahaṃ manye vāyor iva suduṣkaram śrībhagavān uvāca asaṃśayaṃ mahābāho mano durnigrahaṃ calam abhyāsena tu kaunteya vairāgyeṇa ca gṛhyate asaṃyatātmanā yogo duṣprāpa iti me matiḥ vaśyātmanā tu yatatā śakyo 'vāptum upāyataḥ arjuna uvāca ayatiḥ śraddhayopeto yogāc calitamānasaḥ aprāpya yogasaṃsiddhiṃ kāṃ gatiṃ kṛṣṇa gacchati kaccin nobhayavibhraṣṭaś chinnābhram iva naśyati apratiṣṭho mahābāho vimūḍho brahmaṇaḥ pathi etan me saṃśayaṃ kṛṣṇa chettum arhasy aśeṣataḥ tvad anyaḥ saṃśayasyāsya chettā na hy upapadyate śrībhagavān uvāca pārtha naiveha nāmutra vināśas tasya vidyate na hi kalyāṇakṛt kaś cid durgatiṃ tāta gacchati prāpya puṇyakṛtāṃl lokān uṣitvā śāśvatīḥ samāḥ śucīnāṃ śrīmatāṃ gehe yogabhraṣṭo 'bhijāyate atha vā yoginām eva kule bhavati dhīmatām etad dhi durlabhataraṃ loke janma yad īdṛśam tatra taṃ buddhisaṃyogaṃ labhate paurvadehikam yatate ca tato bhūyaḥ saṃsiddhau kurunandana pūrvābhyāsena tenaiva hriyate hy avaśo 'pi saḥ jijñāsur api yogasya śabdabrahmātivartate prayatnād yatamānas tu yogī saṃśuddhakilbiṣaḥ anekajanmasaṃsiddhas tato yāti parāṃ gatim tapasvibhyo 'dhiko yogī jñānibhyo 'pi mato 'dhikaḥ karmibhyaś cādhiko yogī tasmād yogī bhavārjuna yoginām api sarveṣāṃ madgatenāntarātmanā śraddhāvān bhajate yo māṃ sa me yuktatamo mataḥ śrībhagavān uvāca mayy āsaktamanāḥ pārtha yogaṃ yuñjan madāśrayaḥ asaṃśayaṃ samagraṃ māṃ yathā jñāsyasi tac chṛṇu jñānaṃ te 'haṃ savijñānam idaṃ vakṣyāmy aśeṣataḥ yaj jñātvā neha bhūyo 'nyaj jñātavyam avaśiṣyate manuṣyāṇāṃ sahasreṣu kaś cid yatati siddhaye yatatām api siddhānāṃ kaś cin māṃ vetti tattvataḥ bhūmir āpo 'nalo vāyuḥ khaṃ mano buddhir eva ca ahaṃkāra itīyaṃ me bhinnā prakṛtir aṣṭadhā apareyam itas tv anyāṃ prakṛtiṃ viddhi me parām jīvabhūtāṃ mahābāho yayedaṃ dhāryate jagat etadyonīni bhūtāni sarvāṇīty upadhāraya ahaṃ kṛtsnasya jagataḥ prabhavaḥ pralayas tathā mattaḥ parataraṃ nānyat kiṃ cid asti dhanaṃjaya mayi sarvam idaṃ protaṃ sūtre maṇigaṇā iva raso 'ham apsu kaunteya prabhāsmi śaśisūryayoḥ praṇavaḥ sarvavedeṣu śabdaḥ khe pauruṣaṃ nṛṣu puṇyo gandhaḥ pṛthivyāṃ ca tejaś cāsmi vibhāvasau jīvanaṃ sarvabhūteṣu tapaś cāsmi tapasviṣu bījaṃ māṃ sarvabhūtānāṃ viddhi pārtha sanātanam buddhir buddhimatām asmi tejas tejasvinām aham balaṃ balavatāṃ cāhaṃ kāmarāgavivarjitam dharmāviruddho bhūteṣu kāmo 'smi bharatarṣabha ye caiva sāttvikā bhāvā rājasās tāmasāś ca ye matta eveti tān viddhi na tv ahaṃ teṣu te mayi tribhir guṇamayair bhāvair ebhiḥ sarvam idaṃ jagat mohitaṃ nābhijānāti mām ebhyaḥ param avyayam daivī hy eṣā guṇamayī mama māyā duratyayā mām eva ye prapadyante māyām etāṃ taranti te na māṃ duṣkṛtino mūḍhāḥ prapadyante narādhamāḥ māyayāpahṛtajñānā āsuraṃ bhāvam āśritāḥ caturvidhā bhajante māṃ janāḥ sukṛtino 'rjuna ārto jijñāsur arthārthī jñānī ca bharatarṣabha teṣāṃ jñānī nityayukta ekabhaktir viśiṣyate priyo hi jñānino 'tyartham ahaṃ sa ca mama priyaḥ udārāḥ sarva evaite jñānī tv ātmaiva me matam āsthitaḥ sa hi yuktātmā mām evānuttamāṃ gatim bahūnāṃ janmanām ante jñānavān māṃ prapadyate vāsudevaḥ sarvam iti sa mahātmā sudurlabhaḥ kāmais tais tair hṛtajñānāḥ prapadyante 'nyadevatāḥ taṃ taṃ niyamam āsthāya prakṛtyā niyatāḥ svayā yo yo yāṃ yāṃ tanuṃ bhaktaḥ śraddhayārcitum icchati tasya tasyācalāṃ śraddhāṃ tām eva vidadhāmy aham sa tayā śraddhayā yuktas tasyā rādhanam īhate labhate ca tataḥ kāmān mayaiva vihitān hi tān antavat tu phalaṃ teṣāṃ tad bhavaty alpamedhasām devān devayajo yānti madbhaktā yānti mām api avyaktaṃ vyaktim āpannaṃ manyante mām abuddhayaḥ paraṃ bhāvam ajānanto mamāvyayam anuttamam nāhaṃ prakāśaḥ sarvasya yogamāyāsamāvṛtaḥ mūḍho 'yaṃ nābhijānāti loko mām ajam avyayam vedāhaṃ samatītāni vartamānāni cārjuna bhaviṣyāṇi ca bhūtāni māṃ tu veda na kaś cana icchādveṣasamutthena dvaṃdvamohena bhārata sarvabhūtāni saṃmohaṃ sarge yānti paraṃtapa yeṣāṃ tv antagataṃ pāpaṃ janānāṃ puṇyakarmaṇām te dvaṃdvamohanirmuktā bhajante māṃ dṛḍhavratāḥ jarāmaraṇamokṣāya mām āśritya yatanti ye te brahma tad viduḥ kṛtsnam adhyātmaṃ karma cākhilam sādhibhūtādhidaivaṃ māṃ sādhiyajñaṃ ca ye viduḥ prayāṇakāle 'pi ca māṃ te vidur yuktacetasaḥ arjuna uvāca kiṃ tad brahma kim adhyātmaṃ kiṃ karma puruṣottama adhibhūtaṃ ca kiṃ proktam adhidaivaṃ kim ucyate adhiyajñaḥ kathaṃ ko 'tra dehe 'smin madhusūdana prayāṇakāle ca kathaṃ jñeyo 'si niyatātmabhiḥ śrībhagavān uvāca akṣaraṃ brahma paramaṃ svabhāvo 'dhyātmam ucyate bhūtabhāvodbhavakaro visargaḥ karmasaṃjñitaḥ adhibhūtaṃ kṣaro bhāvaḥ puruṣaś cādhidaivatam adhiyajño 'ham evātra dehe dehabhṛtāṃ vara antakāle ca mām eva smaran muktvā kalevaram yaḥ prayāti sa madbhāvaṃ yāti nāsty atra saṃśayaḥ yaṃ yaṃ vāpi smaran bhāvaṃ tyajaty ante kalevaram taṃ tam evaiti kaunteya sadā tadbhāvabhāvitaḥ tasmāt sarveṣu kāleṣu mām anusmara yudhya ca mayy arpitamanobuddhir mām evaiṣyasy asaṃśayaḥ abhyāsayogayuktena cetasā nānyagāminā paramaṃ puruṣaṃ divyaṃ yāti pārthānucintayan kaviṃ purāṇam anuśāsitāram; aṇor aṇīyāṃsam anusmared yaḥ sarvasya dhātāram acintyarūpam; ādityavarṇaṃ tamasaḥ parastāt prayāṇakāle manasācalena; bhaktyā yukto yogabalena caiva bhruvor madhye prāṇam āveśya samyak; sa taṃ paraṃ puruṣam upaiti divyam yad akṣaraṃ vedavido vadanti; viśanti yad yatayo vītarāgāḥ yad icchanto brahmacaryaṃ caranti; tat te padaṃ saṃgraheṇa pravakṣye sarvadvārāṇi saṃyamya mano hṛdi nirudhya ca mūrdhny ādhāyātmanaḥ prāṇam āsthito yogadhāraṇām om ity ekākṣaraṃ brahma vyāharan mām anusmaran yaḥ prayāti tyajan dehaṃ sa yāti paramāṃ gatim ananyacetāḥ satataṃ yo māṃ smarati nityaśaḥ tasyāhaṃ sulabhaḥ pārtha nityayuktasya yoginaḥ mām upetya punarjanma duḥkhālayam aśāśvatam nāpnuvanti mahātmānaḥ saṃsiddhiṃ paramāṃ gatāḥ ā brahmabhuvanāl lokāḥ punarāvartino 'rjuna mām upetya tu kaunteya punarjanma na vidyate sahasrayugaparyantam ahar yad brahmaṇo viduḥ rātriṃ yugasahasrāntāṃ te 'horātravido janāḥ avyaktād vyaktayaḥ sarvāḥ prabhavanty aharāgame rātryāgame pralīyante tatraivāvyaktasaṃjñake bhūtagrāmaḥ sa evāyaṃ bhūtvā bhūtvā pralīyate rātryāgame 'vaśaḥ pārtha prabhavaty aharāgame paras tasmāt tu bhāvo 'nyo 'vyakto 'vyaktāt sanātanaḥ yaḥ sa sarveṣu bhūteṣu naśyatsu na vinaśyati avyakto 'kṣara ity uktas tam āhuḥ paramāṃ gatim yaṃ prāpya na nivartante tad dhāma paramaṃ mama puruṣaḥ sa paraḥ pārtha bhaktyā labhyas tv ananyayā yasyāntaḥsthāni bhūtāni yena sarvam idaṃ tatam yatra kāle tv anāvṛttim āvṛttiṃ caiva yoginaḥ prayātā yānti taṃ kālaṃ vakṣyāmi bharatarṣabha agnir jyotir ahaḥ śuklaḥ ṣaṇmāsā uttarāyaṇam tatra prayātā gacchanti brahma brahmavido janāḥ dhūmo rātris tathā kṛṣṇaḥ ṣaṇmāsā dakṣiṇāyanam tatra cāndramasaṃ jyotir yogī prāpya nivartate śuklakṛṣṇe gatī hy ete jagataḥ śāśvate mate ekayā yāty anāvṛttim anyayāvartate punaḥ naite sṛtī pārtha jānan yogī muhyati kaś cana tasmāt sarveṣu kāleṣu yogayukto bhavārjuna vedeṣu yajñeṣu tapaḥsu caiva; dāneṣu yat puṇyaphalaṃ pradiṣṭam atyeti tat sarvam idaṃ viditvā; yogī paraṃ sthānam upaiti cādyam śrībhagavān uvāca idaṃ tu te guhyatamaṃ pravakṣyāmy anasūyave jñānaṃ vijñānasahitaṃ yaj jñātvā mokṣyase 'śubhāt rājavidyā rājaguhyaṃ pavitram idam uttamam pratyakṣāvagamaṃ dharmyaṃ susukhaṃ kartum avyayam aśraddadhānāḥ puruṣā dharmasyāsya paraṃtapa aprāpya māṃ nivartante mṛtyusaṃsāravartmani mayā tatam idaṃ sarvaṃ jagad avyaktamūrtinā matsthāni sarvabhūtāni na cāhaṃ teṣv avasthitaḥ na ca matsthāni bhūtāni paśya me yogam aiśvaram bhūtabhṛn na ca bhūtastho mamātmā bhūtabhāvanaḥ yathākāśasthito nityaṃ vāyuḥ sarvatrago mahān tathā sarvāṇi bhūtāni matsthānīty upadhāraya sarvabhūtāni kaunteya prakṛtiṃ yānti māmikām kalpakṣaye punas tāni kalpādau visṛjāmy aham prakṛtiṃ svām avaṣṭabhya visṛjāmi punaḥ punaḥ bhūtagrāmam imaṃ kṛtsnam avaśaṃ prakṛter vaśāt na ca māṃ tāni karmāṇi nibadhnanti dhanaṃjaya udāsīnavad āsīnam asaktaṃ teṣu karmasu mayādhyakṣeṇa prakṛtiḥ sūyate sacarācaram hetunānena kaunteya jagad viparivartate avajānanti māṃ mūḍhā mānuṣīṃ tanum āśritam paraṃ bhāvam ajānanto mama bhūtamaheśvaram moghāśā moghakarmāṇo moghajñānā vicetasaḥ rākṣasīm āsurīṃ caiva prakṛtiṃ mohinīṃ śritāḥ mahātmānas tu māṃ pārtha daivīṃ prakṛtim āśritāḥ bhajanty ananyamanaso jñātvā bhūtādim avyayam satataṃ kīrtayanto māṃ yatantaś ca dṛḍhavratāḥ namasyantaś ca māṃ bhaktyā nityayuktā upāsate jñānayajñena cāpy anye yajanto mām upāsate ekatvena pṛthaktvena bahudhā viśvatomukham ahaṃ kratur ahaṃ yajñaḥ svadhāham aham auṣadham mantro 'ham aham evājyam aham agnir ahaṃ hutam pitāham asya jagato mātā dhātā pitāmahaḥ vedyaṃ pavitram oṃkāra ṛk sāma yajur eva ca gatir bhartā prabhuḥ sākṣī nivāsaḥ śaraṇaṃ suhṛt prabhavaḥ pralayaḥ sthānaṃ nidhānaṃ bījam avyayam tapāmy aham ahaṃ varṣaṃ nigṛhṇāmy utsṛjāmi ca amṛtaṃ caiva mṛtyuś ca sad asac cāham arjuna traividyā māṃ somapāḥ pūtapāpā; yajñair iṣṭvā svargatiṃ prārthayante te puṇyam āsādya surendralokam; aśnanti divyān divi devabhogān te taṃ bhuktvā svargalokaṃ viśālaṃ; kṣīṇe puṇye martyalokaṃ viśanti evaṃ trayīdharmam anuprapannā; gatāgataṃ kāmakāmā labhante ananyāś cintayanto māṃ ye janāḥ paryupāsate teṣāṃ nityābhiyuktānāṃ yogakṣemaṃ vahāmy aham ye 'py anyadevatā bhaktā yajante śraddhayānvitāḥ te 'pi mām eva kaunteya yajanty avidhipūrvakam ahaṃ hi sarvayajñānāṃ bhoktā ca prabhur eva ca na tu mām abhijānanti tattvenātaś cyavanti te yānti devavratā devān pitṝn yānti pitṛvratāḥ bhūtāni yānti bhūtejyā yānti madyājino 'pi mām patraṃ puṣpaṃ phalaṃ toyaṃ yo me bhaktyā prayacchati tad ahaṃ bhaktyupahṛtam aśnāmi prayatātmanaḥ yat karoṣi yad aśnāsi yaj juhoṣi dadāsi yat yat tapasyasi kaunteya tat kuruṣva madarpaṇam śubhāśubhaphalair evaṃ mokṣyase karmabandhanaiḥ saṃnyāsayogayuktātmā vimukto mām upaiṣyasi samo 'haṃ sarvabhūteṣu na me dveṣyo 'sti na priyaḥ ye bhajanti tu māṃ bhaktyā mayi te teṣu cāpy aham api cet sudurācāro bhajate mām ananyabhāk sādhur eva sa mantavyaḥ samyag vyavasito hi saḥ kṣipraṃ bhavati dharmātmā śaśvacchāntiṃ nigacchati kaunteya pratijānīhi na me bhaktaḥ praṇaśyati māṃ hi pārtha vyapāśritya ye 'pi syuḥ pāpayonayaḥ striyo vaiśyās tathā śūdrās te 'pi yānti parāṃ gatim kiṃ punar brāhmaṇāḥ puṇyā bhaktā rājarṣayas tathā anityam asukhaṃ lokam imaṃ prāpya bhajasva mām manmanā bhava madbhakto madyājī māṃ namaskuru mām evaiṣyasi yuktvaivam ātmānaṃ matparāyaṇaḥ śrībhagavān uvāca bhūya eva mahābāho śṛṇu me paramaṃ vacaḥ yat te 'haṃ prīyamāṇāya vakṣyāmi hitakāmyayā na me viduḥ suragaṇāḥ prabhavaṃ na maharṣayaḥ aham ādir hi devānāṃ maharṣīṇāṃ ca sarvaśaḥ yo mām ajam anādiṃ ca vetti lokamaheśvaram asaṃmūḍhaḥ sa martyeṣu sarvapāpaiḥ pramucyate buddhir jñānam asaṃmohaḥ kṣamā satyaṃ damaḥ śamaḥ sukhaṃ duḥkhaṃ bhavo 'bhāvo bhayaṃ cābhayam eva ca ahiṃsā samatā tuṣṭis tapo dānaṃ yaśo 'yaśaḥ bhavanti bhāvā bhūtānāṃ matta eva pṛthagvidhāḥ maharṣayaḥ sapta pūrve catvāro manavas tathā madbhāvā mānasā jātā yeṣāṃ loka imāḥ prajāḥ etāṃ vibhūtiṃ yogaṃ ca mama yo vetti tattvataḥ so 'vikampena yogena yujyate nātra saṃśayaḥ ahaṃ sarvasya prabhavo mattaḥ sarvaṃ pravartate iti matvā bhajante māṃ budhā bhāvasamanvitāḥ maccittā madgataprāṇā bodhayantaḥ parasparam kathayantaś ca māṃ nityaṃ tuṣyanti ca ramanti ca teṣāṃ satatayuktānāṃ bhajatāṃ prītipūrvakam dadāmi buddhiyogaṃ taṃ yena mām upayānti te teṣām evānukampārtham aham ajñānajaṃ tamaḥ nāśayāmy ātmabhāvastho jñānadīpena bhāsvatā arjuna uvāca paraṃ brahma paraṃ dhāma pavitraṃ paramaṃ bhavān puruṣaṃ śāśvataṃ divyam ādidevam ajaṃ vibhum āhus tvām ṛṣayaḥ sarve devarṣir nāradas tathā asito devalo vyāsaḥ svayaṃ caiva bravīṣi me sarvam etad ṛtaṃ manye yan māṃ vadasi keśava na hi te bhagavan vyaktiṃ vidur devā na dānavāḥ svayam evātmanātmānaṃ vettha tvaṃ puruṣottama bhūtabhāvana bhūteśa devadeva jagatpate vaktum arhasy aśeṣeṇa divyā hy ātmavibhūtayaḥ yābhir vibhūtibhir lokān imāṃs tvaṃ vyāpya tiṣṭhasi kathaṃ vidyām ahaṃ yogiṃs tvāṃ sadā paricintayan keṣu keṣu ca bhāveṣu cintyo 'si bhagavan mayā vistareṇātmano yogaṃ vibhūtiṃ ca janārdana bhūyaḥ kathaya tṛptir hi śṛṇvato nāsti me 'mṛtam śrībhagavān uvāca hanta te kathayiṣyāmi divyā hy ātmavibhūtayaḥ prādhānyataḥ kuruśreṣṭha nāsty anto vistarasya me aham ātmā guḍākeśa sarvabhūtāśayasthitaḥ aham ādiś ca madhyaṃ ca bhūtānām anta eva ca ādityānām ahaṃ viṣṇur jyotiṣāṃ ravir aṃśumān marīcir marutām asmi nakṣatrāṇām ahaṃ śaśī vedānāṃ sāmavedo 'smi devānām asmi vāsavaḥ indriyāṇāṃ manaś cāsmi bhūtānām asmi cetanā rudrāṇāṃ śaṃkaraś cāsmi vitteśo yakṣarakṣasām vasūnāṃ pāvakaś cāsmi meruḥ śikhariṇām aham purodhasāṃ ca mukhyaṃ māṃ viddhi pārtha bṛhaspatim senānīnām ahaṃ skandaḥ sarasām asmi sāgaraḥ maharṣīṇāṃ bhṛgur ahaṃ girām asmy ekam akṣaram yajñānāṃ japayajño 'smi sthāvarāṇāṃ himālayaḥ aśvatthaḥ sarvavṛkṣāṇāṃ devarṣīṇāṃ ca nāradaḥ gandharvāṇāṃ citrarathaḥ siddhānāṃ kapilo muniḥ uccaiḥśravasam aśvānāṃ viddhi mām amṛtodbhavam airāvataṃ gajendrāṇāṃ narāṇāṃ ca narādhipam āyudhānām ahaṃ vajraṃ dhenūnām asmi kāmadhuk prajanaś cāsmi kandarpaḥ sarpāṇām asmi vāsukiḥ anantaś cāsmi nāgānāṃ varuṇo yādasām aham pitṝṇām aryamā cāsmi yamaḥ saṃyamatām aham prahlādaś cāsmi daityānāṃ kālaḥ kalayatām aham mṛgāṇāṃ ca mṛgendro 'haṃ vainateyaś ca pakṣiṇām pavanaḥ pavatām asmi rāmaḥ śastrabhṛtām aham jhaṣāṇāṃ makaraś cāsmi srotasām asmi jāhnavī sargāṇām ādir antaś ca madhyaṃ caivāham arjuna adhyātmavidyā vidyānāṃ vādaḥ pravadatām aham akṣarāṇām akāro 'smi dvaṃdvaḥ sāmāsikasya ca aham evākṣayaḥ kālo dhātāhaṃ viśvatomukhaḥ mṛtyuḥ sarvaharaś cāham udbhavaś ca bhaviṣyatām kīrtiḥ śrīr vāk ca nārīṇāṃ smṛtir medhā dhṛtiḥ kṣamā bṛhatsāma tathā sāmnāṃ gāyatrī chandasām aham māsānāṃ mārgaśīrṣo 'ham ṛtūnāṃ kusumākaraḥ dyūtaṃ chalayatām asmi tejas tejasvinām aham jayo 'smi vyavasāyo 'smi sattvaṃ sattvavatām aham vṛṣṇīnāṃ vāsudevo 'smi pāṇḍavānāṃ dhanaṃjayaḥ munīnām apy ahaṃ vyāsaḥ kavīnām uśanā kaviḥ daṇḍo damayatām asmi nītir asmi jigīṣatām maunaṃ caivāsmi guhyānāṃ jñānaṃ jñānavatām aham yac cāpi sarvabhūtānāṃ bījaṃ tad aham arjuna na tad asti vinā yat syān mayā bhūtaṃ carācaram nānto 'sti mama divyānāṃ vibhūtīnāṃ paraṃtapa eṣa tūddeśataḥ prokto vibhūter vistaro mayā yad yad vibhūtimat sattvaṃ śrīmad ūrjitam eva vā tat tad evāvagaccha tvaṃ mama tejoṃśasaṃbhavam atha vā bahunaitena kiṃ jñātena tavārjuna viṣṭabhyāham idaṃ kṛtsnam ekāṃśena sthito jagat arjuna uvāca madanugrahāya paramaṃ guhyam adhyātmasaṃjñitam yat tvayoktaṃ vacas tena moho 'yaṃ vigato mama bhavāpyayau hi bhūtānāṃ śrutau vistaraśo mayā tvattaḥ kamalapatrākṣa māhātmyam api cāvyayam evam etad yathāttha tvam ātmānaṃ parameśvara draṣṭum icchāmi te rūpam aiśvaraṃ puruṣottama manyase yadi tac chakyaṃ mayā draṣṭum iti prabho yogeśvara tato me tvaṃ darśayātmānam avyayam śrībhagavān uvāca paśya me pārtha rūpāṇi śataśo 'tha sahasraśaḥ nānāvidhāni divyāni nānāvarṇākṛtīni ca paśyādityān vasūn rudrān aśvinau marutas tathā bahūny adṛṣṭapūrvāṇi paśyāścaryāṇi bhārata ihaikasthaṃ jagat kṛtsnaṃ paśyādya sacarācaram mama dehe guḍākeśa yac cānyad draṣṭum icchasi na tu māṃ śakyase draṣṭum anenaiva svacakṣuṣā divyaṃ dadāmi te cakṣuḥ paśya me yogam aiśvaram saṃjaya uvāca evam uktvā tato rājan mahāyogeśvaro hariḥ darśayām āsa pārthāya paramaṃ rūpam aiśvaram anekavaktranayanam anekādbhutadarśanam anekadivyābharaṇaṃ divyānekodyatāyudham divyamālyāmbaradharaṃ divyagandhānulepanam sarvāścaryamayaṃ devam anantaṃ viśvatomukham divi sūryasahasrasya bhaved yugapad utthitā yadi bhāḥ sadṛśī sā syād bhāsas tasya mahātmanaḥ tatraikasthaṃ jagat kṛtsnaṃ pravibhaktam anekadhā apaśyad devadevasya śarīre pāṇḍavas tadā tataḥ sa vismayāviṣṭo hṛṣṭaromā dhanaṃjayaḥ praṇamya śirasā devaṃ kṛtāñjalir abhāṣata arjuna uvāca paśyāmi devāṃs tava deva dehe; sarvāṃs tathā bhūtaviśeṣasaṃghān brahmāṇam īśaṃ kamalāsanastham; ṛṣīṃś ca sarvān uragāṃś ca divyān anekabāhūdaravaktranetraṃ; paśyāmi tvā sarvato 'nantarūpam nāntaṃ na madhyaṃ na punas tavādiṃ; paśyāmi viśveśvara viśvarūpa kirīṭinaṃ gadinaṃ cakriṇaṃ ca; tejorāśiṃ sarvato dīptimantam paśyāmi tvāṃ durnirīkṣyaṃ samantād; dīptānalārkadyutim aprameyam tvam akṣaraṃ paramaṃ veditavyaṃ; tvam asya viśvasya paraṃ nidhānam tvam avyayaḥ śāśvatadharmagoptā; sanātanas tvaṃ puruṣo mato me anādimadhyāntam anantavīryam; anantabāhuṃ śaśisūryanetram paśyāmi tvāṃ dīptahutāśavaktraṃ; svatejasā viśvam idaṃ tapantam dyāvāpṛthivyor idam antaraṃ hi; vyāptaṃ tvayaikena diśaś ca sarvāḥ dṛṣṭvādbhutaṃ rūpam idaṃ tavograṃ; lokatrayaṃ pravyathitaṃ mahātman amī hi tvā surasaṃghā viśanti; ke cid bhītāḥ prāñjalayo gṛṇanti svastīty uktvā maharṣisiddhasaṃghāḥ; stuvanti tvāṃ stutibhiḥ puṣkalābhiḥ rudrādityā vasavo ye ca sādhyā; viśve 'śvinau marutaś coṣmapāś ca gandharvayakṣāsurasiddhasaṃghā; vīkṣante tvā vismitāś caiva sarve rūpaṃ mahat te bahuvaktranetraṃ; mahābāho bahubāhūrupādam bahūdaraṃ bahudaṃṣṭrākarālaṃ; dṛṣṭvā lokāḥ pravyathitās tathāham nabhaḥspṛśaṃ dīptam anekavarṇaṃ; vyāttānanaṃ dīptaviśālanetram dṛṣṭvā hi tvāṃ pravyathitāntarātmā; dhṛtiṃ na vindāmi śamaṃ ca viṣṇo daṃṣṭrākarālāni ca te mukhāni; dṛṣṭvaiva kālānalasaṃnibhāni diśo na jāne na labhe ca śarma; prasīda deveśa jagannivāsa amī ca tvāṃ dhṛtarāṣṭrasya putrāḥ; sarve sahaivāvanipālasaṃghaiḥ bhīṣmo droṇaḥ sūtaputras tathāsau; sahāsmadīyair api yodhamukhyaiḥ vaktrāṇi te tvaramāṇā viśanti; daṃṣṭrākarālāni bhayānakāni ke cid vilagnā daśanāntareṣu; saṃdṛśyante cūrṇitair uttamāṅgaiḥ yathā nadīnāṃ bahavo 'mbuvegāḥ; samudram evābhimukhā dravanti tathā tavāmī naralokavīrā; viśanti vaktrāṇy abhivijvalanti yathā pradīptaṃ jvalanaṃ pataṃgā; viśanti nāśāya samṛddhavegāḥ tathaiva nāśāya viśanti lokās; tavāpi vaktrāṇi samṛddhavegāḥ lelihyase grasamānaḥ samantāl; lokān samagrān vadanair jvaladbhiḥ tejobhir āpūrya jagat samagraṃ; bhāsas tavogrāḥ pratapanti viṣṇo ākhyāhi me ko bhavān ugrarūpo; namo 'stu te devavara prasīda vijñātum icchāmi bhavantam ādyaṃ; na hi prajānāmi tava pravṛttim śrībhagavān uvāca kālo 'smi lokakṣayakṛt pravṛddho; lokān samāhartum iha pravṛttaḥ ṛte 'pi tvā na bhaviṣyanti sarve; ye 'vasthitāḥ pratyanīkeṣu yodhāḥ tasmāt tvam uttiṣṭha yaśo labhasva; jitvā śatrūn bhuṅkṣva rājyaṃ samṛddham mayaivaite nihatāḥ pūrvam eva; nimittamātraṃ bhava savyasācin droṇaṃ ca bhīṣmaṃ ca jayadrathaṃ ca; karṇaṃ tathānyān api yodhavīrān mayā hatāṃs tvaṃ jahi mā vyathiṣṭhā; yudhyasva jetāsi raṇe sapatnān saṃjaya uvāca etac chrutvā vacanaṃ keśavasya; kṛtāñjalir vepamānaḥ kirīṭī namaskṛtvā bhūya evāha kṛṣṇaṃ; sagadgadaṃ bhītabhītaḥ praṇamya arjuna uvāca sthāne hṛṣīkeśa tava prakīrtyā; jagat prahṛṣyaty anurajyate ca rakṣāṃsi bhītāni diśo dravanti; sarve namasyanti ca siddhasaṃghāḥ kasmāc ca te na nameran mahātman; garīyase brahmaṇo 'py ādikartre ananta deveśa jagannivāsa; tvam akṣaraṃ sad asat tatparaṃ yat tvam ādidevaḥ puruṣaḥ purāṇas; tvam asya viśvasya paraṃ nidhānam vettāsi vedyaṃ ca paraṃ ca dhāma; tvayā tataṃ viśvam anantarūpa vāyur yamo 'gnir varuṇaḥ śaśāṅkaḥ; prajāpatis tvaṃ prapitāmahaś ca namo namas te 'stu sahasrakṛtvaḥ; punaś ca bhūyo 'pi namo namas te namaḥ purastād atha pṛṣṭhatas te; namo 'stu te sarvata eva sarva anantavīryāmitavikramas tvaṃ; sarvaṃ samāpnoṣi tato 'si sarvaḥ sakheti matvā prasabhaṃ yad uktaṃ; he kṛṣṇa he yādava he sakheti ajānatā mahimānaṃ tavedaṃ; mayā pramādāt praṇayena vāpi yac cāvahāsārtham asatkṛto 'si; vihāraśayyāsanabhojaneṣu eko 'tha vāpy acyuta tatsamakṣaṃ; tat kṣāmaye tvām aham aprameyam pitāsi lokasya carācarasya; tvam asya pūjyaś ca gurur garīyān na tvatsamo 'sty abhyadhikaḥ kuto 'nyo; lokatraye 'py apratimaprabhāva tasmāt praṇamya praṇidhāya kāyaṃ; prasādaye tvām aham īśam īḍyam piteva putrasya sakheva sakhyuḥ; priyaḥ priyāyārhasi deva soḍhum adṛṣṭapūrvaṃ hṛṣito 'smi dṛṣṭvā; bhayena ca pravyathitaṃ mano me tad eva me darśaya deva rūpaṃ; prasīda deveśa jagannivāsa kirīṭinaṃ gadinaṃ cakrahastam; icchāmi tvāṃ draṣṭum ahaṃ tathaiva tenaiva rūpeṇa caturbhujena; sahasrabāho bhava viśvamūrte śrībhagavān uvāca mayā prasannena tavārjunedaṃ; rūpaṃ paraṃ darśitam ātmayogāt tejomayaṃ viśvam anantam ādyaṃ; yan me tvad anyena na dṛṣṭapūrvam na vedayajñādhyayanair na dānair; na ca kriyābhir na tapobhir ugraiḥ evaṃrūpaḥ śakya ahaṃ nṛloke; draṣṭuṃ tvad anyena kurupravīra mā te vyathā mā ca vimūḍhabhāvo; dṛṣṭvā rūpaṃ ghoram īdṛṅ mamedam vyapetabhīḥ prītamanāḥ punas tvaṃ; tad eva me rūpam idaṃ prapaśya saṃjaya uvāca ity arjunaṃ vāsudevas tathoktvā; svakaṃ rūpaṃ darśayām āsa bhūyaḥ āśvāsayām āsa ca bhītam enaṃ; bhūtvā punaḥ saumyavapur mahātmā arjuna uvāca dṛṣṭvedaṃ mānuṣaṃ rūpaṃ tava saumyaṃ janārdana idānīm asmi saṃvṛttaḥ sacetāḥ prakṛtiṃ gataḥ śrībhagavān uvāca sudurdarśam idaṃ rūpaṃ dṛṣṭavān asi yan mama devā apy asya rūpasya nityaṃ darśanakāṅkṣiṇaḥ nāhaṃ vedair na tapasā na dānena na cejyayā śakya evaṃvidho draṣṭuṃ dṛṣṭavān asi māṃ yathā bhaktyā tv ananyayā śakya aham evaṃvidho 'rjuna jñātuṃ draṣṭuṃ ca tattvena praveṣṭuṃ ca paraṃtapa matkarmakṛn matparamo madbhaktaḥ saṅgavarjitaḥ nirvairaḥ sarvabhūteṣu yaḥ sa mām eti pāṇḍava arjuna uvāca evaṃ satatayuktā ye bhaktās tvāṃ paryupāsate ye cāpy akṣaram avyaktaṃ teṣāṃ ke yogavittamāḥ śrībhagavān uvāca mayy āveśya mano ye māṃ nityayuktā upāsate śraddhayā parayopetās te me yuktatamā matāḥ ye tv akṣaram anirdeśyam avyaktaṃ paryupāsate sarvatragam acintyaṃ ca kūṭastham acalaṃ dhruvam saṃniyamyendriyagrāmaṃ sarvatra samabuddhayaḥ te prāpnuvanti mām eva sarvabhūtahite ratāḥ kleśo 'dhikataras teṣām avyaktāsaktacetasām avyaktā hi gatir duḥkhaṃ dehavadbhir avāpyate ye tu sarvāṇi karmāṇi mayi saṃnyasya matparāḥ ananyenaiva yogena māṃ dhyāyanta upāsate teṣām ahaṃ samuddhartā mṛtyusaṃsārasāgarāt bhavāmi nacirāt pārtha mayy āveśitacetasām mayy eva mana ādhatsva mayi buddhiṃ niveśaya nivasiṣyasi mayy eva ata ūrdhvaṃ na saṃśayaḥ atha cittaṃ samādhātuṃ na śaknoṣi mayi sthiram abhyāsayogena tato mām icchāptuṃ dhanaṃjaya abhyāse 'py asamartho 'si matkarmaparamo bhava madartham api karmāṇi kurvan siddhim avāpsyasi athaitad apy aśakto 'si kartuṃ madyogam āśritaḥ sarvakarmaphalatyāgaṃ tataḥ kuru yatātmavān śreyo hi jñānam abhyāsāj jñānād dhyānaṃ viśiṣyate dhyānāt karmaphalatyāgas tyāgāc chāntir anantaram adveṣṭā sarvabhūtānāṃ maitraḥ karuṇa eva ca nirmamo nirahaṃkāraḥ samaduḥkhasukhaḥ kṣamī saṃtuṣṭaḥ satataṃ yogī yatātmā dṛḍhaniścayaḥ mayy arpitamanobuddhir yo madbhaktaḥ sa me priyaḥ yasmān nodvijate loko lokān nodvijate ca yaḥ harṣāmarṣabhayodvegair mukto yaḥ sa ca me priyaḥ anapekṣaḥ śucir dakṣa udāsīno gatavyathaḥ sarvārambhaparityāgī yo madbhaktaḥ sa me priyaḥ yo na hṛṣyati na dveṣṭi na śocati na kāṅkṣati śubhāśubhaparityāgī bhaktimān yaḥ sa me priyaḥ samaḥ śatrau ca mitre ca tathā mānāvamānayoḥ śītoṣṇasukhaduḥkheṣu samaḥ saṅgavivarjitaḥ tulyanindāstutir maunī saṃtuṣṭo yena kena cit aniketaḥ sthiramatir bhaktimān me priyo naraḥ ye tu dharmyāmṛtam idaṃ yathoktaṃ paryupāsate śraddadhānā matparamā bhaktās te 'tīva me priyāḥ śrībhagavān uvāca idaṃ śarīraṃ kaunteya kṣetram ity abhidhīyate etad yo vetti taṃ prāhuḥ kṣetrajña iti tadvidaḥ kṣetrajñaṃ cāpi māṃ viddhi sarvakṣetreṣu bhārata kṣetrakṣetrajñayor jñānaṃ yat taj jñānaṃ mataṃ mama tat kṣetraṃ yac ca yādṛk ca yadvikāri yataś ca yat sa ca yo yatprabhāvaś ca tat samāsena me śṛṇu ṛṣibhir bahudhā gītaṃ chandobhir vividhaiḥ pṛthak brahmasūtrapadaiś caiva hetumadbhir viniścitaiḥ mahābhūtāny ahaṃkāro buddhir avyaktam eva ca indriyāṇi daśaikaṃ ca pañca cendriyagocarāḥ icchā dveṣaḥ sukhaṃ duḥkhaṃ saṃghātaś cetanā dhṛtiḥ etat kṣetraṃ samāsena savikāram udāhṛtam amānitvam adambhitvam ahiṃsā kṣāntir ārjavam ācāryopāsanaṃ śaucaṃ sthairyam ātmavinigrahaḥ indriyārtheṣu vairāgyam anahaṃkāra eva ca janmamṛtyujarāvyādhiduḥkhadoṣānudarśanam asaktir anabhiṣvaṅgaḥ putradāragṛhādiṣu nityaṃ ca samacittatvam iṣṭāniṣṭopapattiṣu mayi cānanyayogena bhaktir avyabhicāriṇī viviktadeśasevitvam aratir janasaṃsadi adhyātmajñānanityatvaṃ tattvajñānārthadarśanam etaj jñānam iti proktam ajñānaṃ yad ato 'nyathā jñeyaṃ yat tat pravakṣyāmi yaj jñātvāmṛtam aśnute anādimat paraṃ brahma na sat tan nāsad ucyate sarvataḥpāṇipādaṃ tat sarvatokṣiśiromukham sarvataḥśrutimal loke sarvam āvṛtya tiṣṭhati sarvendriyaguṇābhāsaṃ sarvendriyavivarjitam asaktaṃ sarvabhṛc caiva nirguṇaṃ guṇabhoktṛ ca bahir antaś ca bhūtānām acaraṃ caram eva ca sūkṣmatvāt tad avijñeyaṃ dūrasthaṃ cāntike ca tat avibhaktaṃ ca bhūteṣu vibhaktam iva ca sthitam bhūtabhartṛ ca taj jñeyaṃ grasiṣṇu prabhaviṣṇu ca jyotiṣām api taj jyotis tamasaḥ param ucyate jñānaṃ jñeyaṃ jñānagamyaṃ hṛdi sarvasya viṣṭhitam iti kṣetraṃ tathā jñānaṃ jñeyaṃ coktaṃ samāsataḥ madbhakta etad vijñāya madbhāvāyopapadyate prakṛtiṃ puruṣaṃ caiva viddhy anādī ubhāv api vikārāṃś ca guṇāṃś caiva viddhi prakṛtisaṃbhavān kāryakāraṇakartṛtve hetuḥ prakṛtir ucyate puruṣaḥ sukhaduḥkhānāṃ bhoktṛtve hetur ucyate puruṣaḥ prakṛtistho hi bhuṅkte prakṛtijān guṇān kāraṇaṃ guṇasaṅgo 'sya sadasadyonijanmasu upadraṣṭānumantā ca bhartā bhoktā maheśvaraḥ paramātmeti cāpy ukto dehe 'smin puruṣaḥ paraḥ ya evaṃ vetti puruṣaṃ prakṛtiṃ ca guṇaiḥ saha sarvathā vartamāno 'pi na sa bhūyo 'bhijāyate dhyānenātmani paśyanti ke cid ātmānam ātmanā anye sāṃkhyena yogena karmayogena cāpare anye tv evam ajānantaḥ śrutvānyebhya upāsate te 'pi cātitaranty eva mṛtyuṃ śrutiparāyaṇāḥ yāvat saṃjāyate kiṃ cit sattvaṃ sthāvarajaṅgamam kṣetrakṣetrajñasaṃyogāt tad viddhi bharatarṣabha samaṃ sarveṣu bhūteṣu tiṣṭhantaṃ parameśvaram vinaśyatsv avinaśyantaṃ yaḥ paśyati sa paśyati samaṃ paśyan hi sarvatra samavasthitam īśvaram na hinasty ātmanātmānaṃ tato yāti parāṃ gatim prakṛtyaiva ca karmāṇi kriyamāṇāni sarvaśaḥ yaḥ paśyati tathātmānam akartāraṃ sa paśyati yadā bhūtapṛthagbhāvam ekastham anupaśyati tata eva ca vistāraṃ brahma saṃpadyate tadā anāditvān nirguṇatvāt paramātmāyam avyayaḥ śarīrastho 'pi kaunteya na karoti na lipyate yathā sarvagataṃ saukṣmyād ākāśaṃ nopalipyate sarvatrāvasthito dehe tathātmā nopalipyate yathā prakāśayaty ekaḥ kṛtsnaṃ lokam imaṃ raviḥ kṣetraṃ kṣetrī tathā kṛtsnaṃ prakāśayati bhārata kṣetrakṣetrajñayor evam antaraṃ jñānacakṣuṣā bhūtaprakṛtimokṣaṃ ca ye vidur yānti te param śrībhagavān uvāca paraṃ bhūyaḥ pravakṣyāmi jñānānāṃ jñānam uttamam yaj jñātvā munayaḥ sarve parāṃ siddhim ito gatāḥ idaṃ jñānam upāśritya mama sādharmyam āgatāḥ sarge 'pi nopajāyante pralaye na vyathanti ca mama yonir mahad brahma tasmin garbhaṃ dadhāmy aham saṃbhavaḥ sarvabhūtānāṃ tato bhavati bhārata sarvayoniṣu kaunteya mūrtayaḥ saṃbhavanti yāḥ tāsāṃ brahma mahad yonir ahaṃ bījapradaḥ pitā sattvaṃ rajas tama iti guṇāḥ prakṛtisaṃbhavāḥ nibadhnanti mahābāho dehe dehinam avyayam tatra sattvaṃ nirmalatvāt prakāśakam anāmayam sukhasaṅgena badhnāti jñānasaṅgena cānagha rajo rāgātmakaṃ viddhi tṛṣṇāsaṅgasamudbhavam tan nibadhnāti kaunteya karmasaṅgena dehinam tamas tv ajñānajaṃ viddhi mohanaṃ sarvadehinām pramādālasyanidrābhis tan nibadhnāti bhārata sattvaṃ sukhe sañjayati rajaḥ karmaṇi bhārata jñānam āvṛtya tu tamaḥ pramāde sañjayaty uta rajas tamaś cābhibhūya sattvaṃ bhavati bhārata rajaḥ sattvaṃ tamaś caiva tamaḥ sattvaṃ rajas tathā sarvadvāreṣu dehe 'smin prakāśa upajāyate jñānaṃ yadā tadā vidyād vivṛddhaṃ sattvam ity uta lobhaḥ pravṛttir ārambhaḥ karmaṇām aśamaḥ spṛhā rajasy etāni jāyante vivṛddhe bharatarṣabha aprakāśo 'pravṛttiś ca pramādo moha eva ca tamasy etāni jāyante vivṛddhe kurunandana yadā sattve pravṛddhe tu pralayaṃ yāti dehabhṛt tadottamavidāṃ lokān amalān pratipadyate rajasi pralayaṃ gatvā karmasaṅgiṣu jāyate tathā pralīnas tamasi mūḍhayoniṣu jāyate karmaṇaḥ sukṛtasyāhuḥ sāttvikaṃ nirmalaṃ phalam rajasas tu phalaṃ duḥkham ajñānaṃ tamasaḥ phalam sattvāt saṃjāyate jñānaṃ rajaso lobha eva ca pramādamohau tamaso bhavato 'jñānam eva ca ūrdhvaṃ gacchanti sattvasthā madhye tiṣṭhanti rājasāḥ jaghanyaguṇavṛttasthā adho gacchanti tāmasāḥ nānyaṃ guṇebhyaḥ kartāraṃ yadā draṣṭānupaśyati guṇebhyaś ca paraṃ vetti madbhāvaṃ so 'dhigacchati guṇān etān atītya trīn dehī dehasamudbhavān janmamṛtyujarāduḥkhair vimukto 'mṛtam aśnute arjuna uvāca kair liṅgais trīn guṇān etān atīto bhavati prabho kimācāraḥ kathaṃ caitāṃs trīn guṇān ativartate śrībhagavān uvāca prakāśaṃ ca pravṛttiṃ ca moham eva ca pāṇḍava na dveṣṭi saṃpravṛttāni na nivṛttāni kāṅkṣati udāsīnavad āsīno guṇair yo na vicālyate guṇā vartanta ity eva yo 'vatiṣṭhati neṅgate samaduḥkhasukhaḥ svasthaḥ samaloṣṭāśmakāñcanaḥ tulyapriyāpriyo dhīras tulyanindātmasaṃstutiḥ mānāvamānayos tulyas tulyo mitrāripakṣayoḥ sarvārambhaparityāgī guṇātītaḥ sa ucyate māṃ ca yo 'vyabhicāreṇa bhaktiyogena sevate sa guṇān samatītyaitān brahmabhūyāya kalpate brahmaṇo hi pratiṣṭhāham amṛtasyāvyayasya ca śāśvatasya ca dharmasya sukhasyaikāntikasya ca śrībhagavān uvāca ūrdhvamūlam adhaḥśākham aśvatthaṃ prāhur avyayam chandāṃsi yasya parṇāni yas taṃ veda sa vedavit adhaś cordhvaṃ prasṛtās tasya śākhā; guṇapravṛddhā viṣayapravālāḥ adhaś ca mūlāny anusaṃtatāni; karmānubandhīni manuṣyaloke na rūpam asyeha tathopalabhyate; nānto na cādir na ca saṃpratiṣṭhā aśvattham enaṃ suvirūḍhamūlam; asaṅgaśastreṇa dṛḍhena chittvā tataḥ padaṃ tatparimārgitavyaṃ; yasmin gatā na nivartanti bhūyaḥ tam eva cādyaṃ puruṣaṃ prapadye; yataḥ pravṛttiḥ prasṛtā purāṇī nirmānamohā jitasaṅgadoṣā; adhyātmanityā vinivṛttakāmāḥ dvaṃdvair vimuktāḥ sukhaduḥkhasaṃjñair; gacchanty amūḍhāḥ padam avyayaṃ tat na tad bhāsayate sūryo na śaśāṅko na pāvakaḥ yad gatvā na nivartante tad dhāma paramaṃ mama mamaivāṃśo jīvaloke jīvabhūtaḥ sanātanaḥ manaḥṣaṣṭhānīndriyāṇi prakṛtisthāni karṣati śarīraṃ yad avāpnoti yac cāpy utkrāmatīśvaraḥ gṛhītvaitāni saṃyāti vāyur gandhān ivāśayāt śrotraṃ cakṣuḥ sparśanaṃ ca rasanaṃ ghrāṇam eva ca adhiṣṭhāya manaś cāyaṃ viṣayān upasevate utkrāmantaṃ sthitaṃ vāpi bhuñjānaṃ vā guṇānvitam vimūḍhā nānupaśyanti paśyanti jñānacakṣuṣaḥ yatanto yoginaś cainaṃ paśyanty ātmany avasthitam yatanto 'py akṛtātmāno nainaṃ paśyanty acetasaḥ yad ādityagataṃ tejo jagad bhāsayate 'khilam yac candramasi yac cāgnau tat tejo viddhi māmakam gām āviśya ca bhūtāni dhārayāmy aham ojasā puṣṇāmi cauṣadhīḥ sarvāḥ somo bhūtvā rasātmakaḥ ahaṃ vaiśvānaro bhūtvā prāṇināṃ deham āśritaḥ prāṇāpānasamāyuktaḥ pacāmy annaṃ caturvidham sarvasya cāhaṃ hṛdi saṃniviṣṭo; mattaḥ smṛtir jñānam apohanaṃ ca vedaiś ca sarvair aham eva vedyo; vedāntakṛd vedavid eva cāham dvāv imau puruṣau loke kṣaraś cākṣara eva ca kṣaraḥ sarvāṇi bhūtāni kūṭastho 'kṣara ucyate uttamaḥ puruṣas tv anyaḥ paramātmety udāhṛtaḥ yo lokatrayam āviśya bibharty avyaya īśvaraḥ yasmāt kṣaram atīto 'ham akṣarād api cottamaḥ ato 'smi loke vede ca prathitaḥ puruṣottamaḥ yo mām evam asaṃmūḍho jānāti puruṣottamam sa sarvavid bhajati māṃ sarvabhāvena bhārata iti guhyatamaṃ śāstram idam uktaṃ mayānagha etad buddhvā buddhimān syāt kṛtakṛtyaś ca bhārata śrībhagavān uvāca abhayaṃ sattvasaṃśuddhir jñānayogavyavasthitiḥ dānaṃ damaś ca yajñaś ca svādhyāyas tapa ārjavam ahiṃsā satyam akrodhas tyāgaḥ śāntir apaiśunam dayā bhūteṣv aloluptvaṃ mārdavaṃ hrīr acāpalam tejaḥ kṣamā dhṛtiḥ śaucam adroho nātimānitā bhavanti saṃpadaṃ daivīm abhijātasya bhārata dambho darpo 'timānaś ca krodhaḥ pāruṣyam eva ca ajñānaṃ cābhijātasya pārtha saṃpadam āsurīm daivī saṃpad vimokṣāya nibandhāyāsurī matā mā śucaḥ saṃpadaṃ daivīm abhijāto 'si pāṇḍava dvau bhūtasargau loke 'smin daiva āsura eva ca daivo vistaraśaḥ prokta āsuraṃ pārtha me śṛṇu pravṛttiṃ ca nivṛttiṃ ca janā na vidur āsurāḥ na śaucaṃ nāpi cācāro na satyaṃ teṣu vidyate asatyam apratiṣṭhaṃ te jagad āhur anīśvaram aparasparasaṃbhūtaṃ kim anyat kāmahaitukam etāṃ dṛṣṭim avaṣṭabhya naṣṭātmāno 'lpabuddhayaḥ prabhavanty ugrakarmāṇaḥ kṣayāya jagato 'hitāḥ kāmam āśritya duṣpūraṃ dambhamānamadānvitāḥ mohād gṛhītvāsadgrāhān pravartante 'śucivratāḥ cintām aparimeyāṃ ca pralayāntām upāśritāḥ kāmopabhogaparamā etāvad iti niścitāḥ āśāpāśaśatair baddhāḥ kāmakrodhaparāyaṇāḥ īhante kāmabhogārtham anyāyenārthasaṃcayān idam adya mayā labdham idaṃ prāpsye manoratham idam astīdam api me bhaviṣyati punar dhanam asau mayā hataḥ śatrur haniṣye cāparān api īśvaro 'ham ahaṃ bhogī siddho 'haṃ balavān sukhī āḍhyo 'bhijanavān asmi ko 'nyo 'sti sadṛśo mayā yakṣye dāsyāmi modiṣya ity ajñānavimohitāḥ anekacittavibhrāntā mohajālasamāvṛtāḥ prasaktāḥ kāmabhogeṣu patanti narake 'śucau ātmasaṃbhāvitāḥ stabdhā dhanamānamadānvitāḥ yajante nāmayajñais te dambhenāvidhipūrvakam ahaṃkāraṃ balaṃ darpaṃ kāmaṃ krodhaṃ ca saṃśritāḥ mām ātmaparadeheṣu pradviṣanto 'bhyasūyakāḥ tān ahaṃ dviṣataḥ krūrān saṃsāreṣu narādhamān kṣipāmy ajasram aśubhān āsurīṣv eva yoniṣu āsurīṃ yonim āpannā mūḍhā janmani janmani mām aprāpyaiva kaunteya tato yānty adhamāṃ gatim trividhaṃ narakasyedaṃ dvāraṃ nāśanam ātmanaḥ kāmaḥ krodhas tathā lobhas tasmād etat trayaṃ tyajet etair vimuktaḥ kaunteya tamodvārais tribhir naraḥ ācaraty ātmanaḥ śreyas tato yāti parāṃ gatim yaḥ śāstravidhim utsṛjya vartate kāmakārataḥ na sa siddhim avāpnoti na sukhaṃ na parāṃ gatim tasmāc chāstraṃ pramāṇaṃ te kāryākāryavyavasthitau jñātvā śāstravidhānoktaṃ karma kartum ihārhasi arjuna uvāca ye śāstravidhim utsṛjya yajante śraddhayānvitāḥ teṣāṃ niṣṭhā tu kā kṛṣṇa sattvam āho rajas tamaḥ śrībhagavān uvāca trividhā bhavati śraddhā dehināṃ sā svabhāvajā sāttvikī rājasī caiva tāmasī ceti tāṃ śṛṇu sattvānurūpā sarvasya śraddhā bhavati bhārata śraddhāmayo 'yaṃ puruṣo yo yacchraddhaḥ sa eva saḥ yajante sāttvikā devān yakṣarakṣāṃsi rājasāḥ pretān bhūtagaṇāṃś cānye yajante tāmasā janāḥ aśāstravihitaṃ ghoraṃ tapyante ye tapo janāḥ dambhāhaṃkārasaṃyuktāḥ kāmarāgabalānvitāḥ karśayantaḥ śarīrasthaṃ bhūtagrāmam acetasaḥ māṃ caivāntaḥśarīrasthaṃ tān viddhy āsuraniścayān āhāras tv api sarvasya trividho bhavati priyaḥ yajñas tapas tathā dānaṃ teṣāṃ bhedam imaṃ śṛṇu āyuḥsattvabalārogyasukhaprītivivardhanāḥ rasyāḥ snigdhāḥ sthirā hṛdyā āhārāḥ sāttvikapriyāḥ kaṭvamlalavaṇātyuṣṇatīkṣṇarūkṣavidāhinaḥ āhārā rājasasyeṣṭā duḥkhaśokāmayapradāḥ yātayāmaṃ gatarasaṃ pūti paryuṣitaṃ ca yat ucchiṣṭam api cāmedhyaṃ bhojanaṃ tāmasapriyam aphalākāṅkṣibhir yajño vidhidṛṣṭo ya ijyate yaṣṭavyam eveti manaḥ samādhāya sa sāttvikaḥ abhisaṃdhāya tu phalaṃ dambhārtham api caiva yat ijyate bharataśreṣṭha taṃ yajñaṃ viddhi rājasam vidhihīnam asṛṣṭānnaṃ mantrahīnam adakṣiṇam śraddhāvirahitaṃ yajñaṃ tāmasaṃ paricakṣate devadvijaguruprājñapūjanaṃ śaucam ārjavam brahmacaryam ahiṃsā ca śārīraṃ tapa ucyate anudvegakaraṃ vākyaṃ satyaṃ priyahitaṃ ca yat svādhyāyābhyasanaṃ caiva vāṅmayaṃ tapa ucyate manaḥprasādaḥ saumyatvaṃ maunam ātmavinigrahaḥ bhāvasaṃśuddhir ity etat tapo mānasam ucyate śraddhayā parayā taptaṃ tapas tat trividhaṃ naraiḥ aphalākāṅkṣibhir yuktaiḥ sāttvikaṃ paricakṣate satkāramānapūjārthaṃ tapo dambhena caiva yat kriyate tad iha proktaṃ rājasaṃ calam adhruvam mūḍhagrāheṇātmano yat pīḍayā kriyate tapaḥ parasyotsādanārthaṃ vā tat tāmasam udāhṛtam dātavyam iti yad dānaṃ dīyate 'nupakāriṇe deśe kāle ca pātre ca tad dānaṃ sāttvikaṃ smṛtam yat tu pratyupakārārthaṃ phalam uddiśya vā punaḥ dīyate ca parikliṣṭaṃ tad dānaṃ rājasaṃ smṛtam adeśakāle yad dānam apātrebhyaś ca dīyate asatkṛtam avajñātaṃ tat tāmasam udāhṛtam oṃ tat sad iti nirdeśo brahmaṇas trividhaḥ smṛtaḥ brāhmaṇās tena vedāś ca yajñāś ca vihitāḥ purā tasmād om ity udāhṛtya yajñadānatapaḥkriyāḥ pravartante vidhānoktāḥ satataṃ brahmavādinām tad ity anabhisaṃdhāya phalaṃ yajñatapaḥkriyāḥ dānakriyāś ca vividhāḥ kriyante mokṣakāṅkṣibhiḥ sadbhāve sādhubhāve ca sad ity etat prayujyate praśaste karmaṇi tathā sacchabdaḥ pārtha yujyate yajñe tapasi dāne ca sthitiḥ sad iti cocyate karma caiva tadarthīyaṃ sad ity evābhidhīyate aśraddhayā hutaṃ dattaṃ tapas taptaṃ kṛtaṃ ca yat asad ity ucyate pārtha na ca tat pretya no iha arjuna uvāca saṃnyāsasya mahābāho tattvam icchāmi veditum tyāgasya ca hṛṣīkeśa pṛthak keśiniṣūdana śrībhagavān uvāca kāmyānāṃ karmaṇāṃ nyāsaṃ saṃnyāsaṃ kavayo viduḥ sarvakarmaphalatyāgaṃ prāhus tyāgaṃ vicakṣaṇāḥ tyājyaṃ doṣavad ity eke karma prāhur manīṣiṇaḥ yajñadānatapaḥkarma na tyājyam iti cāpare niścayaṃ śṛṇu me tatra tyāge bharatasattama tyāgo hi puruṣavyāghra trividhaḥ saṃprakīrtitaḥ yajñadānatapaḥkarma na tyājyaṃ kāryam eva tat yajño dānaṃ tapaś caiva pāvanāni manīṣiṇām etāny api tu karmāṇi saṅgaṃ tyaktvā phalāni ca kartavyānīti me pārtha niścitaṃ matam uttamam niyatasya tu saṃnyāsaḥ karmaṇo nopapadyate mohāt tasya parityāgas tāmasaḥ parikīrtitaḥ duḥkham ity eva yat karma kāyakleśabhayāt tyajet sa kṛtvā rājasaṃ tyāgaṃ naiva tyāgaphalaṃ labhet kāryam ity eva yat karma niyataṃ kriyate 'rjuna saṅgaṃ tyaktvā phalaṃ caiva sa tyāgaḥ sāttviko mataḥ na dveṣṭy akuśalaṃ karma kuśale nānuṣajjate tyāgī sattvasamāviṣṭo medhāvī chinnasaṃśayaḥ na hi dehabhṛtā śakyaṃ tyaktuṃ karmāṇy aśeṣataḥ yas tu karmaphalatyāgī sa tyāgīty abhidhīyate aniṣṭam iṣṭaṃ miśraṃ ca trividhaṃ karmaṇaḥ phalam bhavaty atyāgināṃ pretya na tu saṃnyāsināṃ kva cit pañcaitāni mahābāho kāraṇāni nibodha me sāṃkhye kṛtānte proktāni siddhaye sarvakarmaṇām adhiṣṭhānaṃ tathā kartā karaṇaṃ ca pṛthagvidham vividhāś ca pṛthakceṣṭā daivaṃ caivātra pañcamam śarīravāṅmanobhir yat karma prārabhate naraḥ nyāyyaṃ vā viparītaṃ vā pañcaite tasya hetavaḥ tatraivaṃ sati kartāram ātmānaṃ kevalaṃ tu yaḥ paśyaty akṛtabuddhitvān na sa paśyati durmatiḥ yasya nāhaṃkṛto bhāvo buddhir yasya na lipyate hatvāpi sa imāṃl lokān na hanti na nibadhyate jñānaṃ jñeyaṃ parijñātā trividhā karmacodanā karaṇaṃ karma karteti trividhaḥ karmasaṃgrahaḥ jñānaṃ karma ca kartā ca tridhaiva guṇabhedataḥ procyate guṇasaṃkhyāne yathāvac chṛṇu tāny api sarvabhūteṣu yenaikaṃ bhāvam avyayam īkṣate avibhaktaṃ vibhakteṣu taj jñānaṃ viddhi sāttvikam pṛthaktvena tu yaj jñānaṃ nānābhāvān pṛthagvidhān vetti sarveṣu bhūteṣu taj jñānaṃ viddhi rājasam yat tu kṛtsnavad ekasmin kārye saktam ahaitukam atattvārthavad alpaṃ ca tat tāmasam udāhṛtam niyataṃ saṅgarahitam arāgadveṣataḥ kṛtam aphalaprepsunā karma yat tat sāttvikam ucyate yat tu kāmepsunā karma sāhaṃkāreṇa vā punaḥ kriyate bahulāyāsaṃ tad rājasam udāhṛtam anubandhaṃ kṣayaṃ hiṃsām anapekṣya ca pauruṣam mohād ārabhyate karma yat tat tāmasam ucyate muktasaṅgo 'nahaṃvādī dhṛtyutsāhasamanvitaḥ siddhyasiddhyor nirvikāraḥ kartā sāttvika ucyate rāgī karmaphalaprepsur lubdho hiṃsātmako 'śuciḥ harṣaśokānvitaḥ kartā rājasaḥ parikīrtitaḥ ayuktaḥ prākṛtaḥ stabdhaḥ śaṭho naikṛtiko 'lasaḥ viṣādī dīrghasūtrī ca kartā tāmasa ucyate buddher bhedaṃ dhṛteś caiva guṇatas trividhaṃ śṛṇu procyamānam aśeṣeṇa pṛthaktvena dhanaṃjaya pravṛttiṃ ca nivṛttiṃ ca kāryākārye bhayābhaye bandhaṃ mokṣaṃ ca yā vetti buddhiḥ sā pārtha sāttvikī yayā dharmam adharmaṃ ca kāryaṃ cākāryam eva ca ayathāvat prajānāti buddhiḥ sā pārtha rājasī adharmaṃ dharmam iti yā manyate tamasāvṛtā sarvārthān viparītāṃś ca buddhiḥ sā pārtha tāmasī dhṛtyā yayā dhārayate manaḥprāṇendriyakriyāḥ yogenāvyabhicāriṇyā dhṛtiḥ sā pārtha sāttvikī yayā tu dharmakāmārthān dhṛtyā dhārayate 'rjuna prasaṅgena phalākāṅkṣī dhṛtiḥ sā pārtha rājasī yayā svapnaṃ bhayaṃ śokaṃ viṣādaṃ madam eva ca na vimuñcati durmedhā dhṛtiḥ sā pārtha tāmasī sukhaṃ tv idānīṃ trividhaṃ śṛṇu me bharatarṣabha abhyāsād ramate yatra duḥkhāntaṃ ca nigacchati yat tadagre viṣam iva pariṇāme 'mṛtopamam tat sukhaṃ sāttvikaṃ proktam ātmabuddhiprasādajam viṣayendriyasaṃyogād yat tadagre 'mṛtopamam pariṇāme viṣam iva tat sukhaṃ rājasaṃ smṛtam yad agre cānubandhe ca sukhaṃ mohanam ātmanaḥ nidrālasyapramādotthaṃ tat tāmasam udāhṛtam na tad asti pṛthivyāṃ vā divi deveṣu vā punaḥ sattvaṃ prakṛtijair muktaṃ yad ebhiḥ syāt tribhir guṇaiḥ brāhmaṇakṣatriyaviśāṃ śūdrāṇāṃ ca paraṃtapa karmāṇi pravibhaktāni svabhāvaprabhavair guṇaiḥ śamo damas tapaḥ śaucaṃ kṣāntir ārjavam eva ca jñānaṃ vijñānam āstikyaṃ brahmakarma svabhāvajam śauryaṃ tejo dhṛtir dākṣyaṃ yuddhe cāpy apalāyanam dānam īśvarabhāvaś ca kṣatrakarma svabhāvajam kṛṣigorakṣyavāṇijyaṃ vaiśyakarma svabhāvajam paricaryātmakaṃ karma śūdrasyāpi svabhāvajam sve sve karmaṇy abhirataḥ saṃsiddhiṃ labhate naraḥ svakarmanirataḥ siddhiṃ yathā vindati tac chṛṇu yataḥ pravṛttir bhūtānāṃ yena sarvam idaṃ tatam svakarmaṇā tam abhyarcya siddhiṃ vindati mānavaḥ śreyān svadharmo viguṇaḥ paradharmāt svanuṣṭhitāt svabhāvaniyataṃ karma kurvan nāpnoti kilbiṣam sahajaṃ karma kaunteya sadoṣam api na tyajet sarvārambhā hi doṣeṇa dhūmenāgnir ivāvṛtāḥ asaktabuddhiḥ sarvatra jitātmā vigataspṛhaḥ naiṣkarmyasiddhiṃ paramāṃ saṃnyāsenādhigacchati siddhiṃ prāpto yathā brahma tathāpnoti nibodha me samāsenaiva kaunteya niṣṭhā jñānasya yā parā buddhyā viśuddhayā yukto dhṛtyātmānaṃ niyamya ca śabdādīn viṣayāṃs tyaktvā rāgadveṣau vyudasya ca viviktasevī laghvāśī yatavākkāyamānasaḥ dhyānayogaparo nityaṃ vairāgyaṃ samupāśritaḥ ahaṃkāraṃ balaṃ darpaṃ kāmaṃ krodhaṃ parigraham vimucya nirmamaḥ śānto brahmabhūyāya kalpate brahmabhūtaḥ prasannātmā na śocati na kāṅkṣati samaḥ sarveṣu bhūteṣu madbhaktiṃ labhate parām bhaktyā mām abhijānāti yāvān yaś cāsmi tattvataḥ tato māṃ tattvato jñātvā viśate tadanantaram sarvakarmāṇy api sadā kurvāṇo madvyapāśrayaḥ matprasādād avāpnoti śāśvataṃ padam avyayam cetasā sarvakarmāṇi mayi saṃnyasya matparaḥ buddhiyogam upāśritya maccittaḥ satataṃ bhava maccittaḥ sarvadurgāṇi matprasādāt tariṣyasi atha cet tvam ahaṃkārān na śroṣyasi vinaṅkṣyasi yad ahaṃkāram āśritya na yotsya iti manyase mithyaiṣa vyavasāyas te prakṛtis tvāṃ niyokṣyati svabhāvajena kaunteya nibaddhaḥ svena karmaṇā kartuṃ necchasi yan mohāt kariṣyasy avaśo 'pi tat īśvaraḥ sarvabhūtānāṃ hṛddeśe 'rjuna tiṣṭhati bhrāmayan sarvabhūtāni yantrārūḍhāni māyayā tam eva śaraṇaṃ gaccha sarvabhāvena bhārata tatprasādāt parāṃ śāntiṃ sthānaṃ prāpsyasi śāśvatam iti te jñānam ākhyātaṃ guhyād guhyataraṃ mayā vimṛśyaitad aśeṣeṇa yathecchasi tathā kuru sarvaguhyatamaṃ bhūyaḥ śṛṇu me paramaṃ vacaḥ iṣṭo 'si me dṛḍham iti tato vakṣyāmi te hitam manmanā bhava madbhakto madyājī māṃ namaskuru mām evaiṣyasi satyaṃ te pratijāne priyo 'si me sarvadharmān parityajya mām ekaṃ śaraṇaṃ vraja ahaṃ tvā sarvapāpebhyo mokṣayiṣyāmi mā śucaḥ idaṃ te nātapaskāya nābhaktāya kadā cana na cāśuśrūṣave vācyaṃ na ca māṃ yo 'bhyasūyati ya idaṃ paramaṃ guhyaṃ madbhakteṣv abhidhāsyati bhaktiṃ mayi parāṃ kṛtvā mām evaiṣyaty asaṃśayaḥ na ca tasmān manuṣyeṣu kaś cin me priyakṛttamaḥ bhavitā na ca me tasmād anyaḥ priyataro bhuvi adhyeṣyate ca ya imaṃ dharmyaṃ saṃvādam āvayoḥ jñānayajñena tenāham iṣṭaḥ syām iti me matiḥ śraddhāvān anasūyaś ca śṛṇuyād api yo naraḥ so 'pi muktaḥ śubhāṃl lokān prāpnuyāt puṇyakarmaṇām kaccid etac chrutaṃ pārtha tvayaikāgreṇa cetasā kaccid ajñānasaṃmohaḥ pranaṣṭas te dhanaṃjaya arjuna uvāca naṣṭo mohaḥ smṛtir labdhā tvatprasādān mayācyuta sthito 'smi gatasaṃdehaḥ kariṣye vacanaṃ tava saṃjaya uvāca ity ahaṃ vāsudevasya pārthasya ca mahātmanaḥ saṃvādam imam aśrauṣam adbhutaṃ romaharṣaṇam vyāsaprasādāc chrutavān etad guhyam ahaṃ param yogaṃ yogeśvarāt kṛṣṇāt sākṣāt kathayataḥ svayam rājan saṃsmṛtya saṃsmṛtya saṃvādam imam adbhutam keśavārjunayoḥ puṇyaṃ hṛṣyāmi ca muhur muhuḥ tac ca saṃsmṛtya saṃsmṛtya rūpam atyadbhutaṃ hareḥ vismayo me mahān rājan hṛṣyāmi ca punaḥ punaḥ yatra yogeśvaraḥ kṛṣṇo yatra pārtho dhanurdharaḥ tatra śrīr vijayo bhūtir dhruvā nītir matir mama Lingua-Translit-0.29/t/33_tr_BGN-PCGN_RUS_Strict.t0000644000175000017500000001661713100123740020631 0ustar alinkealinke# =========================================================================== # BGN/PCGN Romanization System for Russian (Strict Variant) # for Lingua::Translit Perl Module # https://github.com/ndlecic/bgn-pcgn_rus # # Copyright 2017 Nikola D. Lečić # =========================================================================== # # This implementation of BGN/PCGN romanization system comes in two # variants: # - strict # - standard # Please see respective XML files for explanations. use strict; use utf8; use Test::More tests => 7; use Lingua::Translit; my $name = "BGN/PCGN RUS Strict"; my $reversible = 0; my $input = "Все люди рождаются свободными и равными в " . "своём достоинстве и правах. Они наделены разумом и " . "совестью и должны поступать в отношении друг " . "друга в духе братства."; my $output_ok = "Vse lyudi rozhdayut·sya svobodnymi i ravnymi v " . "svoyëm dostoinstve i pravakh. Oni nadeleny razumom i " . "sovest'yu i dolzhny postupat' v otnoshenii drug " . "druga v dukhe brat·stva."; my $context = "акце́нт, Елисеев, Алетейя, Мейер, Кайафа, " . "Йадав, её; Её, подъём, Йэн, йэн, додекаэдр, " . "ещё, чьё, интеръекционный, выудить, Майя, " . "9-е мая, фойе, Фейербах, Чистые пруды, " . "Достоевский, Толстой, Горкий, Аркадий, Белый, " . "Юрий, Сергей, Хрущёв, Горбачёв"; my $context_ok = "aktsent, Yeliseyev, Aleteyya, Meyyer, Kay·afa, " . "Y·adav, yeyë; Yeyë, pod''yëm, Y·en, y·en, dodekaedr, " . "yeshchë, ch'yë, inter''yektsionnyy, vy·udit', Mayya, " . "9-ye maya, foyye, Feyyerbakh, Chistyye prudy, " . "Dostoyevskiy, Tolstoy, Gorkiy, Arkadiy, Belyy, " . "Yuriy, Sergey, Khrushchëv, Gorbachëv"; my $abbr = "ВЦИОМ, РАНХиГС, НЭП, РОССПЭН, АЭС, РЖД, СПбГУ, " . "ЮАР, ЮФУ, ЮУрГУ, РостГЭУ-РИНХ, " . "Ю. Я. Щербаков и Е. Е. Ёлкина"; my $abbr_ok = "VTsIOM, RANKhiGS, N·EP, ROSSP·EN, AES, RZhD, SPbGU, " . "YuAR, YuFU, YuUrGU, RostG·EU-RINKh, " . "Yu. Ya. Shcherbakov i Ye. Ye. Yëlkina"; my $excl = "Ыыыыыы! ЫЫЫЫЫЫ! Ай-ай-ай. Ээээээххх... " . "Жжжжжж! Йех-ай-яй! Ё-моё..."; my $excl_ok = "Y·y·y·y·y·y! Y·Y·Y·Y·Y·Y! Ay-ay-ay. Eeeeeekhkhkh... " . "Zhzhzhzhzhzh! Yyekh-ay-yay! Yë-moyë..."; # Geographic names (geo and nonrusgeo tests) are taken from # https://en.wikipedia.org/wiki/BGN/PCGN_romanization_of_Russian # https://en.wikipedia.org/wiki/Wikipedia:Romanization_of_Russian my $geo = "Азов, Тамбов, Барнаул, Кубань, Владимир, " . "Ульяновск, Грозный, Волгодонск, Дзержинский, " . "Нелидово, Елизово, Чапаевск, Юрьев, Съезд, " . "Белкин, Ёлкин, Остриё, Громадьё, Подъёмный, " . "Озёрный, Жуков, Лужники, Звенигород, Вязьма, " . "Иркутск, Апатиты, Бийск, Киров, Енисейск, " . "Ломоносов, Нелидово, Менделеев, Каменка, " . "Новосибирск, Кандалакша, Омск, Красноярск, " . "Петрозаводск, Серпухов, Ростов, " . "Северобайкальск, Сковородино, Чайковский, " . "Тамбов, Мытищи, Углич, Дудинка, Фурманов, Уфа, " . "Хабаровск, Прохладный, Цимлянск, Ельцин, " . "Чебоксары, Печора, Шахтёрск, Мышкин, Щёлково, " . "Ртищево, Тында, Тюмень, Электрогорск, " . "Радиоэлектроника, Юбилейный, Ключевская, " . "Якутск, Брянск, Набережные Челны"; my $geo_ok = "Azov, Tambov, Barnaul, Kuban', Vladimir, " . "Ul'yanovsk, Groznyy, Volgodonsk, Dzerzhinskiy, " . "Nelidovo, Yelizovo, Chapayevsk, Yur'yev, " . "S''yezd, Belkin, Yëlkin, Ostriyë, Gromad'yë, " . "Pod''yëmnyy, Ozërnyy, Zhukov, Luzhniki, " . "Zvenigorod, Vyaz'ma, Irkut·sk, Apatity, Biysk, " . "Kirov, Yeniseysk, Lomonosov, Nelidovo, " . "Mendeleyev, Kamenka, Novosibirsk, Kandalaksha, " . "Omsk, Krasnoyarsk, Petrozavodsk, Serpukhov, " . "Rostov, Severobaykal'sk, Skovorodino, " . "Chaykovskiy, Tambov, Mytishchi, Uglich, " . "Dudinka, Furmanov, Ufa, Khabarovsk, " . "Prokhladnyy, Tsimlyansk, Yel'tsin, Cheboksary, " . "Pechora, Shakhtërsk, Myshkin, Shchëlkovo, " . "Rtishchevo, Tynda, Tyumen', Elektrogorsk, " . "Radioelektronika, Yubileynyy, Klyuchevskaya, " . "Yakut·sk, Bryansk, Naberezhnyye Chelny"; my $nonrusgeo = "Йёнчёпинг, Тыайа, Сайылык, Ойусардах, " . "Йошкар-Ола, Ыгыатта, Тыэкан, Суык-Су, " . "Куыркъявр, Иссык-Куль, Вяртсиля, " . "Ташчишма, Улан-Удэ, Мусийкъонгийкоте, " . "Рыркайпий, Йемен"; my $nonrusgeo_ok= "Yyënchëping, Ty·ay·a, Say·ylyk, Oy·usardakh, " . "Yoshkar-Ola, Ygy·atta, Ty·ekan, Su·yk-Su, " . "Ku·yrk''yavr, Issyk-Kul', Vyart·silya, " . "Tash·chishma, Ulan-Ud·e, Musiyk''ongiykote, " . "Ryrkaypiy, Yyemen"; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), $reversible, "$name: Reversibility"); # 2 my $output = $tr->translit($input); is($output, $output_ok, "$name: Universal declaration of human rights"); # 3 $output = $tr->translit($context); is($output, $context_ok, "$name: Context-sensitive sequences and various name endings"); # 4 $output = $tr->translit($abbr); is($output, $abbr_ok, "$name: Abbreviations"); # 5 $output = $tr->translit($excl); is($output, $excl_ok, "$name: Various exclamations"); # 6 $output = $tr->translit($geo); is($output, $geo_ok, "$name: Various geographic names"); # 7 $output = $tr->translit($nonrusgeo); is($output, $nonrusgeo_ok, "$name: Complex names of non-Russian origin"); # vim: sts=4 sw=4 ai et Lingua-Translit-0.29/t/13_tr_Greeklish.t0000644000175000017500000000351512700411131017320 0ustar alinkealinkeuse strict; use Test::More tests => 6; my $name = "Greeklish"; # Taken from http://www.unhchr.ch/udhr/lang/grk.htm my $input = "Επειδή έχει ουσιαστική σημασία να προστατεύονται τα " . "ανθρώπινα δικαιώματα από ένα καθεστώς δικαίου, ώστε ο " . "άνθρωπος να μην αναγκάζεται να προσφεύγει, ως έσχατο " . "καταφύγιο, στην εξέγερση κατά της τυραννίας και της " . "καταπίεσης."; my $output_ok = "Epidi ehi usiastiki simasia na prostatefontai ta " . "anthropina dikaiomata apo ena kathestos dikaiu, oste " . "o anthropos na min anaykazetai na prosfefyi, os " . "eshato katafiyio, stin exeyersi kata tis tirannias " . "kai tis katapiesis."; # Taken from http://en.wikipedia.org/wiki/Greeklish#Examples my $wiki_1 = "Καλημέρα, πώς είστε;"; my $wiki_1_ok = "Kalimera, pos iste?"; my $wiki_2 = "Θήτα"; my $wiki_2_ok = "Thita"; # Check digraphs my $digraph = "ειέιείευέυεύουούόυ"; my $digraph_ok = "iiiefefefuuu"; # Upsilon bug fixed? ("«" -> "I": "Iideoloyika»") my $bug_1 = "«ιδεολογικά» -- Ϋ"; my $bug_1_ok = "«ideoloyika» -- I"; use Lingua::Translit; my $tr = new Lingua::Translit($name); # 1 is($tr->can_reverse(), 0, "$name: not reversible"); my $o = $tr->translit($input); # 2 is($o, $output_ok, "$name: UDOHR transliteration"); $o = $tr->translit($wiki_1); # 3 is($o, $wiki_1_ok, "$name: Wikipedia example #1"); $o = $tr->translit($wiki_2); # 4 is($o, $wiki_2_ok, "$name: Wikipedia example #2"); $o = $tr->translit($digraph); # 5 is($o, $digraph_ok, "$name: digraphs"); $o = $tr->translit($bug_1); # 6 is($o, $bug_1_ok, "$name: bugfix #1"); Lingua-Translit-0.29/META.json0000644000175000017500000000153514252326622015402 0ustar alinkealinke{ "abstract" : "transliterates text between writing systems", "author" : [ "Alex Linke " ], "dynamic_config" : 1, "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Lingua-Translit", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } } }, "release_status" : "stable", "version" : "0.29", "x_serialization_backend" : "JSON::PP version 2.97001" } Lingua-Translit-0.29/xml/0000755000175000017500000000000014252326622014555 5ustar alinkealinkeLingua-Translit-0.29/xml/iso_8859-16_ron.xml0000644000175000017500000000275213076067141017677 0ustar alinkealinke ISO 8859-16 RON Romanian with appropriate diacritics true Ş Ș ş ș Ţ Ț ţ ț Lingua-Translit-0.29/xml/common_deu.xml0000644000175000017500000000353113076067141017427 0ustar alinkealinke Common DEU German umlauts false Ä Ae ä ae Ö Oe ö oe Ü Ue ü ue ß SS \p{IsUpper} ß ss Lingua-Translit-0.29/xml/din_1460_ukr.xml0000644000175000017500000003502313076067141017410 0ustar alinkealinke DIN 1460 UKR DIN 1460:1982, Cyrillic to Latin, Ukrainian true є je Є JE [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Є Je х ch Х CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Х Ch щ šč Щ ŠČ [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Šč ю ju Ю JU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Ju я ja Я JA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ja Й J- [aueAUEауеАУЕ] й j- [aueауе] Ш Š- [ČčЧч] ш š- [čч] ц c- [hг] Ц C- [hHгГ] а a А A б b Б B в v В V г h Г H ґ g Ґ G д d Д D е e Е E ж ž Ж Ž з z З Z и y И Y і i І I ї ï Ї Ï й j Й J к k К K л l Л L м m М M н n Н N о o О O п p П P р r Р R с s С S т t Т T у u У U ф f Ф F ц c Ц C ч č Ч Č ш š Ш Š Ь ' \p{IsUpper} ь ' ʼ ˮ Lingua-Translit-0.29/xml/iast_devanagari.xml0000644000175000017500000004570713076067141020436 0ustar alinkealinke IAST Devanagari IAST to Devanāgarī false oṁ Oṁ kh ख् Kh ख् K क् k क् gh घ् Gh घ् G ग् g ग् ङ् ङ् ch छ् Ch छ् C च् c च् jh झ् Jh झ् J ज् j ज् Ñ ञ् ñ ञ् ṭh ठ् Ṭh ठ् ट् ट् ḍh ढ् Ḍh ढ् ड् ड् ण् ण् th थ् Th थ् T त् t त् dh ध् Dh ध् D द् d द् N न् n न् ph फ् Ph फ् P प् p प् bh भ् Bh भ् B ब् b ब् M म् m म् Y य् y य् R र् r र् L ल् l ल् V व् v व् Ś श् ś श् ष् ष् S स् s स् H ह् h ह् ्ai ्au ्a ्ā ्i ि ्ī ्u ्ū ्ṛ ्ṝ ्ḷ ्ḹ ्e ्o ' ai Ai au Au a A ā Ā i I ī Ī u U ū Ū e E o O 1 2 3 4 5 6 7 8 9 0 Lingua-Translit-0.29/xml/iso_843.xml0000644000175000017500000002633613076067141016502 0ustar alinkealinke ISO 843 ISO 843:1997 TL (Type 1), Greek to Latin false Α A α a Β V β v Γ G γ g Δ D δ d Ε E ε e Ζ Z ζ z Η Ī η ī Θ Th θ th Ι I ι i Κ K κ k Λ L λ l Μ M μ m Ν N ν n Ξ X ξ x Ο O ο o Π P π p Ρ R ρ r Σ S ς s σ s Τ T τ t Υ Y υ y Φ F φ f Χ Ch χ ch Ψ Ps ψ ps Ω Ō ω ō Ϛ S ϛ s Ϝ W ϝ f ϳ j ΄ ´ ΅ ΅ ͂ ̂ ̓ ʼ ̓ ʼ ̔ h ͅ ̧ ͅ ̧ Ά Á ά á Έ É έ é Ή Ī́ ή ī́ Ί Í ί í Ό Ó ό ó Ύ Ý ύ ý Ώ ώ Ϊ Ï ϊ ï Ϋ Ÿ ϋ ÿ ΐ ΰ ÿ́ ; ? \b ; ? \b · ; - Lingua-Translit-0.29/xml/translit.dtd0000644000175000017500000000135012720600042017076 0ustar alinkealinke Lingua-Translit-0.29/xml/common_pol.xml0000644000175000017500000000602413076067141017444 0ustar alinkealinke Common POL Unaccented Polish false Ą A ą a Ć C ć c Ę E ę e Ł L ł l Ń N ń n Ó O ó o Ś S ś s Ź Z ź z Ż Z ż z Lingua-Translit-0.29/xml/greeklish.xml0000644000175000017500000002552013076067141017261 0ustar alinkealinke Greeklish Greeklish (Phonetic), Greek to Latin false ει i έι i εί i ευ ef έυ ef εύ ef ου u ού u όυ u Α A α a Ά A ά a Β V β v Γ Y γ y Δ D δ d Ε E ε e Έ E έ e Ζ Z ζ z Η I η i Ή I ή i Θ Th θ th Ι I ι i Ί I ί i Ϊ I ϊ i ΐ i Κ K κ k Λ L λ l Μ M μ m Ν N ν n Ξ X ξ x Ο O ο o Ό O ό o Π P π p Ρ R ρ r Σ S σ s Τ T τ t Υ I υ i Ύ I ύ i Ϋ I ϋ i ΰ i Φ F φ f Χ H χ h Ψ Ps ψ ps Ω O ω o Ώ O ώ o ς s ; ? \b ; ? \b · ; - ΄ ΅ ͂ ̓ ̓ ̔ ͅ ͅ Lingua-Translit-0.29/xml/bgn-pcgn_rus_standard.xml0000644000175000017500000003316413171071763021554 0ustar alinkealinke BGN/PCGN RUS Standard BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian false ́ Е Ye [АЕЁИОУЫЭЮЯЙЬЪаеёиоуыэюяйьъ] Е Ye \b Е E Ё [АЕЁИОУЫЭЮЯЙЬЪаеёиоуыэюяйьъe] Ё \b Ё Ë Й Y Ы Y Э E А A Б B В V Г G Д D Ж Zh З Z И I К K Л L М M Н N О O П P Р R С S Т T У U Ф F Х Kh Ц Ts Ч Ch Ш Sh Щ Shch Ъ '' Ь ' Ю Yu Я Ya е ye [AEËIOUYeëau'аеёиоуыэюяйьъ] е ye \b е e ё [AEËIOUYeëau'аеёиоуыэюяйьъ] ё \b ё ë й y ы y э e а a б b в v г g д d ж zh з z и i к k л l м m н n о o п p р r с s т t у u ф f х kh ц ts ч ch ш sh щ shch ъ '' ь ' ю yu я ya Lingua-Translit-0.29/xml/common_ron.xml0000644000175000017500000000543713076067141017457 0ustar alinkealinke Common RON Romanian without diacritics false Ă A ă a  A â a Î I î i Ș S ș s Ş S ş s Ț T ț t Ţ T ţ t Lingua-Translit-0.29/xml/xml2dump.pl0000755000175000017500000001112712720600042016654 0ustar alinkealinke#!/usr/bin/perl -w # # Copyright (C) 2007-2008 Alex Linke # Copyright (C) 2009-2016 Lingua-Systems Software GmbH # Copyright (C) 2016 Netzum Sorglos, Lingua-Systems Software GmbH # use strict; use warnings; require 5.008; use XML::LibXML; use Data::Dumper; use Getopt::Long; my $VERSION = '0.6'; my %tables; # set default options my %opt = ( output => "tables.dump", verbose => 0, ); # parse commandline options show_help(1) unless GetOptions( "output|o=s" => \$opt{output}, "verbose|v" => \$opt{verbose}, "help|h" => \$opt{help} ); show_help(1) if scalar(@ARGV) == 0; # No XML file(s) given show_help(0) if $opt{help}; my $xmlparser = new XML::LibXML(); # Set parser options $xmlparser->pedantic_parser(1); $xmlparser->validation(1); $xmlparser->expand_entities(1); $xmlparser->keep_blanks(1); $xmlparser->line_numbers(1); # Treat everything else in @ARGV as a filename foreach my $file (@ARGV) { print "Parsing $file..." if $opt{verbose}; my %counts = ( rules => 0, contexts => 0 ); my $ds; my $doc = $xmlparser->parse_file($file) or die "Error parsing $file: $!\n"; # Retrieve meta-documentation from XML document first foreach my $meta (qw/name desc reverse/) { my @nodes = $doc->findnodes("/translit/$meta"); die "#/translit/$meta != 1" if ( scalar(@nodes) != 1 ); $ds->{$meta} = $nodes[0]->to_literal(); } # Perform some basic meta data checks die "Name undefined.\n" unless $ds->{name}; die "Description undefined.\n" unless $ds->{desc}; die "Reversibility undefined.\n" unless $ds->{reverse}; # Check tag contains valid data. # TODO: move this to the DTD die "Reversibility: '$ds->{reverse}' -- Should be 'true' or 'false'.\n" unless $ds->{reverse} =~ /^(true|false)$/; # Set the table's identifier $ds->{id} = lc( $ds->{name} ); $ds->{id} =~ s/\s/_/g; # Retrieve all rules, extract their data and store it to an appropriate # data structure foreach my $rule ( $doc->findnodes("/translit/rules/rule") ) { my @nodes; my $rule_ds; # Retrieve "from" and "to" literals foreach my $n (qw/from to/) { @nodes = $rule->findnodes("./$n"); die "#/translit/rules/rules/$n != 1 " . "(at line " . $rule->line_number() . ")\n" if ( scalar(@nodes) != 1 ); $rule_ds->{$n} = $nodes[0]->to_literal(); } # Retrieve rule's "context" @nodes = $rule->findnodes("./context"); die "#/translit/rules/rule/context > 1 " . "(at line " . $rule->line_number() . ")\n" if ( scalar(@nodes) > 1 ); # Process rule's "context" if necessary if ( scalar(@nodes) ) { foreach my $context (qw/before after/) { @nodes = $rule->findnodes("./context/$context"); die "#/translit/rules/rule/context/$context > 1 " . "(at line " . $rule->line_number() . ")\n" if ( scalar(@nodes) > 1 ); # Copy the context to the rule's data structure if ( scalar(@nodes) ) { $rule_ds->{context}->{$context} = $nodes[0]->to_literal(); } } $counts{contexts}++; } $counts{rules}++; die $rule_ds->{name} . ": from==to -> " . $rule_ds->{from} . "\n" if ( $rule_ds->{from} eq $rule_ds->{to} ); push @{ $ds->{rules} }, $rule_ds; } # Copy transliteration structure over to the final hash $tables{ $ds->{id} } = $ds; print " ($ds->{id}: rules=$counts{rules}, contexts=$counts{contexts})\n" if $opt{verbose}; undef($ds); # free memory } # Configure Data::Dumper my $dumper = new Data::Dumper( [ \%tables ], [qw/*tables/] ); $dumper->Purity(0); $dumper->Useqq(1); $dumper->Indent(1); # Dump the table(s) to disk open FH, ">$opt{output}" or die "$opt{output}: $!\n"; print FH $dumper->Dump(); close(FH); print scalar( keys(%tables) ), " transliteration table(s) dumped to $opt{output}.\n" if $opt{verbose}; sub show_help { my $retval = shift(); print STDERR "xml2dump v$VERSION -- Copyright 2007-2008 by Alex Linke ", "\n\n", "usage: $0 [-v -h] -o FILE XML-FILE(s)\n\n", "\t--output -o FILE set output file (default: transtbl.dump)\n", "\t--verbose -v be verbose\n", "\t--help -h show this help\n"; exit($retval); } # vim: set ft=perl sw=4 sts=4 ts=4 ai et: Lingua-Translit-0.29/xml/common_ara.xml0000644000175000017500000001423113076067141017414 0ustar alinkealinke Common ARA Common Romanization of Arabic false ث th خ kh ش sh غ gh ع 'e ئ 'e ؤ 'e ا a أ a آ a ى a إ e ب b ت t ج j ح h د d ذ d ض d ر r ز z ظ z س s ص s ط t ف f ق q ك k ل l م m ن n ه h ة h و w ي y ء ' ؟ ? ، , ـ ً ٌ ٍ َ ُ ِ ّ ْ Lingua-Translit-0.29/xml/din_1460_rus.xml0000644000175000017500000003772513076067141017433 0ustar alinkealinke DIN 1460 RUS DIN 1460:1982, Cyrillic to Latin, Russian true х ch Х CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Х Ch щ šč Щ ŠČ [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Šč Ъ " ([^\p{IsWord}]|$) \p{IsUpper} ъ " ([^\p{IsWord}]|$) \p{IsWord} ъ " \p{IsWord} \p{IsWord} Ъ " \p{IsWord} \p{IsWord} ю ju Ю JU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Ju я ja Я JA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ja Й J- [auAUауАУ] й j- [auау] Ш Š- [ČčЧч] ш š- [čч] а a А A б b Б B в v В V г g Г G д d Д D е e Е E ё ë Ё Ë ж ž Ж Ž з z З Z и i И I і i І I й j Й J к k К K л l Л L м m М M н n Н N о o О O п p П P р r Р R с s С S т t Т T у u У U ф f Ф F ц c Ц C ч č Ч Č ш š Ш Š ы y Ы Y Ь ' \p{IsUpper} ь ' ѣ ě Ѣ Ě э ė Э Ė ѳ Ѳ ѵ Ѵ Lingua-Translit-0.29/xml/tables.dump0000644000175000017500000041761413100123740016716 0ustar alinkealinke%tables = ( "common_slk" => { "desc" => "Slovak without diacritics", "name" => "Common SLK", "id" => "common_slk", "rules" => [ { "to" => "A", "from" => "\x{c1}" }, { "to" => "a", "from" => "\x{e1}" }, { "to" => "A", "from" => "\x{c4}" }, { "to" => "a", "from" => "\x{e4}" }, { "to" => "C", "from" => "\x{10c}" }, { "to" => "c", "from" => "\x{10d}" }, { "to" => "D", "from" => "\x{10e}" }, { "to" => "d", "from" => "\x{10f}" }, { "to" => "d", "from" => "d\x{30c}" }, { "to" => "E", "from" => "\x{c9}" }, { "to" => "e", "from" => "\x{e9}" }, { "to" => "I", "from" => "\x{cd}" }, { "to" => "i", "from" => "\x{ed}" }, { "to" => "L", "from" => "\x{139}" }, { "to" => "l", "from" => "\x{13a}" }, { "to" => "L", "from" => "\x{13d}" }, { "to" => "l", "from" => "\x{13e}" }, { "to" => "L", "from" => "L\x{30c}" }, { "to" => "l", "from" => "l\x{30c}" }, { "to" => "N", "from" => "\x{147}" }, { "to" => "n", "from" => "\x{148}" }, { "to" => "O", "from" => "\x{d3}" }, { "to" => "o", "from" => "\x{f3}" }, { "to" => "R", "from" => "\x{154}" }, { "to" => "r", "from" => "\x{155}" }, { "to" => "S", "from" => "\x{160}" }, { "to" => "s", "from" => "\x{161}" }, { "to" => "T", "from" => "\x{164}" }, { "to" => "t", "from" => "\x{165}" }, { "to" => "t", "from" => "t\x{30c}" }, { "to" => "U", "from" => "\x{da}" }, { "to" => "u", "from" => "\x{fa}" }, { "to" => "Y", "from" => "\x{dd}" }, { "to" => "y", "from" => "\x{fd}" }, { "to" => "Z", "from" => "\x{17d}" }, { "to" => "z", "from" => "\x{17e}" }, { "to" => "O", "from" => "\x{d4}" }, { "to" => "o", "from" => "\x{f4}" }, { "to" => "DZ", "from" => "\x{1f1}" }, { "to" => "Dz", "from" => "\x{1f2}" }, { "to" => "dz", "from" => "\x{1f3}" }, { "to" => "DZ", "from" => "\x{1c4}" }, { "to" => "Dz", "from" => "\x{1c5}" }, { "to" => "dz", "from" => "\x{1c6}" } ], "reverse" => "false" }, "common_ron" => { "desc" => "Romanian without diacritics", "name" => "Common RON", "id" => "common_ron", "rules" => [ { "to" => "A", "from" => "\x{102}" }, { "to" => "a", "from" => "\x{103}" }, { "to" => "A", "from" => "\x{c2}" }, { "to" => "a", "from" => "\x{e2}" }, { "to" => "I", "from" => "\x{ce}" }, { "to" => "i", "from" => "\x{ee}" }, { "to" => "S", "from" => "\x{218}" }, { "to" => "s", "from" => "\x{219}" }, { "to" => "S", "from" => "\x{15e}" }, { "to" => "s", "from" => "\x{15f}" }, { "to" => "T", "from" => "\x{21a}" }, { "to" => "t", "from" => "\x{21b}" }, { "to" => "T", "from" => "\x{162}" }, { "to" => "t", "from" => "\x{163}" } ], "reverse" => "false" }, "common_pol" => { "desc" => "Unaccented Polish", "name" => "Common POL", "id" => "common_pol", "rules" => [ { "to" => "A", "from" => "\x{104}" }, { "to" => "a", "from" => "\x{105}" }, { "to" => "C", "from" => "\x{106}" }, { "to" => "c", "from" => "\x{107}" }, { "to" => "E", "from" => "\x{118}" }, { "to" => "e", "from" => "\x{119}" }, { "to" => "L", "from" => "\x{141}" }, { "to" => "l", "from" => "\x{142}" }, { "to" => "N", "from" => "\x{143}" }, { "to" => "n", "from" => "\x{144}" }, { "to" => "O", "from" => "\x{d3}" }, { "to" => "o", "from" => "\x{f3}" }, { "to" => "S", "from" => "\x{15a}" }, { "to" => "s", "from" => "\x{15b}" }, { "to" => "Z", "from" => "\x{179}" }, { "to" => "z", "from" => "\x{17a}" }, { "to" => "Z", "from" => "\x{17b}" }, { "to" => "z", "from" => "\x{17c}" } ], "reverse" => "false" }, "streamlined_system_bul" => { "desc" => "The Streamlined System: 2006, Cyrillic to Latin, Bulgarian", "name" => "Streamlined System BUL", "id" => "streamlined_system_bul", "rules" => [ { "to" => "SHT", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Sht", "from" => "\x{429}" }, { "to" => "sht", "from" => "\x{449}" }, { "to" => "ZH", "from" => "\x{416}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "TS", "from" => "\x{426}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ts", "from" => "\x{426}" }, { "to" => "ts", "from" => "\x{446}" }, { "to" => "CH", "from" => "\x{427}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "SH", "from" => "\x{428}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "YU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "YA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "ya", "from" => "\x{44f}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "Y", "from" => "\x{419}" }, { "to" => "y", "from" => "\x{439}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "H", "from" => "\x{425}" }, { "to" => "h", "from" => "\x{445}" }, { "to" => "A", "from" => "\x{42a}" }, { "to" => "a", "from" => "\x{44a}" }, { "to" => "Y", "from" => "\x{42c}" }, { "to" => "y", "from" => "\x{44c}" } ], "reverse" => "false" }, "gost_7.79_rus_old" => { "desc" => "GOST 7.79:2000, Cyrillic to Latin with support for Old Russian (pre 1918), Russian", "name" => "GOST 7.79 RUS OLD", "id" => "gost_7.79_rus_old", "rules" => [ { "to" => "i'", "from" => "\x{456}", "context" => { "before" => "[^\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{44d}\x{451}\x{463}\x{475}\x{456}]" } }, { "to" => "I'", "from" => "\x{406}", "context" => { "before" => "[^\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{401}\x{42d}\x{462}\x{474}\x{406}]" } }, { "to" => "i", "from" => "\x{456}" }, { "to" => "I", "from" => "\x{406}" }, { "to" => "c", "from" => "\x{446}", "context" => { "before" => "[iejy\x{438}\x{435}\x{439}\x{44b}\x{44e}\x{44f}]" } }, { "to" => "C", "from" => "\x{426}", "context" => { "before" => "[IEJY\x{418}\x{415}\x{419}\x{42b}\x{42e}\x{42f}]" } }, { "to" => "cz", "from" => "\x{446}" }, { "to" => "CZ", "from" => "\x{426}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Cz", "from" => "\x{426}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "yo", "from" => "\x{451}" }, { "to" => "YO", "from" => "\x{401}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yo", "from" => "\x{401}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "ZH", "from" => "\x{416}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "x", "from" => "\x{445}" }, { "to" => "X", "from" => "\x{425}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "CH", "from" => "\x{427}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "SH", "from" => "\x{428}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "shh", "from" => "\x{449}" }, { "to" => "SHH", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Shh", "from" => "\x{429}" }, { "to" => "``", "from" => "\x{44a}" }, { "to" => "``", "from" => "\x{42a}" }, { "to" => "y'", "from" => "\x{44b}" }, { "to" => "Y'", "from" => "\x{42b}" }, { "to" => "`", "from" => "\x{42c}" }, { "to" => "`", "from" => "\x{44c}" }, { "to" => "e`", "from" => "\x{44d}" }, { "to" => "E`", "from" => "\x{42d}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "YU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "ya", "from" => "\x{44f}" }, { "to" => "YA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "ye", "from" => "\x{463}" }, { "to" => "YE", "from" => "\x{462}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ye", "from" => "\x{462}" }, { "to" => "fh", "from" => "\x{473}" }, { "to" => "FH", "from" => "\x{472}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Fh", "from" => "\x{472}" }, { "to" => "yh", "from" => "\x{475}" }, { "to" => "YH", "from" => "\x{474}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yh", "from" => "\x{474}" }, { "to" => "#", "from" => "\x{2116}" } ], "reverse" => "false" }, "din_1460_rus" => { "desc" => "DIN 1460:1982, Cyrillic to Latin, Russian", "name" => "DIN 1460 RUS", "id" => "din_1460_rus", "rules" => [ { "to" => "ch", "from" => "\x{445}" }, { "to" => "CH", "from" => "\x{425}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{425}" }, { "to" => "\x{161}\x{10d}", "from" => "\x{449}" }, { "to" => "\x{160}\x{10c}", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "\x{160}\x{10d}", "from" => "\x{429}" }, { "to" => "\"", "from" => "\x{42a}", "context" => { "after" => "\\p{IsUpper}", "before" => "([^\\p{IsWord}]|\$)" } }, { "to" => "\"", "from" => "\x{44a}", "context" => { "after" => "\\p{IsWord}", "before" => "([^\\p{IsWord}]|\$)" } }, { "to" => "\"", "from" => "\x{44a}", "context" => { "after" => "\\p{IsWord}", "before" => "\\p{IsWord}" } }, { "to" => "\"", "from" => "\x{42a}", "context" => { "after" => "\\p{IsWord}", "before" => "\\p{IsWord}" } }, { "to" => "ju", "from" => "\x{44e}" }, { "to" => "JU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ju", "from" => "\x{42e}" }, { "to" => "ja", "from" => "\x{44f}" }, { "to" => "JA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ja", "from" => "\x{42f}" }, { "to" => "J-", "from" => "\x{419}", "context" => { "before" => "[auAU\x{430}\x{443}\x{410}\x{423}]" } }, { "to" => "j-", "from" => "\x{439}", "context" => { "before" => "[au\x{430}\x{443}]" } }, { "to" => "\x{160}-", "from" => "\x{428}", "context" => { "before" => "[\x{10c}\x{10d}\x{427}\x{447}]" } }, { "to" => "\x{161}-", "from" => "\x{448}", "context" => { "before" => "[\x{10d}\x{447}]" } }, { "to" => "a", "from" => "\x{430}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "\x{17e}", "from" => "\x{436}" }, { "to" => "\x{17d}", "from" => "\x{416}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{456}" }, { "to" => "I", "from" => "\x{406}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "c", "from" => "\x{446}" }, { "to" => "C", "from" => "\x{426}" }, { "to" => "\x{10d}", "from" => "\x{447}" }, { "to" => "\x{10c}", "from" => "\x{427}" }, { "to" => "\x{161}", "from" => "\x{448}" }, { "to" => "\x{160}", "from" => "\x{428}" }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "'", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "'", "from" => "\x{44c}" }, { "to" => "\x{11b}", "from" => "\x{463}" }, { "to" => "\x{11a}", "from" => "\x{462}" }, { "to" => "\x{117}", "from" => "\x{44d}" }, { "to" => "\x{116}", "from" => "\x{42d}" }, { "to" => "\x{1e1f}", "from" => "\x{473}" }, { "to" => "\x{1e1e}", "from" => "\x{472}" }, { "to" => "\x{1e8f}", "from" => "\x{475}" }, { "to" => "\x{1e8e}", "from" => "\x{474}" } ], "reverse" => "true" }, "iso_9" => { "desc" => "ISO 9:1995, Cyrillic to Latin", "name" => "ISO 9", "id" => "iso_9", "rules" => [ { "to" => "A", "from" => "\x{410}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "\x{102}", "from" => "\x{4d0}" }, { "to" => "\x{103}", "from" => "\x{4d1}" }, { "to" => "\x{c4}", "from" => "\x{4d2}" }, { "to" => "\x{e4}", "from" => "\x{4d3}" }, { "to" => "A\x{30b}", "from" => "\x{4d8}" }, { "to" => "a\x{30b}", "from" => "\x{4d9}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G\x{300}", "from" => "\x{490}" }, { "to" => "g\x{300}", "from" => "\x{491}" }, { "to" => "\x{11e}", "from" => "\x{494}" }, { "to" => "\x{11f}", "from" => "\x{495}" }, { "to" => "\x{120}", "from" => "\x{492}" }, { "to" => "\x{121}", "from" => "\x{493}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "\x{110}", "from" => "\x{402}" }, { "to" => "\x{111}", "from" => "\x{452}" }, { "to" => "\x{1f4}", "from" => "\x{403}" }, { "to" => "\x{1f5}", "from" => "\x{453}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "\x{114}", "from" => "\x{4d6}" }, { "to" => "\x{115}", "from" => "\x{4d7}" }, { "to" => "\x{ca}", "from" => "\x{404}" }, { "to" => "\x{ea}", "from" => "\x{454}" }, { "to" => "C\x{306}", "from" => "\x{4bc}" }, { "to" => "c\x{306}", "from" => "\x{4bd}" }, { "to" => "\x{c7}\x{306}", "from" => "\x{4be}" }, { "to" => "\x{e7}\x{306}", "from" => "\x{4bf}" }, { "to" => "\x{17d}", "from" => "\x{416}" }, { "to" => "\x{17e}", "from" => "\x{436}" }, { "to" => "Z\x{306}", "from" => "\x{4c1}" }, { "to" => "z\x{306}", "from" => "\x{4c2}" }, { "to" => "Z\x{304}", "from" => "\x{4dc}" }, { "to" => "z\x{304}", "from" => "\x{4dd}" }, { "to" => "\x{17d}\x{326}", "from" => "\x{496}" }, { "to" => "\x{17e}\x{327}", "from" => "\x{497}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z\x{308}", "from" => "\x{4de}" }, { "to" => "z\x{308}", "from" => "\x{4df}" }, { "to" => "\x{1e90}", "from" => "\x{405}" }, { "to" => "\x{1e91}", "from" => "\x{455}" }, { "to" => "\x{179}", "from" => "\x{4e0}" }, { "to" => "\x{17a}", "from" => "\x{4e1}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "\x{ce}", "from" => "\x{4e4}" }, { "to" => "\x{ee}", "from" => "\x{4e5}" }, { "to" => "\x{cc}", "from" => "\x{406}" }, { "to" => "\x{ec}", "from" => "\x{456}" }, { "to" => "\x{cf}", "from" => "\x{407}" }, { "to" => "\x{ef}", "from" => "\x{457}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J\x{30c}", "from" => "\x{408}" }, { "to" => "\x{1f0}", "from" => "\x{458}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "\x{136}", "from" => "\x{49a}" }, { "to" => "\x{137}", "from" => "\x{49b}" }, { "to" => "K\x{304}", "from" => "\x{49e}" }, { "to" => "k\x{304}", "from" => "\x{49f}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L\x{302}", "from" => "\x{409}" }, { "to" => "l\x{302}", "from" => "\x{459}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N\x{302}", "from" => "\x{40a}" }, { "to" => "n\x{302}", "from" => "\x{45a}" }, { "to" => "\x{1e44}", "from" => "\x{4a4}" }, { "to" => "\x{1e45}", "from" => "\x{4a5}" }, { "to" => "\x{1e46}", "from" => "\x{4a2}" }, { "to" => "\x{1e47}", "from" => "\x{4a3}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "\x{d6}", "from" => "\x{4e6}" }, { "to" => "\x{f6}", "from" => "\x{4e7}" }, { "to" => "\x{d4}", "from" => "\x{4e8}" }, { "to" => "\x{f4}", "from" => "\x{4e9}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "\x{1e54}", "from" => "\x{4a6}" }, { "to" => "\x{1e55}", "from" => "\x{4a7}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "\x{c7}", "from" => "\x{4aa}" }, { "to" => "\x{e7}", "from" => "\x{4ab}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "\x{162}", "from" => "\x{4ac}" }, { "to" => "\x{163}", "from" => "\x{4ad}" }, { "to" => "\x{106}", "from" => "\x{40b}" }, { "to" => "\x{170}", "from" => "\x{45b}" }, { "to" => "\x{1e30}", "from" => "\x{40c}" }, { "to" => "\x{1e31}", "from" => "\x{45c}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "\x{da}", "from" => "\x{423}\x{301}" }, { "to" => "\x{fa}", "from" => "\x{443}\x{301}" }, { "to" => "\x{16c}", "from" => "\x{40e}" }, { "to" => "\x{16d}", "from" => "\x{45e}" }, { "to" => "\x{dc}", "from" => "\x{4f0}" }, { "to" => "\x{fc}", "from" => "\x{4f1}" }, { "to" => "\x{170}", "from" => "\x{4f2}" }, { "to" => "\x{171}", "from" => "\x{4f3}" }, { "to" => "\x{d9}", "from" => "\x{4ae}" }, { "to" => "\x{f9}", "from" => "\x{4af}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "H", "from" => "\x{425}" }, { "to" => "h", "from" => "\x{445}" }, { "to" => "\x{1e28}", "from" => "\x{4b2}" }, { "to" => "\x{1e29}", "from" => "\x{4b3}" }, { "to" => "\x{1e24}", "from" => "\x{4ba}" }, { "to" => "\x{1e25}", "from" => "\x{4bb}" }, { "to" => "C", "from" => "\x{426}" }, { "to" => "c", "from" => "\x{446}" }, { "to" => "C\x{304}", "from" => "\x{4b4}" }, { "to" => "c\x{304}", "from" => "\x{4b5}" }, { "to" => "\x{10c}", "from" => "\x{427}" }, { "to" => "\x{10d}", "from" => "\x{447}" }, { "to" => "C\x{308}", "from" => "\x{4f4}" }, { "to" => "c\x{308}", "from" => "\x{4f5}" }, { "to" => "\x{c7}", "from" => "\x{4cb}" }, { "to" => "\x{e7}", "from" => "\x{4cc}" }, { "to" => "D\x{302}", "from" => "\x{40f}" }, { "to" => "d\x{302}", "from" => "\x{45f}" }, { "to" => "\x{160}", "from" => "\x{428}" }, { "to" => "\x{161}", "from" => "\x{448}" }, { "to" => "\x{15c}", "from" => "\x{429}" }, { "to" => "\x{15d}", "from" => "\x{449}" }, { "to" => "\x{2ba}", "from" => "\x{42a}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "\x{2ba}", "from" => "\x{44a}" }, { "to" => "\x{2019}", "from" => "\x{2bc}" }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "\x{178}", "from" => "\x{4f8}" }, { "to" => "\x{ff}", "from" => "\x{4f9}" }, { "to" => "\x{2b9}", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "\x{2b9}", "from" => "\x{44c}" }, { "to" => "\x{c8}", "from" => "\x{42d}" }, { "to" => "\x{e8}", "from" => "\x{44d}" }, { "to" => "\x{db}", "from" => "\x{42e}" }, { "to" => "\x{fb}", "from" => "\x{44e}" }, { "to" => "\x{c2}", "from" => "\x{42f}" }, { "to" => "\x{e2}", "from" => "\x{44f}" }, { "to" => "\x{11a}", "from" => "\x{48c}" }, { "to" => "\x{11b}", "from" => "\x{48d}" }, { "to" => "\x{1cd}", "from" => "\x{46a}" }, { "to" => "\x{1ce}", "from" => "\x{46b}" }, { "to" => "F\x{300}", "from" => "\x{472}" }, { "to" => "f\x{300}", "from" => "\x{473}" }, { "to" => "\x{1ef2}", "from" => "\x{474}" }, { "to" => "\x{1ef3}", "from" => "\x{475}" }, { "to" => "\x{d2}", "from" => "\x{4a8}" }, { "to" => "\x{f2}", "from" => "\x{4a9}" }, { "to" => "\x{2021}", "from" => "\x{4c0}" } ], "reverse" => "true" }, "common_slv" => { "desc" => "Slovenian without diacritics", "name" => "Common SLV", "id" => "common_slv", "rules" => [ { "to" => "C", "from" => "\x{10c}" }, { "to" => "c", "from" => "\x{10d}" }, { "to" => "S", "from" => "\x{160}" }, { "to" => "s", "from" => "\x{161}" }, { "to" => "Z", "from" => "\x{17d}" }, { "to" => "z", "from" => "\x{17e}" } ], "reverse" => "false" }, "devanagari_iast" => { "desc" => "Devan\x{101}gar\x{12b} to IAST", "name" => "Devanagari IAST", "id" => "devanagari_iast", "rules" => [ { "to" => 0, "from" => "\x{966}" }, { "to" => 9, "from" => "\x{96f}" }, { "to" => 8, "from" => "\x{96e}" }, { "to" => 7, "from" => "\x{96d}" }, { "to" => 6, "from" => "\x{96c}" }, { "to" => 5, "from" => "\x{96b}" }, { "to" => 4, "from" => "\x{96a}" }, { "to" => 3, "from" => "\x{969}" }, { "to" => 2, "from" => "\x{968}" }, { "to" => 1, "from" => "\x{967}" }, { "to" => "o", "from" => "\x{913}" }, { "to" => "e", "from" => "\x{90f}" }, { "to" => "\x{1e39}", "from" => "\x{961}" }, { "to" => "\x{1e37}", "from" => "\x{90c}" }, { "to" => "\x{1e5d}", "from" => "\x{960}" }, { "to" => "\x{1e5b}", "from" => "\x{90b}" }, { "to" => "\x{16b}", "from" => "\x{90a}" }, { "to" => "u", "from" => "\x{909}" }, { "to" => "\x{12b}", "from" => "\x{908}" }, { "to" => "i", "from" => "\x{907}" }, { "to" => "\x{101}", "from" => "\x{906}" }, { "to" => "a", "from" => "\x{905}" }, { "to" => "au", "from" => "\x{914}" }, { "to" => "ai", "from" => "\x{910}" }, { "to" => "'", "from" => "\x{93d}" }, { "to" => "\x{94d}o", "from" => "\x{94b}" }, { "to" => "\x{94d}e", "from" => "\x{947}" }, { "to" => "\x{94d}\x{1e39}", "from" => "\x{963}" }, { "to" => "\x{94d}\x{1e37}", "from" => "\x{962}" }, { "to" => "\x{94d}\x{1e5d}", "from" => "\x{944}" }, { "to" => "\x{94d}\x{1e5b}", "from" => "\x{943}" }, { "to" => "\x{94d}\x{16b}", "from" => "\x{942}" }, { "to" => "\x{94d}u", "from" => "\x{941}" }, { "to" => "\x{94d}\x{12b}", "from" => "\x{940}" }, { "to" => "\x{94d}i", "from" => "\x{93f}" }, { "to" => "\x{94d}\x{101}", "from" => "\x{93e}" }, { "to" => "\x{94d}au", "from" => "\x{94c}" }, { "to" => "\x{94d}ai", "from" => "\x{948}" }, { "to" => "h", "from" => "\x{939}\x{94d}" }, { "to" => "s", "from" => "\x{938}\x{94d}" }, { "to" => "\x{1e63}", "from" => "\x{937}\x{94d}" }, { "to" => "\x{15b}", "from" => "\x{936}\x{94d}" }, { "to" => "v", "from" => "\x{935}\x{94d}" }, { "to" => "l", "from" => "\x{932}\x{94d}" }, { "to" => "r", "from" => "\x{930}\x{94d}" }, { "to" => "y", "from" => "\x{92f}\x{94d}" }, { "to" => "m", "from" => "\x{92e}\x{94d}" }, { "to" => "b", "from" => "\x{92c}\x{94d}" }, { "to" => "bh", "from" => "\x{92d}\x{94d}" }, { "to" => "ph", "from" => "\x{92b}\x{94d}" }, { "to" => "p", "from" => "\x{92a}\x{94d}" }, { "to" => "n", "from" => "\x{928}\x{94d}" }, { "to" => "d", "from" => "\x{926}\x{94d}" }, { "to" => "dh", "from" => "\x{927}\x{94d}" }, { "to" => "t", "from" => "\x{924}\x{94d}" }, { "to" => "th", "from" => "\x{925}\x{94d}" }, { "to" => "\x{1e47}", "from" => "\x{923}\x{94d}" }, { "to" => "\x{1e0d}", "from" => "\x{921}\x{94d}" }, { "to" => "\x{1e0d}h", "from" => "\x{922}\x{94d}" }, { "to" => "\x{1e6d}", "from" => "\x{91f}\x{94d}" }, { "to" => "\x{1e6d}h", "from" => "\x{920}\x{94d}" }, { "to" => "\x{f1}", "from" => "\x{91e}\x{94d}" }, { "to" => "j", "from" => "\x{91c}\x{94d}" }, { "to" => "jh", "from" => "\x{91d}\x{94d}" }, { "to" => "c", "from" => "\x{91a}\x{94d}" }, { "to" => "ch", "from" => "\x{91b}\x{94d}" }, { "to" => "\x{1e45}", "from" => "\x{919}\x{94d}" }, { "to" => "g", "from" => "\x{917}\x{94d}" }, { "to" => "gh", "from" => "\x{918}\x{94d}" }, { "to" => "k", "from" => "\x{915}\x{94d}" }, { "to" => "kh", "from" => "\x{916}\x{94d}" }, { "to" => "ha", "from" => "\x{939}" }, { "to" => "sa", "from" => "\x{938}" }, { "to" => "\x{1e63}a", "from" => "\x{937}" }, { "to" => "\x{15b}a", "from" => "\x{936}" }, { "to" => "va", "from" => "\x{935}" }, { "to" => "la", "from" => "\x{932}" }, { "to" => "ra", "from" => "\x{930}" }, { "to" => "ya", "from" => "\x{92f}" }, { "to" => "ma", "from" => "\x{92e}" }, { "to" => "ba", "from" => "\x{92c}" }, { "to" => "bha", "from" => "\x{92d}" }, { "to" => "pha", "from" => "\x{92b}" }, { "to" => "pa", "from" => "\x{92a}" }, { "to" => "na", "from" => "\x{928}" }, { "to" => "da", "from" => "\x{926}" }, { "to" => "dha", "from" => "\x{927}" }, { "to" => "ta", "from" => "\x{924}" }, { "to" => "tha", "from" => "\x{925}" }, { "to" => "\x{1e47}a", "from" => "\x{923}" }, { "to" => "\x{1e0d}a", "from" => "\x{921}" }, { "to" => "\x{1e0d}ha", "from" => "\x{922}" }, { "to" => "\x{1e6d}a", "from" => "\x{91f}" }, { "to" => "\x{1e6d}ha", "from" => "\x{920}" }, { "to" => "\x{f1}a", "from" => "\x{91e}" }, { "to" => "ja", "from" => "\x{91c}" }, { "to" => "jha", "from" => "\x{91d}" }, { "to" => "ca", "from" => "\x{91a}" }, { "to" => "cha", "from" => "\x{91b}" }, { "to" => "\x{1e45}a", "from" => "\x{919}" }, { "to" => "ga", "from" => "\x{917}" }, { "to" => "gha", "from" => "\x{918}" }, { "to" => "ka", "from" => "\x{915}" }, { "to" => "kha", "from" => "\x{916}" }, { "to" => "\x{1e25}", "from" => "\x{903}" }, { "to" => "\x{1e43}", "from" => "\x{902}" }, { "to" => "o\x{1e41}", "from" => "\x{950}" } ], "reverse" => "false" }, "iso_8859-16_ron" => { "desc" => "Romanian with appropriate diacritics", "name" => "ISO 8859-16 RON", "id" => "iso_8859-16_ron", "rules" => [ { "to" => "\x{218}", "from" => "\x{15e}" }, { "to" => "\x{219}", "from" => "\x{15f}" }, { "to" => "\x{21a}", "from" => "\x{162}" }, { "to" => "\x{21b}", "from" => "\x{163}" } ], "reverse" => "true" }, "bgn/pcgn_rus_strict" => { "desc" => "BGN/PCGN:1947 (Strict Variant), Cyrillic to Latin, Russian", "name" => "BGN/PCGN RUS Strict", "id" => "bgn/pcgn_rus_strict", "rules" => [ { "to" => "", "from" => "\x{301}" }, { "to" => "Ye", "from" => "\x{415}", "context" => { "after" => "[\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{419}\x{42c}\x{42a}\x{410}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}]" } }, { "to" => "Ye", "from" => "\x{415}", "context" => { "after" => "\\b" } }, { "to" => "E", "from" => "\x{415}" }, { "to" => "Y\x{eb}", "from" => "\x{401}", "context" => { "after" => "[\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{419}\x{42c}\x{42a}\x{410}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}e]" } }, { "to" => "Y\x{eb}", "from" => "\x{401}", "context" => { "after" => "\\b" } }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "Y\x{b7}", "from" => "\x{419}", "context" => { "before" => "[\x{410}\x{423}\x{42b}\x{42d}\x{430}\x{443}\x{44b}\x{44d}]" } }, { "to" => "Y", "from" => "\x{419}" }, { "to" => "Y\x{b7}", "from" => "\x{42b}", "context" => { "before" => "[\x{410}\x{423}\x{42b}\x{42d}\x{430}\x{443}\x{44b}\x{44d}]" } }, { "to" => "\x{b7}Y", "from" => "\x{42b}", "context" => { "after" => "[\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{419}\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}e\x{eb}Y]" } }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "\x{b7}E", "from" => "\x{42d}", "context" => { "after" => "[\x{411}\x{412}\x{413}\x{414}\x{416}\x{417}\x{41a}\x{41b}\x{41c}\x{41d}\x{41f}\x{420}\x{421}\x{422}\x{424}\x{425}\x{426}\x{427}\x{428}\x{429}\x{431}\x{432}\x{433}\x{434}\x{436}\x{437}\x{43a}\x{43b}\x{43c}\x{43d}\x{43f}\x{440}\x{441}\x{442}\x{444}\x{445}\x{446}\x{447}\x{448}\x{449}]" } }, { "to" => "E", "from" => "\x{42d}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "T\x{b7}S", "from" => "\x{422}\x{421}" }, { "to" => "T\x{b7}s", "from" => "\x{422}\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "Kh", "from" => "\x{425}" }, { "to" => "Ts", "from" => "\x{426}" }, { "to" => "Sh\x{b7}Ch", "from" => "\x{428}\x{427}" }, { "to" => "Sh\x{b7}ch", "from" => "\x{428}\x{447}" }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "Shch", "from" => "\x{429}" }, { "to" => "''", "from" => "\x{42a}" }, { "to" => "'", "from" => "\x{42c}" }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "ye", "from" => "\x{435}", "context" => { "after" => "[AE\x{cb}IOUYe\x{eb}au'\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}\x{b7}]" } }, { "to" => "ye", "from" => "\x{435}", "context" => { "after" => "\\b" } }, { "to" => "e", "from" => "\x{435}" }, { "to" => "y\x{eb}", "from" => "\x{451}", "context" => { "after" => "[AE\x{cb}IOUYe\x{eb}au'\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}\x{b7}]" } }, { "to" => "y\x{eb}", "from" => "\x{451}", "context" => { "after" => "\\b" } }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "y\x{b7}", "from" => "\x{439}", "context" => { "before" => "[AUYE\x{430}\x{443}\x{44b}\x{44d}]" } }, { "to" => "y", "from" => "\x{439}" }, { "to" => "y\x{b7}", "from" => "\x{44b}", "context" => { "before" => "[AUYE\x{b7}\x{430}\x{443}\x{44b}\x{44d}]" } }, { "to" => "\x{b7}y", "from" => "\x{44b}", "context" => { "after" => "[AE\x{cb}IOUYaue\x{eb}y\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}]" } }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "\x{b7}e", "from" => "\x{44d}", "context" => { "after" => "[BVGDZhKLMNPRSTsFCSc\x{431}\x{432}\x{433}\x{434}\x{436}\x{437}\x{43a}\x{43b}\x{43c}\x{43d}\x{43f}\x{440}\x{441}\x{442}\x{444}\x{445}\x{446}\x{447}\x{448}\x{449}]" } }, { "to" => "e", "from" => "\x{44d}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "t\x{b7}s", "from" => "\x{442}\x{441}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "kh", "from" => "\x{445}" }, { "to" => "ts", "from" => "\x{446}" }, { "to" => "sh\x{b7}ch", "from" => "\x{448}\x{447}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "shch", "from" => "\x{449}" }, { "to" => "''", "from" => "\x{44a}" }, { "to" => "'", "from" => "\x{44c}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "ya", "from" => "\x{44f}" } ], "reverse" => "false" }, "iso_843" => { "desc" => "ISO 843:1997 TL (Type 1), Greek to Latin", "name" => "ISO 843", "id" => "iso_843", "rules" => [ { "to" => "A", "from" => "\x{391}" }, { "to" => "a", "from" => "\x{3b1}" }, { "to" => "V", "from" => "\x{392}" }, { "to" => "v", "from" => "\x{3b2}" }, { "to" => "G", "from" => "\x{393}" }, { "to" => "g", "from" => "\x{3b3}" }, { "to" => "D", "from" => "\x{394}" }, { "to" => "d", "from" => "\x{3b4}" }, { "to" => "E", "from" => "\x{395}" }, { "to" => "e", "from" => "\x{3b5}" }, { "to" => "Z", "from" => "\x{396}" }, { "to" => "z", "from" => "\x{3b6}" }, { "to" => "\x{12a}", "from" => "\x{397}" }, { "to" => "\x{12b}", "from" => "\x{3b7}" }, { "to" => "Th", "from" => "\x{398}" }, { "to" => "th", "from" => "\x{3b8}" }, { "to" => "I", "from" => "\x{399}" }, { "to" => "i", "from" => "\x{3b9}" }, { "to" => "K", "from" => "\x{39a}" }, { "to" => "k", "from" => "\x{3ba}" }, { "to" => "L", "from" => "\x{39b}" }, { "to" => "l", "from" => "\x{3bb}" }, { "to" => "M", "from" => "\x{39c}" }, { "to" => "m", "from" => "\x{3bc}" }, { "to" => "N", "from" => "\x{39d}" }, { "to" => "n", "from" => "\x{3bd}" }, { "to" => "X", "from" => "\x{39e}" }, { "to" => "x", "from" => "\x{3be}" }, { "to" => "O", "from" => "\x{39f}" }, { "to" => "o", "from" => "\x{3bf}" }, { "to" => "P", "from" => "\x{3a0}" }, { "to" => "p", "from" => "\x{3c0}" }, { "to" => "R", "from" => "\x{3a1}" }, { "to" => "r", "from" => "\x{3c1}" }, { "to" => "S", "from" => "\x{3a3}" }, { "to" => "s", "from" => "\x{3c2}" }, { "to" => "s", "from" => "\x{3c3}" }, { "to" => "T", "from" => "\x{3a4}" }, { "to" => "t", "from" => "\x{3c4}" }, { "to" => "Y", "from" => "\x{3a5}" }, { "to" => "y", "from" => "\x{3c5}" }, { "to" => "F", "from" => "\x{3a6}" }, { "to" => "f", "from" => "\x{3c6}" }, { "to" => "Ch", "from" => "\x{3a7}" }, { "to" => "ch", "from" => "\x{3c7}" }, { "to" => "Ps", "from" => "\x{3a8}" }, { "to" => "ps", "from" => "\x{3c8}" }, { "to" => "\x{14c}", "from" => "\x{3a9}" }, { "to" => "\x{14d}", "from" => "\x{3c9}" }, { "to" => "S", "from" => "\x{3da}" }, { "to" => "s", "from" => "\x{3db}" }, { "to" => "W", "from" => "\x{3dc}" }, { "to" => "f", "from" => "\x{3dd}" }, { "to" => "j", "from" => "\x{3f3}" }, { "to" => "\x{b4}", "from" => "\x{384}" }, { "to" => "\x{a8}\x{301}", "from" => "\x{385}" }, { "to" => "\x{302}", "from" => "\x{342}" }, { "to" => "\x{2bc}", "from" => "\x{343}" }, { "to" => "\x{2bc}", "from" => "\x{313}" }, { "to" => "h", "from" => "\x{314}" }, { "to" => "\x{327}", "from" => "\x{345}" }, { "to" => "\x{327}", "from" => "\x{345}" }, { "to" => "\x{c1}", "from" => "\x{386}" }, { "to" => "\x{e1}", "from" => "\x{3ac}" }, { "to" => "\x{c9}", "from" => "\x{388}" }, { "to" => "\x{e9}", "from" => "\x{3ad}" }, { "to" => "\x{12a}\x{301}", "from" => "\x{389}" }, { "to" => "\x{12b}\x{301}", "from" => "\x{3ae}" }, { "to" => "\x{cd}", "from" => "\x{38a}" }, { "to" => "\x{ed}", "from" => "\x{3af}" }, { "to" => "\x{d3}", "from" => "\x{38c}" }, { "to" => "\x{f3}", "from" => "\x{3cc}" }, { "to" => "\x{dd}", "from" => "\x{38e}" }, { "to" => "\x{fd}", "from" => "\x{3cd}" }, { "to" => "\x{1e52}", "from" => "\x{38f}" }, { "to" => "\x{1e53}", "from" => "\x{3ce}" }, { "to" => "\x{cf}", "from" => "\x{3aa}" }, { "to" => "\x{ef}", "from" => "\x{3ca}" }, { "to" => "\x{178}", "from" => "\x{3ab}" }, { "to" => "\x{ff}", "from" => "\x{3cb}" }, { "to" => "\x{1e2f}", "from" => "\x{390}" }, { "to" => "\x{ff}\x{301}", "from" => "\x{3b0}" }, { "to" => "?", "from" => "\x{37e}", "context" => { "after" => "\\b" } }, { "to" => "?", "from" => ";", "context" => { "after" => "\\b" } }, { "to" => ";", "from" => "\x{b7}" }, { "to" => "-", "from" => "\x{203f}" } ], "reverse" => "false" }, "din_31634" => { "desc" => "DIN 31634:1982, Greek to Latin", "name" => "DIN 31634", "id" => "din_31634", "rules" => [ { "to" => "AU", "from" => "\x{391}\x{3a5}" }, { "to" => "au", "from" => "\x{3b1}\x{3c5}" }, { "to" => "Au", "from" => "\x{391}\x{3c5}" }, { "to" => "A\x{178}", "from" => "\x{391}\x{3ab}" }, { "to" => "a\x{ff}", "from" => "\x{3b1}\x{3cb}" }, { "to" => "NG", "from" => "\x{393}\x{393}" }, { "to" => "ng", "from" => "\x{3b3}\x{3b3}" }, { "to" => "Ng", "from" => "\x{393}\x{3b3}" }, { "to" => "GK", "from" => "\x{393}\x{39a}", "context" => { "after" => "\\b" } }, { "to" => "gk", "from" => "\x{3b3}\x{3ba}", "context" => { "after" => "\\b" } }, { "to" => "Gk", "from" => "\x{393}\x{3ba}", "context" => { "after" => "\\b" } }, { "to" => "NK", "from" => "\x{393}\x{39a}" }, { "to" => "nk", "from" => "\x{3b3}\x{3ba}" }, { "to" => "Nk", "from" => "\x{393}\x{3ba}" }, { "to" => "NX", "from" => "\x{393}\x{39e}" }, { "to" => "nx", "from" => "\x{3b3}\x{3be}" }, { "to" => "Nx", "from" => "\x{393}\x{3be}" }, { "to" => "nch", "from" => "\x{393}\x{3a7}" }, { "to" => "nch", "from" => "\x{3b3}\x{3c7}" }, { "to" => "Nch", "from" => "\x{393}\x{3c7}" }, { "to" => "EU", "from" => "\x{395}\x{3a5}" }, { "to" => "eu", "from" => "\x{3b5}\x{3c5}" }, { "to" => "Eu", "from" => "\x{395}\x{3c5}" }, { "to" => "\x{112}U", "from" => "\x{397}\x{3a5}" }, { "to" => "\x{113}u", "from" => "\x{3b7}\x{3c5}" }, { "to" => "\x{112}u", "from" => "\x{397}\x{3c5}" }, { "to" => "U", "from" => "\x{39f}\x{3a5}" }, { "to" => "u", "from" => "\x{3bf}\x{3c5}" }, { "to" => "U", "from" => "\x{39f}\x{3c5}" }, { "to" => "O\x{178}", "from" => "\x{39f}\x{3ab}" }, { "to" => "o\x{ff}", "from" => "\x{3bf}\x{3cb}" }, { "to" => "A", "from" => "\x{391}" }, { "to" => "a", "from" => "\x{3b1}" }, { "to" => "B", "from" => "\x{392}" }, { "to" => "b", "from" => "\x{3b2}" }, { "to" => "G", "from" => "\x{393}" }, { "to" => "g", "from" => "\x{3b3}" }, { "to" => "D", "from" => "\x{394}" }, { "to" => "d", "from" => "\x{3b4}" }, { "to" => "E", "from" => "\x{395}" }, { "to" => "e", "from" => "\x{3b5}" }, { "to" => "Z", "from" => "\x{396}" }, { "to" => "z", "from" => "\x{3b6}" }, { "to" => "\x{112}", "from" => "\x{397}" }, { "to" => "\x{113}", "from" => "\x{3b7}" }, { "to" => "Th", "from" => "\x{398}" }, { "to" => "th", "from" => "\x{3b8}" }, { "to" => "th", "from" => "\x{3d1}" }, { "to" => "I", "from" => "\x{399}" }, { "to" => "i", "from" => "\x{3b9}" }, { "to" => "K", "from" => "\x{39a}" }, { "to" => "k", "from" => "\x{3ba}" }, { "to" => "L", "from" => "\x{39b}" }, { "to" => "l", "from" => "\x{3bb}" }, { "to" => "M", "from" => "\x{39c}" }, { "to" => "m", "from" => "\x{3bc}" }, { "to" => "N", "from" => "\x{39d}" }, { "to" => "n", "from" => "\x{3bd}" }, { "to" => "X", "from" => "\x{39e}" }, { "to" => "x", "from" => "\x{3be}" }, { "to" => "O", "from" => "\x{39f}" }, { "to" => "o", "from" => "\x{3bf}" }, { "to" => "P", "from" => "\x{3a0}" }, { "to" => "p", "from" => "\x{3c0}" }, { "to" => "R", "from" => "\x{3a1}" }, { "to" => "r", "from" => "\x{3c1}" }, { "to" => "S", "from" => "\x{3a3}" }, { "to" => "s", "from" => "\x{3c3}" }, { "to" => "s", "from" => "\x{3c2}", "context" => { "before" => "\\b" } }, { "to" => "T", "from" => "\x{3a4}" }, { "to" => "t", "from" => "\x{3c4}" }, { "to" => "Y", "from" => "\x{3a5}" }, { "to" => "y", "from" => "\x{3c5}" }, { "to" => "Ph", "from" => "\x{3a6}" }, { "to" => "ph", "from" => "\x{3c6}" }, { "to" => "ph", "from" => "\x{3d5}" }, { "to" => "Ch", "from" => "\x{3a7}" }, { "to" => "ch", "from" => "\x{3c7}" }, { "to" => "Ps", "from" => "\x{3a8}" }, { "to" => "ps", "from" => "\x{3c8}" }, { "to" => "\x{14c}", "from" => "\x{3a9}" }, { "to" => "\x{14d}", "from" => "\x{3c9}" }, { "to" => "A", "from" => "\x{386}" }, { "to" => "a", "from" => "\x{3ac}" }, { "to" => "E", "from" => "\x{388}" }, { "to" => "e", "from" => "\x{3ad}" }, { "to" => "\x{112}", "from" => "\x{389}" }, { "to" => "\x{113}", "from" => "\x{3ae}" }, { "to" => "I", "from" => "\x{38a}" }, { "to" => "i", "from" => "\x{3af}" }, { "to" => "I", "from" => "\x{3aa}" }, { "to" => "i", "from" => "\x{3ca}" }, { "to" => "i", "from" => "\x{390}" }, { "to" => "O", "from" => "\x{38c}" }, { "to" => "o", "from" => "\x{3cc}" }, { "to" => "Y", "from" => "\x{38e}" }, { "to" => "y", "from" => "\x{3cd}" }, { "to" => "Y", "from" => "\x{3ab}" }, { "to" => "y", "from" => "\x{3cb}" }, { "to" => "y", "from" => "\x{3b0}" }, { "to" => "\x{14c}", "from" => "\x{38f}" }, { "to" => "\x{14d}", "from" => "\x{3ce}" }, { "to" => "?", "from" => "\x{37e}" }, { "to" => "?", "from" => ";" }, { "to" => ";", "from" => "\x{b7}" }, { "to" => "", "from" => "\x{384}" }, { "to" => "", "from" => "\x{385}" }, { "to" => "", "from" => "\x{342}" }, { "to" => "", "from" => "\x{343}" }, { "to" => "", "from" => "\x{313}" }, { "to" => "", "from" => "\x{314}" }, { "to" => "", "from" => "\x{345}" }, { "to" => "", "from" => "\x{345}" } ], "reverse" => "false" }, "common_ces" => { "desc" => "Czech without diacritics", "name" => "Common CES", "id" => "common_ces", "rules" => [ { "to" => "A", "from" => "\x{c1}" }, { "to" => "a", "from" => "\x{e1}" }, { "to" => "C", "from" => "\x{10c}" }, { "to" => "c", "from" => "\x{10d}" }, { "to" => "D", "from" => "\x{10e}" }, { "to" => "d", "from" => "\x{10f}" }, { "to" => "d", "from" => "d\x{30c}" }, { "to" => "E", "from" => "\x{c9}" }, { "to" => "e", "from" => "\x{e9}" }, { "to" => "E", "from" => "\x{11a}" }, { "to" => "e", "from" => "\x{11b}" }, { "to" => "I", "from" => "\x{cd}" }, { "to" => "i", "from" => "\x{ed}" }, { "to" => "N", "from" => "\x{147}" }, { "to" => "n", "from" => "\x{148}" }, { "to" => "O", "from" => "\x{d3}" }, { "to" => "o", "from" => "\x{f3}" }, { "to" => "R", "from" => "\x{158}" }, { "to" => "r", "from" => "\x{159}" }, { "to" => "S", "from" => "\x{160}" }, { "to" => "s", "from" => "\x{161}" }, { "to" => "T", "from" => "\x{164}" }, { "to" => "t", "from" => "\x{165}" }, { "to" => "t", "from" => "t\x{30c};" }, { "to" => "U", "from" => "\x{da}" }, { "to" => "u", "from" => "\x{fa}" }, { "to" => "U", "from" => "\x{16e}" }, { "to" => "u", "from" => "\x{16f}" }, { "to" => "Y", "from" => "\x{dd}" }, { "to" => "y", "from" => "\x{fd}" }, { "to" => "Z", "from" => "\x{17d}" }, { "to" => "z", "from" => "\x{17e}" } ], "reverse" => "false" }, "din_1460_ukr" => { "desc" => "DIN 1460:1982, Cyrillic to Latin, Ukrainian", "name" => "DIN 1460 UKR", "id" => "din_1460_ukr", "rules" => [ { "to" => "je", "from" => "\x{454}" }, { "to" => "JE", "from" => "\x{404}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Je", "from" => "\x{404}" }, { "to" => "ch", "from" => "\x{445}" }, { "to" => "CH", "from" => "\x{425}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{425}" }, { "to" => "\x{161}\x{10d}", "from" => "\x{449}" }, { "to" => "\x{160}\x{10c}", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "\x{160}\x{10d}", "from" => "\x{429}" }, { "to" => "ju", "from" => "\x{44e}" }, { "to" => "JU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ju", "from" => "\x{42e}" }, { "to" => "ja", "from" => "\x{44f}" }, { "to" => "JA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ja", "from" => "\x{42f}" }, { "to" => "J-", "from" => "\x{419}", "context" => { "before" => "[aueAUE\x{430}\x{443}\x{435}\x{410}\x{423}\x{415}]" } }, { "to" => "j-", "from" => "\x{439}", "context" => { "before" => "[aue\x{430}\x{443}\x{435}]" } }, { "to" => "\x{160}-", "from" => "\x{428}", "context" => { "before" => "[\x{10c}\x{10d}\x{427}\x{447}]" } }, { "to" => "\x{161}-", "from" => "\x{448}", "context" => { "before" => "[\x{10d}\x{447}]" } }, { "to" => "c-", "from" => "\x{446}", "context" => { "before" => "[h\x{433}]" } }, { "to" => "C-", "from" => "\x{426}", "context" => { "before" => "[hH\x{433}\x{413}]" } }, { "to" => "a", "from" => "\x{430}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "h", "from" => "\x{433}" }, { "to" => "H", "from" => "\x{413}" }, { "to" => "g", "from" => "\x{491}" }, { "to" => "G", "from" => "\x{490}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "\x{17e}", "from" => "\x{436}" }, { "to" => "\x{17d}", "from" => "\x{416}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "y", "from" => "\x{438}" }, { "to" => "Y", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{456}" }, { "to" => "I", "from" => "\x{406}" }, { "to" => "\x{ef}", "from" => "\x{457}" }, { "to" => "\x{cf}", "from" => "\x{407}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "c", "from" => "\x{446}" }, { "to" => "C", "from" => "\x{426}" }, { "to" => "\x{10d}", "from" => "\x{447}" }, { "to" => "\x{10c}", "from" => "\x{427}" }, { "to" => "\x{161}", "from" => "\x{448}" }, { "to" => "\x{160}", "from" => "\x{428}" }, { "to" => "'", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "'", "from" => "\x{44c}" }, { "to" => "\x{2ee}", "from" => "\x{2bc}" } ], "reverse" => "true" }, "bgn/pcgn_rus_standard" => { "desc" => "BGN/PCGN:1947 (Standard Variant), Cyrillic to Latin, Russian", "name" => "BGN/PCGN RUS Standard", "id" => "bgn/pcgn_rus_standard", "rules" => [ { "to" => "", "from" => "\x{301}" }, { "to" => "Ye", "from" => "\x{415}", "context" => { "after" => "[\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{419}\x{42c}\x{42a}\x{410}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}]" } }, { "to" => "Ye", "from" => "\x{415}", "context" => { "after" => "\\b" } }, { "to" => "E", "from" => "\x{415}" }, { "to" => "Y\x{eb}", "from" => "\x{401}", "context" => { "after" => "[\x{410}\x{415}\x{401}\x{418}\x{41e}\x{423}\x{42b}\x{42d}\x{42e}\x{42f}\x{419}\x{42c}\x{42a}\x{410}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}e]" } }, { "to" => "Y\x{eb}", "from" => "\x{401}", "context" => { "after" => "\\b" } }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "Y", "from" => "\x{419}" }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "E", "from" => "\x{42d}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "Kh", "from" => "\x{425}" }, { "to" => "Ts", "from" => "\x{426}" }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "Shch", "from" => "\x{429}" }, { "to" => "''", "from" => "\x{42a}" }, { "to" => "'", "from" => "\x{42c}" }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "ye", "from" => "\x{435}", "context" => { "after" => "[AE\x{cb}IOUYe\x{eb}au'\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}]" } }, { "to" => "ye", "from" => "\x{435}", "context" => { "after" => "\\b" } }, { "to" => "e", "from" => "\x{435}" }, { "to" => "y\x{eb}", "from" => "\x{451}", "context" => { "after" => "[AE\x{cb}IOUYe\x{eb}au'\x{430}\x{435}\x{451}\x{438}\x{43e}\x{443}\x{44b}\x{44d}\x{44e}\x{44f}\x{439}\x{44c}\x{44a}]" } }, { "to" => "y\x{eb}", "from" => "\x{451}", "context" => { "after" => "\\b" } }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "y", "from" => "\x{439}" }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "e", "from" => "\x{44d}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "kh", "from" => "\x{445}" }, { "to" => "ts", "from" => "\x{446}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "shch", "from" => "\x{449}" }, { "to" => "''", "from" => "\x{44a}" }, { "to" => "'", "from" => "\x{44c}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "ya", "from" => "\x{44f}" } ], "reverse" => "false" }, "iast_devanagari" => { "desc" => "IAST to Devan\x{101}gar\x{12b}", "name" => "IAST Devanagari", "id" => "iast_devanagari", "rules" => [ { "to" => "\x{950}", "from" => "o\x{1e41}" }, { "to" => "\x{950}", "from" => "O\x{1e41}" }, { "to" => "\x{902}", "from" => "\x{1e43}" }, { "to" => "\x{903}", "from" => "\x{1e25}" }, { "to" => "\x{916}\x{94d}", "from" => "kh" }, { "to" => "\x{916}\x{94d}", "from" => "Kh" }, { "to" => "\x{915}\x{94d}", "from" => "K" }, { "to" => "\x{915}\x{94d}", "from" => "k" }, { "to" => "\x{918}\x{94d}", "from" => "gh" }, { "to" => "\x{918}\x{94d}", "from" => "Gh" }, { "to" => "\x{917}\x{94d}", "from" => "G" }, { "to" => "\x{917}\x{94d}", "from" => "g" }, { "to" => "\x{919}\x{94d}", "from" => "\x{1e44}" }, { "to" => "\x{919}\x{94d}", "from" => "\x{1e45}" }, { "to" => "\x{91b}\x{94d}", "from" => "ch" }, { "to" => "\x{91b}\x{94d}", "from" => "Ch" }, { "to" => "\x{91a}\x{94d}", "from" => "C" }, { "to" => "\x{91a}\x{94d}", "from" => "c" }, { "to" => "\x{91d}\x{94d}", "from" => "jh" }, { "to" => "\x{91d}\x{94d}", "from" => "Jh" }, { "to" => "\x{91c}\x{94d}", "from" => "J" }, { "to" => "\x{91c}\x{94d}", "from" => "j" }, { "to" => "\x{91e}\x{94d}", "from" => "\x{d1}" }, { "to" => "\x{91e}\x{94d}", "from" => "\x{f1}" }, { "to" => "\x{920}\x{94d}", "from" => "\x{1e6d}h" }, { "to" => "\x{920}\x{94d}", "from" => "\x{1e6c}h" }, { "to" => "\x{91f}\x{94d}", "from" => "\x{1e6c}" }, { "to" => "\x{91f}\x{94d}", "from" => "\x{1e6d}" }, { "to" => "\x{922}\x{94d}", "from" => "\x{1e0d}h" }, { "to" => "\x{922}\x{94d}", "from" => "\x{1e0c}h" }, { "to" => "\x{921}\x{94d}", "from" => "\x{1e0c}" }, { "to" => "\x{921}\x{94d}", "from" => "\x{1e0d}" }, { "to" => "\x{923}\x{94d}", "from" => "\x{1e46}" }, { "to" => "\x{923}\x{94d}", "from" => "\x{1e47}" }, { "to" => "\x{925}\x{94d}", "from" => "th" }, { "to" => "\x{925}\x{94d}", "from" => "Th" }, { "to" => "\x{924}\x{94d}", "from" => "T" }, { "to" => "\x{924}\x{94d}", "from" => "t" }, { "to" => "\x{927}\x{94d}", "from" => "dh" }, { "to" => "\x{927}\x{94d}", "from" => "Dh" }, { "to" => "\x{926}\x{94d}", "from" => "D" }, { "to" => "\x{926}\x{94d}", "from" => "d" }, { "to" => "\x{928}\x{94d}", "from" => "N" }, { "to" => "\x{928}\x{94d}", "from" => "n" }, { "to" => "\x{92b}\x{94d}", "from" => "ph" }, { "to" => "\x{92b}\x{94d}", "from" => "Ph" }, { "to" => "\x{92a}\x{94d}", "from" => "P" }, { "to" => "\x{92a}\x{94d}", "from" => "p" }, { "to" => "\x{92d}\x{94d}", "from" => "bh" }, { "to" => "\x{92d}\x{94d}", "from" => "Bh" }, { "to" => "\x{92c}\x{94d}", "from" => "B" }, { "to" => "\x{92c}\x{94d}", "from" => "b" }, { "to" => "\x{92e}\x{94d}", "from" => "M" }, { "to" => "\x{92e}\x{94d}", "from" => "m" }, { "to" => "\x{92f}\x{94d}", "from" => "Y" }, { "to" => "\x{92f}\x{94d}", "from" => "y" }, { "to" => "\x{930}\x{94d}", "from" => "R" }, { "to" => "\x{930}\x{94d}", "from" => "r" }, { "to" => "\x{932}\x{94d}", "from" => "L" }, { "to" => "\x{932}\x{94d}", "from" => "l" }, { "to" => "\x{935}\x{94d}", "from" => "V" }, { "to" => "\x{935}\x{94d}", "from" => "v" }, { "to" => "\x{936}\x{94d}", "from" => "\x{15a}" }, { "to" => "\x{936}\x{94d}", "from" => "\x{15b}" }, { "to" => "\x{937}\x{94d}", "from" => "\x{1e62}" }, { "to" => "\x{937}\x{94d}", "from" => "\x{1e63}" }, { "to" => "\x{938}\x{94d}", "from" => "S" }, { "to" => "\x{938}\x{94d}", "from" => "s" }, { "to" => "\x{939}\x{94d}", "from" => "H" }, { "to" => "\x{939}\x{94d}", "from" => "h" }, { "to" => "\x{948}", "from" => "\x{94d}ai" }, { "to" => "\x{94c}", "from" => "\x{94d}au" }, { "to" => "", "from" => "\x{94d}a" }, { "to" => "\x{93e}", "from" => "\x{94d}\x{101}" }, { "to" => "\x{93f}", "from" => "\x{94d}i" }, { "to" => "\x{940}", "from" => "\x{94d}\x{12b}" }, { "to" => "\x{941}", "from" => "\x{94d}u" }, { "to" => "\x{942}", "from" => "\x{94d}\x{16b}" }, { "to" => "\x{943}", "from" => "\x{94d}\x{1e5b}" }, { "to" => "\x{944}", "from" => "\x{94d}\x{1e5d}" }, { "to" => "\x{962}", "from" => "\x{94d}\x{1e37}" }, { "to" => "\x{963}", "from" => "\x{94d}\x{1e39}" }, { "to" => "\x{947}", "from" => "\x{94d}e" }, { "to" => "\x{94b}", "from" => "\x{94d}o" }, { "to" => "\x{93d}", "from" => "'" }, { "to" => "\x{910}", "from" => "ai" }, { "to" => "\x{910}", "from" => "Ai" }, { "to" => "\x{914}", "from" => "au" }, { "to" => "\x{914}", "from" => "Au" }, { "to" => "\x{905}", "from" => "a" }, { "to" => "\x{905}", "from" => "A" }, { "to" => "\x{906}", "from" => "\x{101}" }, { "to" => "\x{906}", "from" => "\x{100}" }, { "to" => "\x{907}", "from" => "i" }, { "to" => "\x{907}", "from" => "I" }, { "to" => "\x{908}", "from" => "\x{12b}" }, { "to" => "\x{908}", "from" => "\x{12a}" }, { "to" => "\x{909}", "from" => "u" }, { "to" => "\x{909}", "from" => "U" }, { "to" => "\x{90a}", "from" => "\x{16b}" }, { "to" => "\x{90a}", "from" => "\x{16a}" }, { "to" => "\x{90b}", "from" => "\x{1e5b}" }, { "to" => "\x{90b}", "from" => "\x{1e5a}" }, { "to" => "\x{960}", "from" => "\x{1e5d}" }, { "to" => "\x{960}", "from" => "\x{1e5c}" }, { "to" => "\x{90c}", "from" => "\x{1e37}" }, { "to" => "\x{90c}", "from" => "\x{1e36}" }, { "to" => "\x{961}", "from" => "\x{1e39}" }, { "to" => "\x{961}", "from" => "\x{1e38}" }, { "to" => "\x{90f}", "from" => "e" }, { "to" => "\x{90f}", "from" => "E" }, { "to" => "\x{913}", "from" => "o" }, { "to" => "\x{913}", "from" => "O" }, { "to" => "\x{967}", "from" => 1 }, { "to" => "\x{968}", "from" => 2 }, { "to" => "\x{969}", "from" => 3 }, { "to" => "\x{96a}", "from" => 4 }, { "to" => "\x{96b}", "from" => 5 }, { "to" => "\x{96c}", "from" => 6 }, { "to" => "\x{96d}", "from" => 7 }, { "to" => "\x{96e}", "from" => 8 }, { "to" => "\x{96f}", "from" => 9 }, { "to" => "\x{966}", "from" => 0 } ], "reverse" => "false" }, "din_1460_bul" => { "desc" => "DIN 1460:1982, Cyrillic to Latin, Bulgarian", "name" => "DIN 1460 BUL", "id" => "din_1460_bul", "rules" => [ { "to" => "\x{160}T", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "\x{160}t", "from" => "\x{429}" }, { "to" => "\x{161}t", "from" => "\x{449}" }, { "to" => "JU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ju", "from" => "\x{42e}" }, { "to" => "ju", "from" => "\x{44e}" }, { "to" => "JA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ja", "from" => "\x{42f}" }, { "to" => "ja", "from" => "\x{44f}" }, { "to" => "CH", "from" => "\x{425}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{425}" }, { "to" => "ch", "from" => "\x{445}" }, { "to" => "J-", "from" => "\x{419}", "context" => { "before" => "[auAU\x{430}\x{443}\x{410}\x{423}]" } }, { "to" => "j-", "from" => "\x{439}", "context" => { "before" => "[au\x{430}\x{443}]" } }, { "to" => "\x{160}-", "from" => "\x{428}", "context" => { "before" => "[tT\x{442}\x{422}]" } }, { "to" => "\x{161}-", "from" => "\x{448}", "context" => { "before" => "[t\x{442}]" } }, { "to" => "A", "from" => "\x{410}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "\x{17d}", "from" => "\x{416}" }, { "to" => "\x{17e}", "from" => "\x{436}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "C", "from" => "\x{426}" }, { "to" => "c", "from" => "\x{446}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "\x{10c}", "from" => "\x{427}" }, { "to" => "\x{10d}", "from" => "\x{447}" }, { "to" => "\x{160}", "from" => "\x{428}" }, { "to" => "\x{161}", "from" => "\x{448}" }, { "to" => "\x{102}", "from" => "\x{42a}" }, { "to" => "\x{103}", "from" => "\x{44a}" }, { "to" => "'", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "'", "from" => "\x{44c}" } ], "reverse" => "true" }, "ala-lc_rus" => { "desc" => "ALA-LC:1997, Cyrillic to Latin, Russian", "name" => "ALA-LC RUS", "id" => "ala-lc_rus", "rules" => [ { "to" => "A", "from" => "\x{410}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "\x{12a}", "from" => "\x{406}" }, { "to" => "\x{12c}", "from" => "\x{419}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "Kh", "from" => "\x{425}" }, { "to" => "TS", "from" => "\x{426}" }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "Shch", "from" => "\x{429}" }, { "to" => "", "from" => "\x{42a}", "context" => { "before" => "\\b" } }, { "to" => "\x{2033}", "from" => "\x{42a}" }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "\x{2032}", "from" => "\x{42c}" }, { "to" => "IE", "from" => "\x{462}" }, { "to" => "\x{116}", "from" => "\x{42d}" }, { "to" => "IU", "from" => "\x{42e}" }, { "to" => "IA", "from" => "\x{42f}" }, { "to" => "\x{118}", "from" => "\x{466}" }, { "to" => "\x{1e1e}", "from" => "\x{4e8}" }, { "to" => "\x{1e8e}", "from" => "\x{474}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "\x{12b}", "from" => "\x{456}" }, { "to" => "\x{12d}", "from" => "\x{439}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "kh", "from" => "\x{445}" }, { "to" => "ts", "from" => "\x{446}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "shch", "from" => "\x{449}" }, { "to" => "", "from" => "\x{44a}", "context" => { "before" => "\\b" } }, { "to" => "\x{2033}", "from" => "\x{44a}" }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "\x{2032}", "from" => "\x{44c}" }, { "to" => "ie", "from" => "\x{463}" }, { "to" => "\x{117}", "from" => "\x{44d}" }, { "to" => "iu", "from" => "\x{44e}" }, { "to" => "ia", "from" => "\x{44f}" }, { "to" => "\x{119}", "from" => "\x{467}" }, { "to" => "\x{1e1f}", "from" => "\x{4e9}" }, { "to" => "\x{1e8f}", "from" => "\x{475}" } ], "reverse" => "false" }, "iso/r_9" => { "desc" => "ISO/R 9:1954, Cyrillic to Latin", "name" => "ISO/R 9", "id" => "iso/r_9", "rules" => [ { "to" => "A", "from" => "\x{410}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G\x{300}", "from" => "\x{490}" }, { "to" => "g\x{300}", "from" => "\x{491}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "\x{1f4}", "from" => "\x{403}" }, { "to" => "\x{1f5}", "from" => "\x{453}" }, { "to" => "\x{110}", "from" => "\x{402}" }, { "to" => "\x{111}", "from" => "\x{452}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "\x{cb}", "from" => "\x{401}" }, { "to" => "\x{eb}", "from" => "\x{451}" }, { "to" => "Je", "from" => "\x{404}" }, { "to" => "je", "from" => "\x{454}" }, { "to" => "\x{17d}", "from" => "\x{416}" }, { "to" => "\x{17e}", "from" => "\x{436}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Dz", "from" => "\x{405}" }, { "to" => "dz", "from" => "\x{455}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "I", "from" => "\x{406}" }, { "to" => "i", "from" => "\x{456}" }, { "to" => "Ji", "from" => "\x{407}" }, { "to" => "ji", "from" => "\x{457}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{408}" }, { "to" => "j", "from" => "\x{458}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "LJ", "from" => "\x{409}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "Lj", "from" => "\x{409}" }, { "to" => "lj", "from" => "\x{459}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "NJ", "from" => "\x{40a}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "Nj", "from" => "\x{40a}" }, { "to" => "nj", "from" => "\x{45a}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "\x{1e30}", "from" => "\x{40c}" }, { "to" => "\x{1e31}", "from" => "\x{45c}" }, { "to" => "\x{106}", "from" => "\x{40b}" }, { "to" => "\x{107}", "from" => "\x{45b}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "\x{16c}", "from" => "\x{40e}" }, { "to" => "\x{16d}", "from" => "\x{45e}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "H", "from" => "\x{425}" }, { "to" => "h", "from" => "\x{445}" }, { "to" => "C", "from" => "\x{426}" }, { "to" => "c", "from" => "\x{446}" }, { "to" => "\x{10c}", "from" => "\x{427}" }, { "to" => "\x{10d}", "from" => "\x{447}" }, { "to" => "D\x{17d}", "from" => "\x{40f}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "D\x{17e}", "from" => "\x{40f}" }, { "to" => "d\x{17e}", "from" => "\x{45f}" }, { "to" => "\x{160}", "from" => "\x{428}" }, { "to" => "\x{161}", "from" => "\x{448}" }, { "to" => "\x{160}\x{10c}", "from" => "\x{429}" }, { "to" => "\x{161}\x{10d}", "from" => "\x{449}" }, { "to" => "Y", "from" => "\x{42a}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "y", "from" => "\x{44a}" }, { "to" => "Y", "from" => "\x{42b}" }, { "to" => "y", "from" => "\x{44b}" }, { "to" => "\x{2b9}", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "\x{2b9}", "from" => "\x{44c}" }, { "to" => "\x{11a}", "from" => "\x{462}" }, { "to" => "\x{11b}", "from" => "\x{463}" }, { "to" => "\x{c8}", "from" => "\x{42d}" }, { "to" => "\x{e8}", "from" => "\x{44d}" }, { "to" => "JU", "from" => "\x{42e}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "Ju", "from" => "\x{42e}" }, { "to" => "ju", "from" => "\x{44e}" }, { "to" => "JA", "from" => "\x{42f}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "Ja", "from" => "\x{42f}" }, { "to" => "ja", "from" => "\x{44f}" }, { "to" => "\x{226}", "from" => "\x{46a}" }, { "to" => "\x{227}", "from" => "\x{46b}" }, { "to" => "\x{1e1e}", "from" => "\x{472}" }, { "to" => "\x{1e1f}", "from" => "\x{473}" }, { "to" => "\x{1e8e}", "from" => "\x{474}" }, { "to" => "\x{1e8f}", "from" => "\x{475}" } ], "reverse" => "true" }, "common_ara" => { "desc" => "Common Romanization of Arabic", "name" => "Common ARA", "id" => "common_ara", "rules" => [ { "to" => "th", "from" => "\x{62b}" }, { "to" => "kh", "from" => "\x{62e}" }, { "to" => "sh", "from" => "\x{634}" }, { "to" => "gh", "from" => "\x{63a}" }, { "to" => "'e", "from" => "\x{639}" }, { "to" => "'e", "from" => "\x{626}" }, { "to" => "'e", "from" => "\x{624}" }, { "to" => "a", "from" => "\x{627}" }, { "to" => "a", "from" => "\x{623}" }, { "to" => "a", "from" => "\x{622}" }, { "to" => "a", "from" => "\x{649}" }, { "to" => "e", "from" => "\x{625}" }, { "to" => "b", "from" => "\x{628}" }, { "to" => "t", "from" => "\x{62a}" }, { "to" => "j", "from" => "\x{62c}" }, { "to" => "h", "from" => "\x{62d}" }, { "to" => "d", "from" => "\x{62f}" }, { "to" => "d", "from" => "\x{630}" }, { "to" => "d", "from" => "\x{636}" }, { "to" => "r", "from" => "\x{631}" }, { "to" => "z", "from" => "\x{632}" }, { "to" => "z", "from" => "\x{638}" }, { "to" => "s", "from" => "\x{633}" }, { "to" => "s", "from" => "\x{635}" }, { "to" => "t", "from" => "\x{637}" }, { "to" => "f", "from" => "\x{641}" }, { "to" => "q", "from" => "\x{642}" }, { "to" => "k", "from" => "\x{643}" }, { "to" => "l", "from" => "\x{644}" }, { "to" => "m", "from" => "\x{645}" }, { "to" => "n", "from" => "\x{646}" }, { "to" => "h", "from" => "\x{647}" }, { "to" => "h", "from" => "\x{629}" }, { "to" => "w", "from" => "\x{648}" }, { "to" => "y", "from" => "\x{64a}" }, { "to" => "'", "from" => "\x{621}" }, { "to" => "?", "from" => "\x{61f}" }, { "to" => ",", "from" => "\x{60c}" }, { "to" => "", "from" => "\x{640}" }, { "to" => "", "from" => "\x{64b}" }, { "to" => "", "from" => "\x{64c}" }, { "to" => "", "from" => "\x{64d}" }, { "to" => "", "from" => "\x{64e}" }, { "to" => "", "from" => "\x{64f}" }, { "to" => "", "from" => "\x{650}" }, { "to" => "", "from" => "\x{651}" }, { "to" => "", "from" => "\x{652}" }, { "to" => "", "from" => "\x{200f}" } ], "reverse" => "false" }, "common_deu" => { "desc" => "German umlauts", "name" => "Common DEU", "id" => "common_deu", "rules" => [ { "to" => "Ae", "from" => "\x{c4}" }, { "to" => "ae", "from" => "\x{e4}" }, { "to" => "Oe", "from" => "\x{d6}" }, { "to" => "oe", "from" => "\x{f6}" }, { "to" => "Ue", "from" => "\x{dc}" }, { "to" => "ue", "from" => "\x{fc}" }, { "to" => "SS", "from" => "\x{df}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "ss", "from" => "\x{df}" } ], "reverse" => "false" }, "gost_7.79_rus" => { "desc" => "GOST 7.79:2000, Cyrillic to Latin, Russian", "name" => "GOST 7.79 RUS", "id" => "gost_7.79_rus", "rules" => [ { "to" => "c", "from" => "\x{446}", "context" => { "before" => "[iejy\x{438}\x{435}\x{439}\x{44b}\x{44e}\x{44f}\x{44d}\x{451}]" } }, { "to" => "C", "from" => "\x{426}", "context" => { "before" => "[IEJY\x{418}\x{415}\x{419}\x{42b}\x{42e}\x{42f}\x{401}\x{42d}]" } }, { "to" => "cz", "from" => "\x{446}" }, { "to" => "CZ", "from" => "\x{426}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Cz", "from" => "\x{426}" }, { "to" => "shh", "from" => "\x{449}" }, { "to" => "SHH", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Shh", "from" => "\x{429}" }, { "to" => "yo", "from" => "\x{451}" }, { "to" => "YO", "from" => "\x{401}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yo", "from" => "\x{401}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "ZH", "from" => "\x{416}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "CH", "from" => "\x{427}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "SH", "from" => "\x{428}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "YU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "ya", "from" => "\x{44f}" }, { "to" => "YA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "``", "from" => "\x{44a}" }, { "to" => "``", "from" => "\x{42a}", "context" => { "after" => "\\p{IsUpper}", "before" => "([^\\p{IsWord}]|\$)" } }, { "to" => "y'", "from" => "\x{44b}" }, { "to" => "Y'", "from" => "\x{42b}" }, { "to" => "e`", "from" => "\x{44d}" }, { "to" => "E`", "from" => "\x{42d}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "i", "from" => "\x{438}" }, { "to" => "I", "from" => "\x{418}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "x", "from" => "\x{445}" }, { "to" => "X", "from" => "\x{425}" }, { "to" => "`", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "`", "from" => "\x{44c}" }, { "to" => "#", "from" => "\x{2116}" } ], "reverse" => "true" }, "greeklish" => { "desc" => "Greeklish (Phonetic), Greek to Latin", "name" => "Greeklish", "id" => "greeklish", "rules" => [ { "to" => "i", "from" => "\x{3b5}\x{3b9}" }, { "to" => "i", "from" => "\x{3ad}\x{3b9}" }, { "to" => "i", "from" => "\x{3b5}\x{3af}" }, { "to" => "ef", "from" => "\x{3b5}\x{3c5}" }, { "to" => "ef", "from" => "\x{3ad}\x{3c5}" }, { "to" => "ef", "from" => "\x{3b5}\x{3cd}" }, { "to" => "u", "from" => "\x{3bf}\x{3c5}" }, { "to" => "u", "from" => "\x{3bf}\x{3cd}" }, { "to" => "u", "from" => "\x{3cc}\x{3c5}" }, { "to" => "A", "from" => "\x{391}" }, { "to" => "a", "from" => "\x{3b1}" }, { "to" => "A", "from" => "\x{386}" }, { "to" => "a", "from" => "\x{3ac}" }, { "to" => "V", "from" => "\x{392}" }, { "to" => "v", "from" => "\x{3b2}" }, { "to" => "Y", "from" => "\x{393}" }, { "to" => "y", "from" => "\x{3b3}" }, { "to" => "D", "from" => "\x{394}" }, { "to" => "d", "from" => "\x{3b4}" }, { "to" => "E", "from" => "\x{395}" }, { "to" => "e", "from" => "\x{3b5}" }, { "to" => "E", "from" => "\x{388}" }, { "to" => "e", "from" => "\x{3ad}" }, { "to" => "Z", "from" => "\x{396}" }, { "to" => "z", "from" => "\x{3b6}" }, { "to" => "I", "from" => "\x{397}" }, { "to" => "i", "from" => "\x{3b7}" }, { "to" => "I", "from" => "\x{389}" }, { "to" => "i", "from" => "\x{3ae}" }, { "to" => "Th", "from" => "\x{398}" }, { "to" => "th", "from" => "\x{3b8}" }, { "to" => "I", "from" => "\x{399}" }, { "to" => "i", "from" => "\x{3b9}" }, { "to" => "I", "from" => "\x{38a}" }, { "to" => "i", "from" => "\x{3af}" }, { "to" => "I", "from" => "\x{3aa}" }, { "to" => "i", "from" => "\x{3ca}" }, { "to" => "i", "from" => "\x{390}" }, { "to" => "K", "from" => "\x{39a}" }, { "to" => "k", "from" => "\x{3ba}" }, { "to" => "L", "from" => "\x{39b}" }, { "to" => "l", "from" => "\x{3bb}" }, { "to" => "M", "from" => "\x{39c}" }, { "to" => "m", "from" => "\x{3bc}" }, { "to" => "N", "from" => "\x{39d}" }, { "to" => "n", "from" => "\x{3bd}" }, { "to" => "X", "from" => "\x{39e}" }, { "to" => "x", "from" => "\x{3be}" }, { "to" => "O", "from" => "\x{39f}" }, { "to" => "o", "from" => "\x{3bf}" }, { "to" => "O", "from" => "\x{38c}" }, { "to" => "o", "from" => "\x{3cc}" }, { "to" => "P", "from" => "\x{3a0}" }, { "to" => "p", "from" => "\x{3c0}" }, { "to" => "R", "from" => "\x{3a1}" }, { "to" => "r", "from" => "\x{3c1}" }, { "to" => "S", "from" => "\x{3a3}" }, { "to" => "s", "from" => "\x{3c3}" }, { "to" => "T", "from" => "\x{3a4}" }, { "to" => "t", "from" => "\x{3c4}" }, { "to" => "I", "from" => "\x{3a5}" }, { "to" => "i", "from" => "\x{3c5}" }, { "to" => "I", "from" => "\x{38e}" }, { "to" => "i", "from" => "\x{3cd}" }, { "to" => "I", "from" => "\x{3ab}" }, { "to" => "i", "from" => "\x{3cb}" }, { "to" => "i", "from" => "\x{3b0}" }, { "to" => "F", "from" => "\x{3a6}" }, { "to" => "f", "from" => "\x{3c6}" }, { "to" => "H", "from" => "\x{3a7}" }, { "to" => "h", "from" => "\x{3c7}" }, { "to" => "Ps", "from" => "\x{3a8}" }, { "to" => "ps", "from" => "\x{3c8}" }, { "to" => "O", "from" => "\x{3a9}" }, { "to" => "o", "from" => "\x{3c9}" }, { "to" => "O", "from" => "\x{38f}" }, { "to" => "o", "from" => "\x{3ce}" }, { "to" => "s", "from" => "\x{3c2}" }, { "to" => "?", "from" => "\x{37e}", "context" => { "after" => "\\b" } }, { "to" => "?", "from" => ";", "context" => { "after" => "\\b" } }, { "to" => ";", "from" => "\x{b7}" }, { "to" => "-", "from" => "\x{203f}" }, { "to" => "", "from" => "\x{384}" }, { "to" => "", "from" => "\x{385}" }, { "to" => "", "from" => "\x{342}" }, { "to" => "", "from" => "\x{343}" }, { "to" => "", "from" => "\x{313}" }, { "to" => "", "from" => "\x{314}" }, { "to" => "", "from" => "\x{345}" }, { "to" => "", "from" => "\x{345}" } ], "reverse" => "false" }, "gost_7.79_ukr" => { "desc" => "GOST 7.79:2000, Cyrillic to Latin, Ukrainian", "name" => "GOST 7.79 UKR", "id" => "gost_7.79_ukr", "rules" => [ { "to" => "c", "from" => "\x{446}", "context" => { "before" => "[iejy\x{438}\x{435}\x{439}\x{44e}\x{44f}\x{454}\x{456}\x{457}]" } }, { "to" => "C", "from" => "\x{426}", "context" => { "before" => "[IEJY\x{418}\x{415}\x{419}\x{42e}\x{42f}\x{404}\x{406}\x{407}]" } }, { "to" => "cz", "from" => "\x{446}" }, { "to" => "CZ", "from" => "\x{426}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Cz", "from" => "\x{426}" }, { "to" => "shh", "from" => "\x{449}" }, { "to" => "SHH", "from" => "\x{429}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Shh", "from" => "\x{429}" }, { "to" => "g`", "from" => "\x{491}" }, { "to" => "G`", "from" => "\x{490}" }, { "to" => "ye", "from" => "\x{454}" }, { "to" => "YE", "from" => "\x{404}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ye", "from" => "\x{404}" }, { "to" => "zh", "from" => "\x{436}" }, { "to" => "ZH", "from" => "\x{416}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Zh", "from" => "\x{416}" }, { "to" => "y`", "from" => "\x{438}" }, { "to" => "Y`", "from" => "\x{418}" }, { "to" => "yi", "from" => "\x{457}" }, { "to" => "YI", "from" => "\x{407}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yi", "from" => "\x{407}" }, { "to" => "ch", "from" => "\x{447}" }, { "to" => "CH", "from" => "\x{427}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ch", "from" => "\x{427}" }, { "to" => "sh", "from" => "\x{448}" }, { "to" => "SH", "from" => "\x{428}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Sh", "from" => "\x{428}" }, { "to" => "yu", "from" => "\x{44e}" }, { "to" => "YU", "from" => "\x{42e}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Yu", "from" => "\x{42e}" }, { "to" => "ya", "from" => "\x{44f}" }, { "to" => "YA", "from" => "\x{42f}", "context" => { "after" => "[\\p{IsUpper}\\p{IsSpace}]", "before" => "[\\p{IsUpper}\\p{IsSpace}]" } }, { "to" => "Ya", "from" => "\x{42f}" }, { "to" => "a", "from" => "\x{430}" }, { "to" => "A", "from" => "\x{410}" }, { "to" => "b", "from" => "\x{431}" }, { "to" => "B", "from" => "\x{411}" }, { "to" => "v", "from" => "\x{432}" }, { "to" => "V", "from" => "\x{412}" }, { "to" => "g", "from" => "\x{433}" }, { "to" => "G", "from" => "\x{413}" }, { "to" => "d", "from" => "\x{434}" }, { "to" => "D", "from" => "\x{414}" }, { "to" => "e", "from" => "\x{435}" }, { "to" => "E", "from" => "\x{415}" }, { "to" => "z", "from" => "\x{437}" }, { "to" => "Z", "from" => "\x{417}" }, { "to" => "j", "from" => "\x{439}" }, { "to" => "J", "from" => "\x{419}" }, { "to" => "i", "from" => "\x{456}" }, { "to" => "I", "from" => "\x{406}" }, { "to" => "k", "from" => "\x{43a}" }, { "to" => "K", "from" => "\x{41a}" }, { "to" => "l", "from" => "\x{43b}" }, { "to" => "L", "from" => "\x{41b}" }, { "to" => "m", "from" => "\x{43c}" }, { "to" => "M", "from" => "\x{41c}" }, { "to" => "n", "from" => "\x{43d}" }, { "to" => "N", "from" => "\x{41d}" }, { "to" => "o", "from" => "\x{43e}" }, { "to" => "O", "from" => "\x{41e}" }, { "to" => "p", "from" => "\x{43f}" }, { "to" => "P", "from" => "\x{41f}" }, { "to" => "r", "from" => "\x{440}" }, { "to" => "R", "from" => "\x{420}" }, { "to" => "s", "from" => "\x{441}" }, { "to" => "S", "from" => "\x{421}" }, { "to" => "t", "from" => "\x{442}" }, { "to" => "T", "from" => "\x{422}" }, { "to" => "u", "from" => "\x{443}" }, { "to" => "U", "from" => "\x{423}" }, { "to" => "f", "from" => "\x{444}" }, { "to" => "F", "from" => "\x{424}" }, { "to" => "x", "from" => "\x{445}" }, { "to" => "X", "from" => "\x{425}" }, { "to" => "`", "from" => "\x{42c}", "context" => { "after" => "\\p{IsUpper}" } }, { "to" => "`", "from" => "\x{44c}" }, { "to" => "#", "from" => "\x{2116}" } ], "reverse" => "true" } ); Lingua-Translit-0.29/xml/common_slk.xml0000644000175000017500000001460213076067141017444 0ustar alinkealinke Common SLK Slovak without diacritics false Á A á a Ä A ä a Č C č c Ď D ď d d É E é e Í I í i Ĺ L ĺ l Ľ L ľ l L l Ň N ň n Ó O ó o Ŕ R ŕ r Š S š s Ť T ť t t Ú U ú u Ý Y ý y Ž Z ž z Ô O ô o DZ DZ Dz Dz dz dz DŽ DZ Dž Dz dž dz Lingua-Translit-0.29/xml/ala-lc_rus.xml0000644000175000017500000002165113076067141017327 0ustar alinkealinke ALA-LC RUS ALA-LC:1997, Cyrillic to Latin, Russian false А A Б B В V Г G Д D Е E Ё Ë Ж Zh З Z И I І Ī Й Ĭ К K Л L М M Н N О O П P Р R С S Т T У U Ф F Х Kh Ц TS Ч Ch Ч Ch Ш Sh Щ Shch Ъ \b Ъ Ы Y Ь Ѣ IE Э Ė Ю IU Я IA Ѧ Ę Ө Ѵ а a б b в v г g д d е e ё ë ж zh з z и i і ī й ĭ к k л l м m н n о o п p р r с s т t у u ф f х kh ц ts ч ch ш sh щ shch ъ \b ъ ы y ь ѣ ie э ė ю iu я ia ѧ ę ө ѵ Lingua-Translit-0.29/xml/Makefile0000644000175000017500000000207513100123740016204 0ustar alinkealinkeTARGET := tables.dump DUMP := perl xml2dump.pl -v CHECK := xmllint --noout --postvalid INDENT := xmlindent -i 4 # List of stable and supported transliteration tables TABLES := din_31634.xml \ din_1460_bul.xml din_1460_rus.xml din_1460_ukr.xml \ iso_843.xml iso_9.xml iso-r_9.xml \ iso_8859-16_ron.xml \ streamlined_system_bul.xml \ greeklish.xml \ common_deu.xml common_ron.xml common_ces.xml \ common_slk.xml common_slv.xml common_pol.xml \ common_ara.xml \ gost_7-79_rus_old.xml gost_7-79_rus.xml \ gost_7-79_ukr.xml \ ala-lc_rus.xml \ devanagari_iast.xml iast_devanagari.xml \ bgn-pcgn_rus_standard.xml bgn-pcgn_rus_strict.xml all: clean tables tables: $(DUMP) -o $(TARGET) $(TABLES) all-tables: $(DUMP) -o $(TARGET) $(filter-out template.xml,$(wildcard *.xml)) check: $(TABLES) @for xml in $^; do \ echo "Checking $$xml..."; \ $(CHECK) $$xml; \ done indent: $(TABLES) template.xml @for xml in $^; do \ $(INDENT) $$xml | perl -pe 's/[\t ]*$$//' > $$xml.$$$$; \ mv $$xml.$$$$ $$xml; \ done clean: -rm -f $(TARGET) Lingua-Translit-0.29/xml/iso_9.xml0000644000175000017500000006704213170054115016323 0ustar alinkealinke ISO 9 ISO 9:1995, Cyrillic to Latin true А A а a Ӑ Ă ӑ ă Ӓ Ä ӓ ä Ә ә Б B б b В V в v Г G г g Ґ ґ Ҕ Ğ ҕ ğ Ғ Ġ ғ ġ Д D д d Ђ Đ ђ đ Ѓ Ǵ ѓ ǵ Е E е e Ё Ë ё ë Ӗ Ĕ ӗ ĕ Є Ê є ê Ҽ ҽ Ҿ Ç̆ ҿ ç̆ Ж Ž ж ž Ӂ ӂ Ӝ ӝ Җ Ž̦ җ ž̧ З Z з z Ӟ ӟ Ѕ ѕ Ӡ Ź ӡ ź И I и i Ӥ Î ӥ î І Ì і ì Ї Ï ї ï Й J й j Ј ј ǰ К K к k Қ Ķ қ ķ Ҟ ҟ Л L л l Љ љ М M м m Н N н n Њ њ Ҥ ҥ Ң ң О O о o Ӧ Ö ӧ ö Ө Ô ө ô П P п p Ҧ ҧ Р R р r С S с s Ҫ Ç ҫ ç Т T т t Ҭ Ţ ҭ ţ Ћ Ć ћ Ű Ќ ќ У U у u У́ Ú у́ ú Ў Ŭ ў ŭ Ӱ Ü ӱ ü Ӳ Ű ӳ ű Ү Ù ү ù Ф F ф f Х H х h Ҳ ҳ Һ һ Ц C ц c Ҵ ҵ Ч Č ч č Ӵ ӵ Ӌ Ç ӌ ç Џ џ Ш Š ш š Щ Ŝ щ ŝ Ъ ʺ \p{IsUpper} ъ ʺ ʼ Ы Y ы y Ӹ Ÿ ӹ ÿ Ь ʹ \p{IsUpper} ь ʹ Э È э è Ю Û ю û Я Â я â Ҍ Ě ҍ ě Ѫ Ǎ ѫ ǎ Ѳ ѳ Ѵ ѵ Ҩ Ò ҩ ò Ӏ Lingua-Translit-0.29/xml/devanagari_iast.xml0000644000175000017500000004151713076067141020431 0ustar alinkealinke Devanagari IAST Devanāgarī to IAST false 0 9 8 7 6 5 4 3 2 1 o e ū u ī i ā a au ai ' ्o ्e ्ḹ ्ḷ ्ṝ ्ṛ ्ū ्u ्ī ि ्i ्ā ्au ्ai ह् h स् s ष् श् ś व् v ल् l र् r य् y म् m ब् b भ् bh फ् ph प् p न् n द् d ध् dh त् t थ् th ण् ड् ढ् ḍh ट् ठ् ṭh ञ् ñ ज् j झ् jh च् c छ् ch ङ् ग् g घ् gh क् k ख् kh ha sa ṣa śa va la ra ya ma ba bha pha pa na da dha ta tha ṇa ḍa ḍha ṭa ṭha ña ja jha ca cha ṅa ga gha ka kha oṁ Lingua-Translit-0.29/xml/common_slv.xml0000644000175000017500000000276313076067141017464 0ustar alinkealinke Common SLV Slovenian without diacritics false Č C č c Š S š s Ž Z ž z Lingua-Translit-0.29/xml/gost_7-79_ukr.xml0000644000175000017500000003410313076067141017621 0ustar alinkealinke GOST 7.79 UKR GOST 7.79:2000, Cyrillic to Latin, Ukrainian true ц c [iejyиейюяєії] Ц C [IEJYИЕЙЮЯЄІЇ] ц cz Ц CZ [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ц Cz щ shh Щ SHH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Shh ґ g` Ґ G` є ye Є YE [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Є Ye ж zh Ж ZH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ж Zh и y` И Y` ї yi Ї YI [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ї Yi ч ch Ч CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ч Ch ш sh Ш SH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ш Sh ю yu Ю YU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Yu я ya Я YA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ya а a А A б b Б B в v В V г g Г G д d Д D е e Е E з z З Z й j Й J і i І I к k К K л l Л L м m М M н n Н N о o О O п p П P р r Р R с s С S т t Т T у u У U ф f Ф F х x Х X Ь ` \p{IsUpper} ь ` # Lingua-Translit-0.29/xml/streamlined_system_bul.xml0000644000175000017500000002221413076067141022056 0ustar alinkealinke Streamlined System BUL The Streamlined System: 2006, Cyrillic to Latin, Bulgarian false Щ SHT [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Sht щ sht Ж ZH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ж Zh ж zh Ц TS [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ц Ts ц ts Ч CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ч Ch ч ch Ш SH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ш Sh ш sh Ю YU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Yu ю yu Я YA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ya я ya А A а a Б B б b В V в v Г G г g Д D д d Е E е e З Z з z И I и i Й Y й y К K к k Л L л l М M м m Н N н n О O о o П P п p Р R р r С S с s Т T т t У U у u Ф F ф f Х H х h Ъ A ъ a Ь Y ь y Lingua-Translit-0.29/xml/iso-r_9.xml0000644000175000017500000004641313076067141016571 0ustar alinkealinke ISO/R 9 ISO/R 9:1954, Cyrillic to Latin true А A а a Б B б b В V в v Г G г g Ґ ґ Д D д d Ѓ Ǵ ѓ ǵ Ђ Đ ђ đ Е E е e Ё Ë ё ë Є Je є je Ж Ž ж ž З Z з z Ѕ Dz ѕ dz И I и i І I і i Ї Ji ї ji Й J й j Ј J ј j К K к k Л L л l Љ LJ \p{IsUpper} Љ Lj љ lj М M м m Н N н n Њ NJ \p{IsUpper} Њ Nj њ nj О O о o П P п p Р R р r С S с s Т T т t Ќ ќ Ћ Ć ћ ć У U у u Ў Ŭ ў ŭ Ф F ф f Х H х h Ц C ц c Ч Č ч č Џ \p{IsUpper} Џ џ Ш Š ш š Щ ŠČ щ šč Ъ Y \p{IsUpper} ъ y Ы Y ы y Ь ʹ \p{IsUpper} ь ʹ Ѣ Ě ѣ ě Э È э è Ю JU \p{IsUpper} Ю Ju ю ju Я JA \p{IsUpper} Я Ja я ja Ѫ Ȧ ѫ ȧ Ѳ ѳ Ѵ ѵ Lingua-Translit-0.29/xml/gost_7-79_rus.xml0000644000175000017500000003330413076067141017633 0ustar alinkealinke GOST 7.79 RUS GOST 7.79:2000, Cyrillic to Latin, Russian true ц c [iejyиейыюяэё] Ц C [IEJYИЕЙЫЮЯЁЭ] ц cz Ц CZ [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ц Cz щ shh Щ SHH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Shh ё yo Ё YO [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ё Yo ж zh Ж ZH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ж Zh ч ch Ч CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ч Ch ш sh Ш SH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ш Sh ю yu Ю YU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Yu я ya Я YA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ya ъ `` Ъ `` ([^\p{IsWord}]|$) \p{IsUpper} ы y' Ы Y' э e` Э E` а a А A б b Б B в v В V г g Г G д d Д D е e Е E з z З Z и i И I й j Й J к k К K л l Л L м m М M н n Н N о o О O п p П P р r Р R с s С S т t Т T у u У U ф f Ф F х x Х X Ь ` \p{IsUpper} ь ` # Lingua-Translit-0.29/xml/bgn-pcgn_rus_strict.xml0000644000175000017500000005301713171071763021263 0ustar alinkealinke BGN/PCGN RUS Strict BGN/PCGN:1947 (Strict Variant), Cyrillic to Latin, Russian false ́ Е Ye [АЕЁИОУЫЭЮЯЙЬЪаеёиоуыэюяйьъ] Е Ye \b Е E Ё [АЕЁИОУЫЭЮЯЙЬЪаеёиоуыэюяйьъe] Ё \b Ё Ë Й [АУЫЭауыэ] Й Y Ы [АУЫЭауыэ] Ы ·Y [АЕЁИОУЫЭЮЯЙаеёиоуыэюяйeëY] Ы Y Э ·E [БВГДЖЗКЛМНПРСТФХЦЧШЩбвгджзклмнпрстфхцчшщ] Э E А A Б B В V Г G Д D Ж Zh З Z И I К K Л L М M Н N О O П P Р R ТС T·S Тс T·s С S Т T У U Ф F Х Kh Ц Ts ШЧ Sh·Ch Шч Sh·ch Ч Ch Ш Sh Щ Shch Ъ '' Ь ' Ю Yu Я Ya е ye [AEËIOUYeëau'аеёиоуыэюяйьъ·] е ye \b е e ё [AEËIOUYeëau'аеёиоуыэюяйьъ·] ё \b ё ë й [AUYEауыэ] й y ы [AUYE·ауыэ] ы ·y [AEËIOUYaueëyаеёиоуыэюя] ы y э ·e [BVGDZhKLMNPRSTsFCScбвгджзклмнпрстфхцчшщ] э e а a б b в v г g д d ж zh з z и i к k л l м m н n о o п p р r тс t·s с s т t у u ф f х kh ц ts шч sh·ch ч ch ш sh щ shch ъ '' ь ' ю yu я ya Lingua-Translit-0.29/xml/din_1460_bul.xml0000644000175000017500000002743513076067141017401 0ustar alinkealinke DIN 1460 BUL DIN 1460:1982, Cyrillic to Latin, Bulgarian true Щ ŠT [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Št щ št Ю JU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Ju ю ju Я JA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ja я ja Х CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Х Ch х ch Й J- [auAUауАУ] й j- [auау] Ш Š- [tTтТ] ш š- [tт] А A а a Б B б b В V в v Г G г g Д D д d Е E е e Ж Ž ж ž З Z з z И I и i Й J й j К K к k Л L л l М M м m Н N н n О O о o П P п p Р R р r Т T т t У U у u Ф F ф f Ц C ц c С S с s Ч Č ч č Ш Š ш š Ъ Ă ъ ă Ь ' \p{IsUpper} ь ' Lingua-Translit-0.29/xml/common_ces.xml0000644000175000017500000001130413076067141017421 0ustar alinkealinke Common CES Czech without diacritics false Á A á a Č C č c Ď D ď d d É E é e Ě E ě e Í I í i Ň N ň n Ó O ó o Ř R ř r Š S š s Ť T ť t ť; t Ú U ú u Ů U ů u Ý Y ý y Ž Z ž z Lingua-Translit-0.29/xml/din_31634.xml0000644000175000017500000003453713076067141016626 0ustar alinkealinke DIN 31634 DIN 31634:1982, Greek to Latin false ΑΥ AU αυ au Αυ Au ΑΫ αϋ aÿ ΓΓ NG γγ ng Γγ Ng ΓΚ GK \b γκ gk \b Γκ Gk \b ΓΚ NK γκ nk Γκ Nk ΓΞ NX γξ nx Γξ Nx ΓΧ nch γχ nch Γχ Nch ΕΥ EU ευ eu Ευ Eu ΗΥ ĒU ηυ ēu Ηυ Ēu ΟΥ U ου u Ου U ΟΫ οϋ oÿ Α A α a Β B β b Γ G γ g Δ D δ d Ε E ε e Ζ Z ζ z Η Ē η ē Θ Th θ th ϑ th Ι I ι i Κ K κ k Λ L λ l Μ M μ m Ν N ν n Ξ X ξ x Ο O ο o Π P π p Ρ R ρ r Σ S σ s ς s \b Τ T τ t Υ Y υ y Φ Ph φ ph ϕ ph Χ Ch χ ch Ψ Ps ψ ps Ω Ō ω ō Ά A ά a Έ E έ e Ή Ē ή ē Ί I ί i Ϊ I ϊ i ΐ i Ό O ό o Ύ Y ύ y Ϋ Y ϋ y ΰ y Ώ Ō ώ ō ; ? ; ? · ; ΄ ΅ ͂ ̓ ̓ ̔ ͅ ͅ Lingua-Translit-0.29/xml/template.xml0000644000175000017500000000227713076067141017123 0ustar alinkealinke X Y ä ae ä ae A B x y Lingua-Translit-0.29/xml/gost_7-79_rus_old.xml0000644000175000017500000004123113076067141020467 0ustar alinkealinke GOST 7.79 RUS OLD GOST 7.79:2000, Cyrillic to Latin with support for Old Russian (pre 1918), Russian false і i' [^аеёиоуыэюяэёѣѵі] І I' [^АЕЁИОУЫЭЮЯЁЭѢѴІ] і i І I ц c [iejyиейыюя] Ц C [IEJYИЕЙЫЮЯ] ц cz Ц CZ [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ц Cz а a А A б b Б B в v В V г g Г G д d Д D е e Е E ё yo Ё YO [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ё Yo ж zh Ж ZH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ж Zh з z З Z и i И I й j Й J к k К K л l Л L м m М M н n Н N о o О O п p П P р r Р R с s С S т t Т T у u У U ф f Ф F х x Х X ч ch Ч CH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ч Ch ш sh Ш SH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ш Sh щ shh Щ SHH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Щ Shh ъ `` Ъ `` ы y' Ы Y' Ь ` ь ` э e` Э E` ю yu Ю YU [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ю Yu я ya Я YA [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Я Ya ѣ ye Ѣ YE [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ѣ Ye ѳ fh Ѳ FH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ѳ Fh ѵ yh Ѵ YH [\p{IsUpper}\p{IsSpace}] [\p{IsUpper}\p{IsSpace}] Ѵ Yh #