# orgcard2txt.pl - a script to generate orgcard.txt from orgcard.tex
# Copyright (C) 2010, 2013 Osamu OKANO
#
# Version: 0.1
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# Usage:
# ======
# perl orgcard2txt.pl orgcard.tex > orgcard.txt
use strict;
use warnings;
sub rep_esc{
my $s = shift @_;
$s =~ s/\\kbd{([^}]+)}/$1/g;
$s =~ s/\$\^([0-9])\$/[$1]/g;
$s =~ s/\\rm //g;
$s =~ s/\\\///g;
$s =~ s/\\\^{}/^/g;
$s =~ s/\\}/}/g;
$s =~ s/\\{/{/g;
$s =~ s/\\\#/#/g;
$s =~ s/\\\^/^/g;
$s =~ s/\\\%/%/g;
$s =~ s/\\\_/_/g;
$s =~ s/\\\&/&/g;
$s =~ s/\\\$/\$/g;
$s =~ s/\$\\leftrightarrow\$/<->/g;
$s =~ s/\$\\pm 1\$/±1/g;
$s =~ s/``{\\tt ([^}]+)}''/`$1'/g;
return $s;
}
my $page=0;
my $orgversionnumber;
open(IN,$ARGV[0]);
while(){
last if(/\f/);
$orgversionnumber = $1 if /\\def\\orgversionnumber{([^}]+)}/;
}
close(IN);
print <){
if(/\f/){
$page = $page + 1;
next;
}
next if($page != 1);
next if(/^%/);
next if /Org Mode Reference Card \([12]\/2\)/;
next if /\\centerline{\(for version \\orgversionnumber\)}/;
next if /\(for version \)/;
next if /\\newcolumn/;
next if /\\copyrightnotice/;
next if /\\bye/;
next if /\\title{([^}]+)}/;
chomp;
# print "b:$_\n";
s/([^\\])\%.+$/$1/;
# print "a:$_\n";
if (/\\section{(.+)}/){
my $sec = rep_esc($1);
print "================================================================================\n";
print "$sec\n";
print "================================================================================\n";
next;
}
if (/{\\bf (.+)}/){
my $bf = rep_esc($1);
print "--------------------------------------------------------------------------------\n";
print "$bf\n";
print "--------------------------------------------------------------------------------\n";
next;
}
if (/^{\\it (.+)}/){
my $it = rep_esc($1);
print "--------------------------------------------------------------------------------\n";
print "$it\n";
print "--------------------------------------------------------------------------------\n";
next;
}
if(/^\\key{(.+)}\s*$/||/^\\metax{(.+)}\s*$/){
my ($k,$v) = split(/}{/,$1);
my $k2 = &rep_esc($k);
my $v2 = &rep_esc($v);
# print "$k2\t$v2\n";
($key,$value)=($k2,$v2);
write;
next;
}
my $line = rep_esc($_);
$line =~ s/{\\it ([^}]+)}/$1/g;
$line =~ s/{\\tt ([^}]+)}/$1/g;
print "$line\n";
}
close(IN);