From 13293f93d5bb3854f7d67b9a4842b0d6111fcd45 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Fri, 7 Feb 2003 12:11:58 +0000 Subject: [PATCH] pass $...$ and $$...$$ through reLyX unchanged git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6053 a592a061-630c-0410-9148-cb99ea01b6c8 --- lib/ChangeLog | 3 +++ lib/reLyX/BasicLyX.pm | 40 ++++++++++++++++++++++++++++++++++++++-- lib/reLyX/CleanTeX.pm | 21 +++------------------ lib/reLyX/Verbatim.pm | 10 +++++++++- 4 files changed, 53 insertions(+), 21 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 6ea82817cb..4926cbb4d5 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -2,6 +2,9 @@ * lyx2lyx/lyx2lyx: enable the debug level to be set. + * reLyX/BasicLyX.pm, reLyX/CleanTeX.pm, reLyX/Verbatim.pm: pass + $...$ and $$...$$ through reLyX unchanged. + 2003-02-04 Joao Luis Meloni Assirati * images/math/rbracket.xpm: new file. diff --git a/lib/reLyX/BasicLyX.pm b/lib/reLyX/BasicLyX.pm index 5e72be223f..7ea9ecc46c 100644 --- a/lib/reLyX/BasicLyX.pm +++ b/lib/reLyX/BasicLyX.pm @@ -290,6 +290,42 @@ sub call_parser { return; } # end subroutine call_parser +# This is used as a toggle so that we know what to do when basic_lyx is +# passed a '$' or '$$' token. +my $inside_math=0; + +sub starting_math { + my $name = shift; + + if ($name eq '\(' || $name eq '\[' || + # These tokens bound both ends of a math environment so we must check + # $inside_math to know what action to take. + ($name eq '$' || $name eq '$$') && !$inside_math) { + + $inside_math = 1; + return 1; + } + + # All other tokens + return 0; +} + +sub ending_math { + my $name = shift; + + if ($name eq '\)' || $name eq '\]' || + # These tokens bound both ends of a math environment so we must check + # $inside_math to know what action to take. + ($name eq '$' || $name eq '$$') && $inside_math) { + + $inside_math = 0; + return 1; + } + + # All other tokens + return 0; +} + ########################## MAIN TRANSLATOR SUBROUTINE ##################### sub basic_lyx { # This subroutine is called by Text::TeX::process each time subroutine @@ -388,7 +424,7 @@ sub basic_lyx { "\n\n\\end_inset \n\n"; # Math -- copy verbatim until you're done - } elsif ($name eq '\(' || $name eq '\[') { + } elsif (starting_math($name)) { print "\nCopying math beginning with '$name'\n" if $debug_on; # copy everything until end text $dummy = &Verbatim::copy_verbatim($fileobject, $eaten); @@ -399,7 +435,7 @@ sub basic_lyx { print $dummy if $debug_on; print OUTFILE $dummy; - } elsif ($name eq '\)' || $name eq '\]') { + } elsif (ending_math($name)) { # end math print OUTFILE "$name\n\\end_inset \n\n"; print "\nDone copying math ending with '$name'" if $debug_on; diff --git a/lib/reLyX/CleanTeX.pm b/lib/reLyX/CleanTeX.pm index 001af0cf70..b40c138c4a 100644 --- a/lib/reLyX/CleanTeX.pm +++ b/lib/reLyX/CleanTeX.pm @@ -81,20 +81,6 @@ sub clean_tex { my($eaten,$txt) = (shift,shift); my ($outstr, $type); - # Sub translate is given a string and one of the translation tables below. - # It returns the translation, or just the string if there's no translation - # Translation table for TT::Begin::Group tokens - my %begtranstbl = ( - '$' => '\(', # LyX math mode doesn't - '$$' => '\[', # understand \$ or $$ - ); - - # Translation table for TT::End::Group tokens - my %endtranstbl = ( - '$' => '\)', - '$$' => '\]', - ); - # Translation table for TT::Token tokens whose translations should # NOT have whitespace after them! See sub translate... # Note that tokens of type TT::EndLocal are always translated to '}'. So, @@ -135,8 +121,7 @@ sub clean_tex { # Handle the end of a local font command - insert a '}' if (/EndLocal/) { - # we could just say $printstr='}' - $printstr = &translate('}', \%endtranstbl); + $printstr = '}'; last SWITCH; } @@ -242,13 +227,13 @@ sub clean_tex { # Handle opening groups, like '{' and '$'. if (/Begin::Group$/) { - $printstr = &translate($outstr,\%begtranstbl); + $printstr = $outstr; last SWITCH; } # Handle closing groups, like '}' and '$'. if (/End::Group$/) { - $printstr = &translate($outstr, \%endtranstbl); + $printstr = $outstr; last SWITCH; } diff --git a/lib/reLyX/Verbatim.pm b/lib/reLyX/Verbatim.pm index c03770f07b..757a7c211d 100644 --- a/lib/reLyX/Verbatim.pm +++ b/lib/reLyX/Verbatim.pm @@ -12,6 +12,8 @@ package Verbatim; use strict; +my $debug_on; # package-wide variable set if -d option is given + sub copy_verb { # This subroutine handles a \verb token. Text is guaranteed to be on one line. # \verb must be followed by a non-letter, then copy anything until the next @@ -27,6 +29,9 @@ sub copy_verb { } sub copy_verbatim { + # Was -d option given? + $debug_on = (defined($main::opt_d) && $main::opt_d); + # This subroutine eats text verbatim until a certain text is reached # The end text itself is not eaten; this is necessary so that # environments are properly nested (otherwise, TeX.pm complains) @@ -35,7 +40,10 @@ sub copy_verbatim { # Arg 0 is the Text::TeX::OpenFile file object, arg 1 is the beginning token my $fileobject = shift; my $begin_token = shift; - my %endtokentbl = ( '\(' => '\)' , '\[' => '\]' ); + my %endtokentbl = ( '\(' => '\)', + '\[' => '\]', + '$' => '$', + '$$' => '$$' ); my $type = ref($begin_token); $type =~ s/^Text::TeX:://o or die "unknown token type $type?!"; -- 2.39.2