2002-01-19 13:53:55 +00:00
|
|
|
#!/usr/bin/perl
|
|
|
|
#
|
2002-01-19 14:08:47 +00:00
|
|
|
# $Id$
|
2002-01-19 13:53:55 +00:00
|
|
|
#
|
|
|
|
# LyX codeline wrapper tool
|
|
|
|
#
|
2009-02-14 13:10:27 +00:00
|
|
|
# (P) & (C) 2002-2009 by Peter Bieringer <pb@bieringer.de>
|
2002-01-19 13:53:55 +00:00
|
|
|
#
|
|
|
|
# Published under the GNU GPL licence
|
|
|
|
#
|
|
|
|
# Takes LyX code from stdin and pipes a modified to stdout.
|
|
|
|
# Wraps length of code lines to a given limit.
|
|
|
|
# Marks second and next lines with a given character.
|
|
|
|
#
|
2002-01-19 14:08:47 +00:00
|
|
|
# Attention: no warranty that the new LyX code is very well!
|
|
|
|
# Use diff to check proper work
|
2002-01-19 13:53:55 +00:00
|
|
|
#
|
|
|
|
# Changes:
|
|
|
|
# 20020118: Initial try
|
|
|
|
# 20020119: Improve tool, do not touch code lines including LyX tags
|
2009-02-14 13:10:27 +00:00
|
|
|
# 20090214/PB: adjustments for LyX format 345
|
2002-01-19 13:53:55 +00:00
|
|
|
#
|
|
|
|
# Known bugs:
|
|
|
|
# * Sure some
|
|
|
|
#
|
|
|
|
# Known limitations:
|
|
|
|
# * Code lines containing LyX tags are currently not supported and skipped
|
|
|
|
|
2009-02-14 13:10:27 +00:00
|
|
|
my $lyx_format_supported = "345";
|
|
|
|
|
2002-01-19 13:53:55 +00:00
|
|
|
sub print_long_line ($);
|
|
|
|
|
|
|
|
my $TAG_CODE = 0;
|
|
|
|
my $line_carry = "";
|
|
|
|
my $lines_original = "";
|
|
|
|
my $line_limit = 79;
|
2009-02-14 13:10:27 +00:00
|
|
|
#my $linebreakchar = chr(172);
|
|
|
|
my $linebreakchar = "¬"; # UTF-8 support
|
2002-01-19 13:53:55 +00:00
|
|
|
|
2009-02-14 13:10:27 +00:00
|
|
|
#my $debug = 1;
|
|
|
|
my $debug = 0;
|
2002-01-19 13:53:55 +00:00
|
|
|
|
|
|
|
while (<STDIN>) {
|
|
|
|
my $line = $_;
|
|
|
|
chomp $line;
|
|
|
|
|
|
|
|
#print "$line";
|
|
|
|
#print "\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
#
|
|
|
|
if ($line =~ /^\\lyxformat ([0-9]+)$/) {
|
|
|
|
if ($1 ne $lyx_format_supported) {
|
|
|
|
die "Lyx format not supported: $1";
|
|
|
|
};
|
|
|
|
} elsif ($line =~ /^\\begin_layout Code$/ && $TAG_CODE != 1) {
|
2002-01-19 13:53:55 +00:00
|
|
|
print STDERR "INF: Code tag starts\n";
|
|
|
|
$TAG_CODE = 1;
|
|
|
|
$line_carry = "";
|
|
|
|
$lines_original = "";
|
|
|
|
next;
|
2009-02-14 13:10:27 +00:00
|
|
|
} elsif ($line =~ /^\\end_layout$/ && $TAG_CODE == 1) {
|
|
|
|
print STDERR "INF: Code tag ends\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
|
|
|
|
if ($lines_original =~ /\\/) {
|
|
|
|
# Ooops, lines contain a LyX tag, currently not supported, so let it be
|
2009-02-14 13:10:27 +00:00
|
|
|
#print STDERR "WARN: Lines contain LyX code tag, let it like it is\n: '$lines_original'";
|
2002-01-19 13:53:55 +00:00
|
|
|
print STDERR "WARN: Lines contain LyX code tag, let it like it is\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "G"; };
|
|
|
|
print "\\begin_layout Code" . "\n" . $lines_original . "\\end_layout" . "\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
} elsif ($lines_original =~ /$linebreakchar/) {
|
|
|
|
# Code line already wrapped
|
|
|
|
print STDERR "INF: Code line already wrapped, let it like it is\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "F"; };
|
|
|
|
print "\\begin_layout Code" . "\n" . $lines_original . "\\end_layout" . "\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
} else {
|
|
|
|
print_long_line $line_carry;
|
|
|
|
};
|
|
|
|
|
2009-02-14 13:10:27 +00:00
|
|
|
$TAG_CODE = 0;
|
2002-01-19 13:53:55 +00:00
|
|
|
$line_carry = "";
|
|
|
|
$lines_original = "";
|
|
|
|
next;
|
|
|
|
} elsif ($line =~ /^\\layout/ && $TAG_CODE == 1) {
|
2009-02-14 13:10:27 +00:00
|
|
|
die "unsupported";
|
2002-01-19 13:53:55 +00:00
|
|
|
print STDERR "INF: Code tag ends\n";
|
|
|
|
|
|
|
|
if ($lines_original =~ /\\/) {
|
|
|
|
# Ooops, lines contain a LyX tag, currently not supported, so let it be
|
|
|
|
#print STDERR "WARN: Lines contain LyX code tag, let it like it is\n: '$lines_original'";
|
|
|
|
print STDERR "WARN: Lines contain LyX code tag, let it like it is\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "A"; };
|
|
|
|
print "\\begin_layout Code" . "\n" . $lines_original;
|
2002-01-19 13:53:55 +00:00
|
|
|
} elsif ($lines_original =~ /$linebreakchar/) {
|
|
|
|
# Code line already wrapped
|
|
|
|
print STDERR "INF: Code line already wrapped, let it like it is\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "B"; };
|
|
|
|
print "\\begin_layout Code" . "\n" . $lines_original;
|
2002-01-19 13:53:55 +00:00
|
|
|
} else {
|
|
|
|
print_long_line $line_carry;
|
|
|
|
};
|
|
|
|
|
|
|
|
$line_carry = "";
|
|
|
|
$lines_original = "";
|
|
|
|
$TAG_CODE = 0;
|
|
|
|
print $line . "\n";
|
|
|
|
next;
|
|
|
|
};
|
|
|
|
|
|
|
|
if ($TAG_CODE != 1) {
|
|
|
|
print $line . "\n";
|
|
|
|
} else {
|
|
|
|
$lines_original .= $line . "\n";
|
|
|
|
|
|
|
|
if ($line eq "") {
|
|
|
|
# empty lines are skipped here
|
|
|
|
next;
|
|
|
|
};
|
|
|
|
|
|
|
|
print STDERR "INF: Found code line: '" . $line . "'\n";
|
|
|
|
$line_carry .= $line;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
sub print_long_line ($){
|
|
|
|
my $line = shift;
|
|
|
|
print STDERR "INF: Print code line: '" . $line . "'\n";
|
|
|
|
|
|
|
|
my $l = 0;
|
|
|
|
my $c = "";
|
|
|
|
|
|
|
|
if (length($line) == 0) {
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "C"; };
|
|
|
|
my $s = "\\begin_layout Code" . "\n" . "\n" . "\\end_layout" . "\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
print $s;
|
|
|
|
return;
|
|
|
|
};
|
|
|
|
|
|
|
|
while ($l < length($line)) {
|
|
|
|
my $t = 0;
|
|
|
|
print STDERR "INF: Step: $l\n";
|
|
|
|
|
|
|
|
if ($l == 0) {
|
|
|
|
$c = "";
|
|
|
|
} else {
|
|
|
|
$c =$linebreakchar;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (length($line) - $l <= $line_limit) {
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "D"; };
|
|
|
|
my $s = "\\begin_layout Code" . "\n" . $c . substr($line, $l) . "\n" . "\\end_layout" . "\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
print STDERR "INF: Step end\n";
|
|
|
|
print $s;
|
|
|
|
print STDERR $s;
|
|
|
|
last;
|
|
|
|
};
|
|
|
|
|
|
|
|
for ($t = $line_limit; $t > 0; $t--) {
|
|
|
|
if (substr($line, $l + $t, 1) eq " ") {
|
|
|
|
print STDERR "INF: Found <space> at pos: $t\n";
|
|
|
|
last;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
if ($t == 0) { $t = $line_limit };
|
|
|
|
print STDERR "INF: Start printing l=$l t=$t\n";
|
2009-02-14 13:10:27 +00:00
|
|
|
if ($debug & 0x01) { print "E"; };
|
|
|
|
my $s = "\\begin_layout Code" . "\n" . $c . substr($line, $l, $t) . "\n" . "\\end_layout" . "\n\n";
|
2002-01-19 13:53:55 +00:00
|
|
|
print $s;
|
|
|
|
print STDERR $s;
|
|
|
|
$l = $l + $t;
|
|
|
|
};
|
|
|
|
};
|
2002-01-19 14:08:47 +00:00
|
|
|
|
2002-01-19 14:15:59 +00:00
|
|
|
print STDERR "\n\nWARNING: check code using utility 'diff' for proper LyX output!\n";
|