Milán Major

netscape-revival

1 branch
Code

security/lib/nav/mkxpstrs.pl

#!/usr/local/bin/perl5

# script to generate data that should be pasted into allxpstr.h -- 
# this is used by convhtml.sh

$string_number = 1000;


sub read_js {

    $js_var_count = 0;
    @js_vars = ();
    %js_values = ();

    my $nxt = "";
    
  EOF: while ( 1 ) {
      my $v = 0;
      my $r = 0;
      my $all = $nxt;

      $nxt = "";

    DONE: while (!$v) {
	$_ = <>;
	chop($_);

	last DONE if (length($_) == 0);
	$nxt = $_;
	( $v, $r ) = m/^var ([a-z0-9_]+) *= *(.*)/i;
	last DONE if ($v);

	my $new1 = $_;
	my $new2 = $new1;
	my $all2;

	$_ = $all;
	( $all2 ) = m/(.*)\\042 *\+ */;
	if (! $all2 ) {
	    $all2 = $all;
	} else {
	    $_ = $new1;
	    ( $new2 ) = m/^ *\\042(.*)/;
	    if (! $new2 ) { $new2 = $_; }
	}

	$all = $all2 . $new2;
    }

      if ( length($all) > 0) {
	  $_ = $all;
	  ( $v, $r ) = m/^var ([a-z0-9_]+) *= *\\042(.*)\\042;/i;

	  $js_vars[$js_var_count] = $v;
	  $js_values{$v} = $r;
	  $js_var_count++;
      }
      last EOF if (length($nxt) == 0);
  }
}

sub print_keys {

    print "/* NOTE: THE FOLLOWING STRINGS SHOULD *NOT* BE LOCALIZED!\n\n";
    print "   These strings (from SA_VARNAMES_BEGIN to SA_VARNAMES_END)\n";
    print "   are not user-visible; changing them will break the Security\n";
    print "   Advisor dialog.  The only reason they are in this file is so\n";
    print "   that they will end up in the resource segment rather than\n";
    print "   static-data segment on Windows.  Probably this should be\n";
    print "   done in some other way, so that these don't clutter up the\n";
    print "   localization data, but for now...\n";
    print " */\n";

    print "ResDef(SA_VARNAMES_BEGIN, ";
    print "(SEC_DIALOG_STRING_BASE + $string_number), \"\")\n";
    $string_number++;

    foreach $v (@js_vars) {
	my $r = $v;
	$r =~ tr#A-Z#a-z#;
	$v =~ s/^SA_/SA_VARNAME_/;
	print "ResDef($v, ";
	print "(SEC_DIALOG_STRING_BASE + $string_number), \"$r\")\n";
	$string_number++;
    }

    print "ResDef(SA_VARNAMES_END, ";
    print "(SEC_DIALOG_STRING_BASE + $string_number), \"\")\n";
    $string_number++;
}


sub print_values {
    my $v;

    print "ResDef(SA_STRINGS_BEGIN, ";
    print "(SEC_DIALOG_STRING_BASE + $string_number), \"\")\n";
    $string_number++;

    foreach $v (@js_vars) {
	my $r = $js_values{$v};

	$v =~ tr#a-z#A-Z#;
	my $str = "ResDef(${v}, (SEC_DIALOG_STRING_BASE + $string_number),";
	print $str;

	if ((length($r) + length($str)) > 75) {
	    print "\n";
	}

	if (length($r) > 200) {
	    my $v2;
	    my $L;
	    ($v2 = $v) =~ tr#A-Z#a-z#;
	    $L = length($r);
	    printf STDERR "DANGER: string $v2 is $L long.\n";
	}

	print " \"";

	# Wrap the lines at <72 characters; but try to back up to whitespace
	# to word-wrap them, just so they end up being more readable.
	while (length($r) > 72) {
	    my $L = 72;
	    $_ = substr($r,0,$L);
	    ( $r2 ) = m/(.*?) [^ ]+$/;
	    if ( $r2 && length($r2) > 0) {
		$L = length($r2);
	    }
	    print substr($r,0,$L), "\\\n";
	    $r = substr($r,$L);
	}
	if (length($r) > 0) {
	    print "$r";
	}

	print "\")\n";
	$string_number++;

	$all = "";
    }

    print "ResDef(SA_STRINGS_END, ";
    print "(SEC_DIALOG_STRING_BASE + $string_number), \"\")\n";
    $string_number++;
}

read_js;
print_values;
print "\n";
print_keys;

exit 0;