]> git.lyx.org Git - lyx.git/blobdiff - lib/reLyX/RelyxTable.pm
The Box patch
[lyx.git] / lib / reLyX / RelyxTable.pm
index 4b3aaaccc15c2eb9329b39a3d8b87abf202c627d..dc57aa6bec5908b9871e093083281d4d287cff79 100644 (file)
@@ -68,7 +68,7 @@ sub parse_cols {
     while (@group) {
 
        $tok = shift(@group);
-       # Each $tok will consist of /^[clr|]*[p*@]?$/
+       # Each $tok will consist of /^[clr|]*[mp*@]?$/
        # (Except first may have | and/or @ expressions before it)
        # p*@ will end the $tok since after it comes a group in braces
        # @ will be a TT::Token, everything else will be in TT::Text
@@ -86,15 +86,14 @@ sub parse_cols {
        @new_cols = ($description =~ /[clr]\|*/g);
        push @cols, @new_cols;
 
-       # parse a p or * or @ if necessary
+       # parse a 'p', an 'm', a '*' or a '@' as necessary
        # use exact_print in case there's weird stuff in the @ descriptions
        $description = substr($description,-1);
-#      if ($description eq 'p') {
        # The m and p descriptors have identical form.
-       if ($description =~ /^[mp]$/) {
+       if ($description eq 'p' || $description eq 'm') {
            $tok = shift(@group);
-           my $pdes = $description . $tok->exact_print; # "p{foo}"
-           push @cols, $pdes;
+           my $des = $description . $tok->exact_print; # 'p{foo}' or 'm{foo}'
+           push @cols, $des;
 
        } elsif ($description eq '@') {
            $tok = shift(@group);
@@ -123,30 +122,6 @@ sub parse_cols {
     return @cols;
 } # end sub parse_cols
 
-sub write_string {
-    my ($name, $s) = @_;
-    if (!$s) {
-       return '';
-    }
-    return ' ' . $name . '="' . $s . '"';
-}
-
-sub write_bool {
-    my ($name, $b) = @_;
-    if (!$b) {
-       return '';
-    }
-    write_string $name, "true";
-}
-
-sub write_int {
-    my ($name, $i) = @_;
-    if (!$i) {
-       return '';
-    }
-    write_string $name, $i;
-}
-
 ################################################################################
 # This package handles tables for reLyX
 
@@ -309,60 +284,8 @@ sub write_int {
        }
     } # end sub done_reading
 
+# Subroutines to print out the table once it's created
     sub print_info {
-    # Subroutine to print out the table once it's created
-       &print_info_215(@_);
-    }
-
-    sub print_info_221 {
-    # Subroutine to print out the table in \lyxformat 221
-       my $thistable = shift;
-        my $to_print = '';
-        # header line
-       $to_print .= "\n<lyxtabular" .
-           RelyxTable::write_int("version", 3) .
-           RelyxTable::write_int("rows", $thistable->numrows) .
-           RelyxTable::write_int("columns", $thistable->numcols) .
-           ">\n";
-       # global longtable options
-       $to_print .= "<features" .
-          RelyxTable::write_int ("rotate", $thistable->{"rotate"}) .
-          RelyxTable::write_bool("islongtable", $thistable->{"is_long_table"}) .
-          RelyxTable::write_int ("firstHeadTopDL", 0) .
-          RelyxTable::write_int ("firstHeadBottomDL", 0) .
-          RelyxTable::write_bool("firstHeadEmpty", 0) .
-          RelyxTable::write_int ("headTopDL", 0) .
-          RelyxTable::write_int ("headBottomDL", 0) .
-          RelyxTable::write_int ("footTopDL", 0) .
-          RelyxTable::write_int ("footBottomDL", 0) .
-          RelyxTable::write_int ("lastFootTopDL", 0) .
-          RelyxTable::write_int ("lastFootBottomDL", 0) .
-          RelyxTable::write_bool("lastFootEmpty", 0) .
-          ">\n";
-       # column info
-       my $col;
-       foreach $col (@{$thistable->{"columns"}}) {
-           $to_print .= $col->print_info_221;
-       }
-       # row info
-       my $row;
-       my $cell;
-       foreach $row (@{$thistable->{"rows"}}) {
-           $to_print .= $row->print_info_221;
-           my $count = 0;
-           foreach $col (@{$thistable->{"columns"}}) {
-               $cell = $row->{"cells"}[$count];
-               $count++;
-               $to_print .= $cell->print_info_221;
-           }
-           $to_print .= "</row>\n";
-       }
-       $to_print .= "</lyxtabular>\n";
-       return $to_print;
-    } # end sub print_info_221
-
-    sub print_info_215 {
-    # Subroutine to print out the table in \lyxformat 215
         # print the header information for this table
        my $thistable = shift;
         my $to_print = "";
@@ -405,7 +328,7 @@ sub write_int {
        $to_print .= "\n";
 
        return $to_print;
-    } # end sub print_info_215
+    } # end sub print_info
 
 # Convenient subroutines
     sub numrows {
@@ -454,25 +377,25 @@ package RelyxTable::Column;
        $col->{"pwidth"} = "";
        $col->{"special"} = "";
 
-       # Any special (@) column should be handled differently
+       # LyX does not know about '@' or 'm' column descriptors so, to
+       # ensure that the LaTeX -> LyX -> LaTeX cycle is invariant,
+       # these descriptors are placed in the 'special' field.
        if ($description =~ /\@/ || $description =~ /^m/ ) {
-          # Just put the whole description in "special" field --- this
-          # corresponds the the "extra" field in LyX table popup
-          # Note that LyX ignores alignment, r/l lines for a special column
-          $col->{"special"} = $description;
-          print "\n'$description' column won't display WYSIWYG in LyX\n"
-                                                           if $debug_on;
-
-       # It's not a special @ column
-       } else {
+           $col->{"special"} = $description;
+           print "\n'$description' column won't display WYSIWYG in LyX\n"
+                                                            if $debug_on;
+       }
 
+       # '@' columns really can't be displayed WYSIWYG in LyX,
+       # but we can get visual feedback on 'm' columns.
+       if (!($description =~ /\@/)) {
            # left line?
            $description =~ s/^\|*//;
            $col->{"left_line"} = length($&);
 
            # main column description
-           $description =~ s/^[clrp]//;
-           if ($& eq "p") {
+           $description =~ s/^[clrpm]//;
+           if ($& eq 'p' || $& eq 'm') {
                $description =~ s/^\{(.+)\}//; # eat the width
                $col->{"pwidth"} = $1; # width without braces
                # note: alignment is not applicable for 'p' columns
@@ -504,23 +427,6 @@ package RelyxTable::Column;
                   
        return $to_print;
     }
-
-    sub print_info_221 {
-    # print out header information for this column
-       my $col = shift;
-       my $to_print = '';
-
-       $to_print = "<column" .
-#          RelyxTable::write_attribute("alignment", $TableAlignments{$col->{"alignment"}) .
-#          RelyxTable::write_attribute("valignment", 0) .
-#          RelyxTable::write_attribute("leftline",  $col->{"left_line"}) .
-#          RelyxTable::write_attribute("rightline", $col->{"right_line"} .
-#          RelyxTable::write_length("width", $col->{"pwidth"}) .
-           RelyxTable::write_string("special", $col->{"special"}) .
-#          ">\n";
-       return $to_print;
-    }
-
 } # end package RelyxTable::Column
 
 ################################################################################
@@ -617,22 +523,6 @@ package RelyxTable::Row;
        return $to_print;
     } # end sub print_info
 
-    sub print_info_221 {
-    # print out header information for this column
-       my $row = shift;
-       my $to_print = '';
-
-       $to_print = "<row" .
-#          RelyxTable::write_attribute("topline", $row->{"top_line"}) .
-#          RelyxTable::write_attribute("bottomline", $row->{"bottom_line"}) .
-#          RelyxTable::write_attribute("endhead", $row->{"endhead"}) .
-#          RelyxTable::write_attribute("endfirsthead", $row->{"endfirsthead"}) .
-#          RelyxTable::write_attribute("endfoot", $row->{"endfoot"}) .
-#          RelyxTable::write_attribute("endlastfoot", $row->{"endlastfoot"}) .
-#          RelyxTable::write_attribute("newpage", $row->{"newpage"}) .
-           ">\n";
-       return $to_print;
-    }
 } # end package RelyxTable::Row
 
 ################################################################################
@@ -708,25 +598,6 @@ package RelyxTable::Cell;
                   
        return $to_print;
     }
-    sub print_info_221 {
-    # print out header information for this column
-       my $cell = shift;
-       my $to_print = '';
-
-       $to_print = "<cell" .
-#          RelyxTable::write_attribute("topline", $row->{"top_line"}) .
-#          RelyxTable::write_attribute("bottomline", $row->{"bottom_line"}) .
-#          RelyxTable::write_attribute("endhead", $row->{"endhead"}) .
-#          RelyxTable::write_attribute("endfirsthead", $row->{"endfirsthead"}) .
-#          RelyxTable::write_attribute("endfoot", $row->{"endfoot"}) .
-#          RelyxTable::write_attribute("endlastfoot", $row->{"endlastfoot"}) .
-#          RelyxTable::write_attribute("newpage", $row->{"newpage"}) .
-           ">\n" .
-           "\\begin_inset " .
-           "\n\\end_inset \n" .
-           "</cell>\n";
-       return $to_print;
-    }
 } # end package RelyxTable::Cell
 
 1; # return "true" to calling routine