#!/usr/bin/perl
# This script converts html.cfg and links.cfg files of Links and older ELinks
# versions to the new ELinks' elinks.conf. Intended use:
#
# cat .links/html.cfg .links/links.cfg .links/user.cfg |
# conf-links2elinks.pl > .config/elinks/elinks.conf
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
# this emulates #! processing on NIH machines.
# (remove #! line above if indigestible)
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
# process any FOO=bar switches
$[ = 1; # set array base to 1
$, = ' '; # set output field separator
$\ = "\n"; # set output record separator
print <) {
chomp; # strip record separator
@Fld = split(' ', $_, 9999);
###
### links.conf
###
if ($Fld[1] eq 'accesskey_enter') {
print 'set document.browse.accesskey.auto_follow = ' . $Fld[2];
}
if ($Fld[1] eq 'accesskey_priority') {
print 'set document.browse.accesskey.priority = ' . $Fld[2];
}
if ($Fld[1] eq 'allow_special_files') {
print 'set protocol.file.allow_special_files = ' . $Fld[2];
}
if ($Fld[1] eq 'async_dns') {
print 'set connection.async_dns = ' . $Fld[2];
}
if ($Fld[1] eq 'color_dirs') {
print 'set document.browse.links.color_dirs = ' . $Fld[2];
}
if ($Fld[1] eq 'cookies_accept') {
print 'set cookies.accept_policy = ' . $Fld[2];
}
if ($Fld[1] eq 'cookies_paranoid_security') {
print 'set cookies.paranoid_security = ' . $Fld[2];
}
if ($Fld[1] eq 'cookies_save') {
print 'set cookies.save = ' . $Fld[2];
}
if ($Fld[1] eq 'cookies_resave') {
print 'set cookies.resave = ' . $Fld[2];
}
if ($Fld[1] eq 'download_dir') {
print 'set document.download.directory = ' . $Fld[2];
}
if ($Fld[1] eq 'download_utime') {
print 'set document.download.set_original_time = ' . $Fld[2];
}
if ($Fld[1] eq 'dump_width') {
print 'set document.dump.width = ' . $Fld[2];
}
if ($Fld[1] eq 'format_cache_size') {
print 'set document.cache.format.size = ' . $Fld[2];
}
if ($Fld[1] eq 'form_submit_auto') {
print 'set document.browse.forms.auto_submit = ' . $Fld[2];
}
if ($Fld[1] eq 'form_submit_confirm') {
print 'set document.browse.forms.confirm_submit = ' . $Fld[2];
}
if ($Fld[1] eq 'ftp.anonymous_password') {
print 'set protocol.ftp.anon_passwd = ' . $Fld[2];
}
if ($Fld[1] eq 'ftp_proxy') {
print 'set protocol.ftp.proxy.host = ' . $Fld[2];
}
if ($Fld[1] eq 'http_bugs.allow_blacklist') {
print 'set protocol.http.bugs.allow_blacklist = ' . $Fld[2];
}
if ($Fld[1] eq 'http_bugs.bug_302_redirect') {
print 'set protocol.http.bugs.broken_302_redirect = ' . $Fld[2];
}
if ($Fld[1] eq 'http_bugs.bug_post_no_keepalive') {
print 'set protocol.http.bugs.post_no_keepalive = ' . $Fld[2];
}
if ($Fld[1] eq 'http_bugs.http10') {
print 'set protocol.http.bugs.http10 = ' . $Fld[2];
}
if ($Fld[1] eq 'http_proxy') {
print 'set protocol.http.proxy.host = ' . $Fld[2];
}
if ($Fld[1] eq 'http_referer') {
print 'set protocol.http.referer.policy = ' . $Fld[2];
}
if ($Fld[1] eq 'fake_referer') {
print 'set protocol.http.referer.fake = ' . $Fld[2];
}
if ($Fld[1] eq 'enable_global_history') {
print 'set document.history.global.enable = ' . $Fld[2];
}
if ($Fld[1] eq 'keep_unhistory') {
print 'set document.history.keep_unhistory = ' . $Fld[2];
}
if ($Fld[1] eq 'language') {
print 'set ui.language = ' . $Fld[2];
}
if ($Fld[1] eq 'max_connections') {
print 'set connection.max_connections = ' . $Fld[2];
}
if ($Fld[1] eq 'max_connections_to_host') {
print 'set connection.max_connections_to_host = ' . $Fld[2];
}
if ($Fld[1] eq 'memory_cache_size') {
print 'set document.cache.memory.size = ' . $Fld[2];
}
if ($Fld[1] eq 'receive_timeout') {
print 'set connection.receive_timeout = ' . $Fld[2];
}
if ($Fld[1] eq 'retries') {
print 'set connection.retries = ' . $Fld[2];
}
if ($Fld[1] eq 'show_status_bar') {
print 'set ui.show_status_bar = ' . $Fld[2];
}
if ($Fld[1] eq 'show_title_bar') {
print 'set ui.show_title_bar = ' . $Fld[2];
}
if ($Fld[1] eq 'unrestartable_receive_timeout') {
print 'set connection.unrestartable_receive_timeout = ' . $Fld[2];
}
if ($Fld[1] eq 'user_agent') {
print 'set protocol.http.user_agent = ' . $Fld[2];
}
if ($Fld[1] eq 'terminal') {
$Fld[2] = substr($Fld[2], 2, length($Fld[2]) - 2);
print 'set terminal.' . $Fld[2] . '.type = ' . $Fld[4];
print 'set terminal.' . $Fld[2] . '.m11_hack = ' . $Fld[4];
print 'set terminal.' . $Fld[2] . '.utf_8_io = ' . (($Fld[7] eq '') ? '0' : '1');
print 'set terminal.' . $Fld[2] . '.restrict_852 = ' . (!(!($Fld[5] & 2))+0);
print 'set terminal.' . $Fld[2] . '.block_cursor = ' . (!(!($Fld[5] & 4))+0);
print 'set terminal.' . $Fld[2] . '.colors = ' . (!(!($Fld[5] & 1))+0);
print 'set terminal.' . $Fld[2] . '.charset = "' . $Fld[6] . '"';
}
if ($Fld[1] eq 'extension') {
$num_exts = (@ext = split(/, */, substr($Fld[2], 2, length($Fld[2]) - 2), 9999));
for ($i = $num_exts; $i; --$i) {
$ext[$i] =~ s/\./*/g;
print 'set mime.extension.' . $ext[$i] . ' = ' . $Fld[3];
}
}
if ($Fld[1] eq 'association') {
$pos = length($Fld[1]) + 2;
$line = $_;
$name = &get_token();
$name = substr($name, 2, length($name) - 2);
$name =~ s/[ \t]/_/g;
$name =~ s/[^a-zA-Z0-9_]/-/g;
$mimelist = &get_token();
$mimelist = substr($mimelist, 2, length($mimelist) - 2);
$mimelist =~ s/\./*/g;
$mimelist =~ s/\//./g;
$num_mimetypes = (@mimetype = split(/, */, $mimelist, 9999));
$program = &get_token();
$flags = $Fld[$#Fld - 1];
$cons = $flags & 1;
$xwin = $flags & 2;
$ask = (!(!($flags & 4))+0);
$block = ($flags & 8 or $flags & 16) ? !(!($flags & 16)) : (!$xwin or $cons);
for ($i = $num_mimetypes; $i; $i--) {
print 'set mime.type.' . $mimetype[$i] . " = \"" . $name . "\"";
}
if ($cons || $Fld[$#Fld] != 1) {
&print_association($name, $system_id[$Fld[$#Fld]], $ask, $block, $program);
}
if ($xwin && $Fld[$#Fld] == 1) {
&print_association($name, $system_id[$Fld[$#Fld]] . '-xwin', $ask, $block, $program);
}
}
if ($Fld[1] eq 'mailto' || $Fld[1] eq 'telnet' || $Fld[1] eq 'tn3270') {
$val = $Fld[0];
$val =~ s/^[^ ]* (".*") .$/$1/;
if ($val eq "mailto") { $val =~ s/%/\%h/g; } else { $val =~ s/%/\%h:\%p/g; }
print 'set protocol.user.' . $Fld[1] . '.' . $system_id[$Fld[$#Fld]] . ' = ' . $val;
if ($Fld[$#Fld] = 1) {# Only Unix has X.
print 'set protocol.user.' . $Fld[1] . '.' . $system_id[$Fld[$#Fld]] . '-xwin = ' . $val;
}
}
###
### html.conf
###
if ($Fld[1] eq 'html_assume_codepage') {
print "set document.codepage.assume = \"" . $Fld[2] . "\"";
}
if ($Fld[1] eq 'html_avoid_dark_on_black') {
print 'set document.allow_dark_on_black = ' . (!($Fld[2])+0);
}
if ($Fld[1] eq 'html_frames') {
print 'set document.html.display_frames = ' . $Fld[2];
}
if ($Fld[1] eq 'html_hard_assume') {
print 'set document.codepage.force_assumed = ' . $Fld[2];
}
if ($Fld[1] eq 'html_images') {
print 'set document.browse.images.show_as_links = ' . $Fld[2];
}
if ($Fld[1] eq 'html_margin') {
print 'set document.browse.margin_width = ' . $Fld[2];
}
if ($Fld[1] eq 'html_numbered_links') {
print 'set document.browse.links.numbering = ' . $Fld[2];
}
if ($Fld[1] eq 'html_tables') {
print 'set document.html.display_tables = ' . $Fld[2];
}
if ($Fld[1] eq 'html_table_order') {
print 'set document.browse.table_move_order = ' . $Fld[2];
}
if ($Fld[1] eq 'html_use_document_colours') {
print 'set document.colors.use_document_colors = ' . $Fld[2];
}
}
sub get_token {
$backwhacked = 0;
$quote = 0;
$token = '';
$len = length($line);
for (; $pos <= $len; ++$pos) { #???
$char = substr($line, $pos, 1);
if ($backwhacked) {
$backwhacked = 0;
}
elsif ($char eq "\\") {
$backwhacked = 1;
}
elsif ($char eq "\"") {
$quote = !$quote;
}
elsif (($char eq ' ' || $char eq ' ') && !$quote) {
last;
}
$token = $token . $char;
}
++$pos;
$token;
}
sub print_association {
local($name, $system_str, $ask, $block, $program) = @_;
print 'set mime.handler.' . $name . '.' . $system_str . '.ask = ' . $ask;
print 'set mime.handler.' . $name . '.' . $system_str . '.block = ' . ($block ? '1' : '0');
print 'set mime.handler.' . $name . '.' . $system_str . '.program = ' . $program;
}