Newbie help: "empty" elements

Subject: Newbie help: "empty" elements
From: "Len Budney" <lbudney-lists-dsssl@xxxxxx>
Date: Fri, 10 Nov 2000 13:44:27 -0500
Hello!

I'm trying to radically cut the fat from some HTML files--basically, I
want to strip everything but the data tables (which I plan to post-process
and stuff into a database). To do that I'm using a filter which deletes
many elements entirely.

The problem is that I want to delete "empty" elements, where "empty" means
that the only content is more elements. So a TR containing lots of empty
TDs should be discarded. So far I'm having little success.

One problem appears to be the usual whitespace problem: I'm not correctly
identifying elements whose data is just whitespace. How can I do that?

The second problem is more mysterious: even after running "sgmlnorm -dn"
to kill spurious whitespace, lots of "empty" elements aren't getting
thrown away.

Attached is the filter I'm using and the HTML file I'm testing it on. Can
anyone offer any advice? (Correction: they were attached. The mail
reflector bounced it back.)

Thanks in advance,
Len.



-Begin-----------------------------------------------------------------

<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">
;; Filter to extract data from an MSN-Money page giving 10-year performance
;; information on a company. It's based on the identity transformation,
;; except that lots of things are discarded.

(declare-flow-object-class element
  "UNREGISTERED::James Clark//Flow Object Class::element")
(declare-flow-object-class empty-element
  "UNREGISTERED::James Clark//Flow Object Class::empty-element")
(declare-characteristic preserve-sdata?
  "UNREGISTERED::James Clark//Characteristic::preserve-sdata?"
  #t)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Default rule
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(default (output-element-if-nonempty))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Special handlers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Sometimes a TD is empty on purpose; I want to kill it only
;; if there are no siblings with data in them.
(element TD (output-element-if-nonempty-siblings))
(element TH (output-element-if-nonempty-siblings))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Handlers which simply suppress certain elements
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(element SCRIPT (empty-sosofo))
(element META (empty-sosofo))
(element LINK (empty-sosofo))
(element STYLE (empty-sosofo))
(element IMG (empty-sosofo))
(element FORM (empty-sosofo))
(element A (empty-sosofo))
(element HR (empty-sosofo))
(element BR (empty-sosofo))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Handlers which drop certain elements but preserve children
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(element FONT (process-children-trim))
(element B (process-children-trim))
(element I (process-children-trim))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Functions which handle copying of elements.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (any-data? #!optional (node (current-node)))
  (if (not (equal? (data node) ""))
      #t
      (if   (node-list-empty?
	     (children node))
	    #f
	    (node-list-some? any-data? (children node)))))

(define (output-element #!optional (node (current-node)))
  (if (node-property "must-omit-end-tag?" node)
      (make empty-element
	    attributes: (copy-attributes))
      (make element
	    attributes: (copy-attributes)
	    (process-children-trim))))

(define (output-element-if-nonempty #!optional (node (current-node)))
  (if (any-data? node)
      (output-element)
      (empty-sosofo)))

(define (output-element-if-nonempty-siblings #!optional (node (current-node)))
  (if (not (zero? (node-list-length
		   (node-list-filter
		    any-data? (rsiblings node)))))
	  (output-element)
      (empty-sosofo)))

(define (copy-attributes #!optional (nd (current-node)))
  (let loop ((atts (named-node-list-names (attributes nd))))
    (if (null? atts)
        '()
        (let* ((name (car atts))
               (value (attribute-string name nd)))
          (if value
              (cons (list name value)
                    (loop (cdr atts)))
              (loop (cdr atts)))))))

-End-------------------------------------------------------------------

-Begin-----------------------------------------------------------------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>tr Financial Statements: Investor - MSN MoneyCentral</TITLE>
<META name="description" content="Financial statements for Tootsie Roll Industries, Inc., including Income Statement, Balance Sheet, Cash Flow and 10 Year Summary. (tr)">
<META name="keywords" content="Tootsie Roll Industries, Inc., tr, financial statements, financial results, income statement, balance sheet, cash flow, 10 year summary, sales, income, annual, quarterly, assets, liabilities, shareholder's equity">
<META http-equiv="PICS-Label" content='(PICS-1.1 "http://www.rsac.org/ratingsv01.html"; l gen true comment "RSACi North America Server" by "Microsoft Network" for "http://moneycentral.msn.com"; on "1996.09.17T13:00-0500" r (n 0 s 0 v 0 l 0))'>

<META NAME="save" CONTENT="history">

<script language=javascript>
var phid=0;
window.name="msnMain"; 
function MCHelp(phid)
{

	var h_win=window.open("/panehelp.asp?id=" + phid,"_helpdriver", "toolbar=0,status=0,menubar=0,width=100,height=100,left=100,top=2000,resizable=0");

}
</script>
<LINK REL=STYLESHEET HREF=/inc/winstyle.css>
<STYLE TYPE=text/css><!--

.heading3 {color:#CC9900; font-weight: bold;font-size:11pt;font-family: Arial,Helvetica;}
.CatBackground {background:#CC9900;border:#CC9900;color:White;font-weight:bold;font-size:11pt;font-family:Arial,Helvetica;}
.normalcolor {color:#CC9900; font-size:10pt;text-decoration: none;font-family: Arial,Helvetica;}
.HRCatColor {color:#CC9900;}
.smallfontcat {font-weight:bold;font-size:8pt;color:CC9900;font-family: Arial,Helvetica}

.smallfontreverse {font-weight:bold;background:#336666;font-size:8.5pt;color:white;font-family:Arial,Helvetica;}

.MCLogo {color:#000000;text-decoration:none;font-size:22px;}
.MCLogo:hover {color:#3366CC;text-decoration:underline;font-size:22px;}
.HeaderCategory{color:#CC9900;text-decoration:none;font-size:22px;}
--></STYLE>
<script language="javascript">
<!--//
var szSymbol = 'tr';
var szView = "Ann";
function switchStatement() {
	var frm = document.frmStatements;
	var url;
	url = "statemnt.asp?lstStatement=" + frm.lstStatement.options[frm.lstStatement.selectedIndex].value + "&Symbol=" + szSymbol;
	
	location.href = url;
}
//-->
</script>
</HEAD>
<BODY MARGINHEIGHT=0 MARGINWIDTH=0 TOPMARGIN=0 LEFTMARGIN=0 BGCOLOR=WHITE TEXT=BLACK LINK=#3366CC ALINK=#3366CC VLINK=#663366>

<A NAME=TopOfPage></A>

<table width=100% cellpadding=0 cellspacing=0 border=0 bgcolor=white>
<tr>
<td height=2 colspan=3></td>
</tr>
<tr>
<td>
<table cellpadding=0 cellspacing=0 border=0 width=608> <tr class=dMSNME_1> 
 <td width=1 bgcolor=#000000></td> 
 <td width=92 align=center><font size=2 face=verdana,sans-serif color=#000000><b><a href="http://go.msn.com/AD/7/"; class=tab target=_top>MSN Home</a></b></font></td> 
 <td width=1 bgcolor=#000000></td> 
 <td width=72 align=center><font size=2 face=verdana,sans-serif color=#000000><b><a href="http://go.msn.com/AD/8/"; class=tab target=_top>Hotmail</a></b></font></td> 
 <td width=1 bgcolor=#000000></td> 
 <td width=100 align=center><font size=2 face=verdana,sans-serif color=#000000><b><a href="http://go.msn.com/AD/A/"; class=tab target=_top>Web Search</a></b></font></td> 
 <td width=1 bgcolor=#000000></td> 
 <td width=81 align=center><font size=2 face=verdana,sans-serif color=#000000><b><a href="http://go.msn.com/AD/9/"; class=tab target=_top>Shopping</a></b></font></td> 
 <td width=1 bgcolor=#000000></td> 
 <td width=62 align=center bgcolor=#666666><a href="http://go.msn.com/AD/C/"; target=_top><font size=2 face=verdana,sans-serif color=#FFFFFF><b>Money</b></font></a></td> 
 <td width=1 bgcolor=#000000></td> 
 <td width=116 align=center><font size=2 face=verdana,sans-serif color=#000000><b><a href="http://go.msn.com/AD/B/"; class=tab target=_top>People &amp; Chat</a></b></font></td> 
 <td width=1 bgcolor=#000000></td> 
  <td width=77 align=right> 
 <A HREF=http://moneycentral.msn.com/pplogin.asp?Page=http://moneycentral.msn.com/investor/invsub/results/statemnt.asp&Query=lstStatement%3D10YearSummary%26Symbol%3Dtr%26stmtView%3DAnn TARGET=_top><IMG SRC=/inc/chan/ourcode/signin.gif ALT="Passport" WIDTH=67 HEIGHT=19 BORDER=0></A>&nbsp;<td width=1 bgcolor=#000000></td> 
 </tr> 
 </table> 
</td>
</tr>
<tr>
<td height=2 colspan=3></td> 
</tr>
<tr>
<td colspan=3>
<table cellpadding=0 cellspacing=0 border=0 bgcolor=white width=608> 
<tr>
<td  height=60 width=140> <A HREF=http://go.msn.com/AD/0/ target=_top><IMG SRC=/inc/images/msft.gif WIDTH=140 HEIGHT=60 BORDER=0 ALT="go to MSN.com"></A> </td> 
<td height=60 width=468><!--pg=INVGEN--><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#990000"><FORM METHOD="POST" target="_top" ACTION="http://www.listbot.com/cgi-bin/subscriber";><TR><TD ROWSPAN=2><A target="_top" HREF="http://www.netbank.com"; TARGET="_top"><IMG SRC="http://ads.msn.com/ads/abuimg/netbank_email_left318x60.gif"; ALT="Click here." WIDTH=318 HEIGHT=60 BORDER=0></a></TD><TD VALIGN="top"><A target="_top" HREF="http://www.netbank.com";><IMG SRC="http://ads.msn.com/ads/abuimg/netbank_email_right150x30.gif"; ALT="Click here." WIDTH=150 HEIGHT=30 BORDER=0></a></TD></TR><TR><TD><INPUT TYPE="TEXT" NAME="e_mail" SIZE="14" VALUE="Enter email"><INPUT TYPE="HIDDEN" NAME="list_id" VALUE="MSN1"><INPUT TYPE="HIDDEN" NAME="Act" VALUE="subscribe_list"><INPUT TYPE="SUBMIT" VALUE="Join"></TD></TR></FORM></TABLE></td> 
</tr> 
<tr> 
<td height=1 colspan=2></td> 
</tr> 
</table>
</td> 
</tr> 
</table>

<table cellpadding=0 cellspacing=0 border=0 width=100% bgcolor=white> 
<tr height=32 > 
<td align=left>

&nbsp;&nbsp;&nbsp;&nbsp;<B><a target=_top href="http://moneycentral.msn.com/home.asp"; CLASS=MCLogo>MoneyCentral</A> &nbsp;<a target=_top href=http://moneycentral.msn.com/investor/home.asp CLASS=HeaderCategory>Investor</A></FONT></SPAN></B>
</td> 
<td align=right> 
<SPAN CLASS=SmallPrompt><FONT SIZE=1><SPAN CLASS=SmallPrompt>November&nbsp;9,&nbsp;2000&nbsp;&nbsp;</SPAN></FONT>
</td> 
</tr> 
</table><script language=javascript>if (phid==0) {phid="MC_318" }</script>

<TABLE WIDTH=100% CELLPADDING=0 CELLSPACING=0 BORDER=0 BGCOLOR=#CCCCCC CLASS=tablebackground> <TR>
<A HREF="/investor/finder/welcome.asp"></A>
<TD HEIGHT=17 WIDTH=128><TABLE BORDER=0 HEIGHT=17 WIDTH=128 CELLPADDING=0 CELLSPACING=0 CLASS=tablebackground><TR><TD><B><A HREF="/investor/home.asp" CLASS=navtop TARGET=_top><IMG SRC="/inc/images/home.gif" WIDTH=21 HEIGHT=10 BORDER=0 VSPACE=0  ALT="Investor Home">Investor</A></B>&nbsp;</TD></TR></TABLE></TD>
<TD HEIGHT=17 WIDTH=100%><TABLE BORDER=0 HEIGHT=17 CELLPADDING=0 CELLSPACING=0 CLASS=tablebackground><TR>
<TD>&nbsp;&nbsp;<A HREF="http://moneycentral.msn.com/scripts/webquote.dll?iPage=pmx"; CLASS=navtop TARGET=_top>Portfolio</A>&nbsp;&nbsp;</TD>
<TD>&nbsp;&nbsp;<A HREF="http://moneycentral.msn.com/investor/market/home.asp"; CLASS=navtop TARGET=_top>Markets</A>&nbsp;&nbsp;</TD>
<TD CLASS=navtophighlight BGCOLOR=WHITE>&nbsp;&nbsp;<B><A HREF="/investor/research/welcome.asp" CLASS=navtophighlight TARGET=_top>Stocks</A></B>&nbsp;&nbsp;</TD>
<TD>&nbsp;&nbsp;<A HREF="/investor/research/fundwelcome.asp?Funds=1" CLASS=navtop TARGET=_top>Funds</A>&nbsp;&nbsp;</TD>
<TD>&nbsp;&nbsp;<A HREF="http://moneycentral.msn.com/articles/newtoday.asp"; CLASS=navtop TARGET=_top>Insight</A>&nbsp;&nbsp;</TD>
<TD>&nbsp;&nbsp;<A HREF="/investor/trading/main.asp?bPage=99" CLASS=navtop TARGET=_top>Brokers</A>&nbsp;&nbsp;</TD>
<TD Width=100% ALIGN=RIGHT>&nbsp;&nbsp;<A HREF="javascript:MCHelp(phid)" CLASS=navtop TARGET=_top>|&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;</A>&nbsp;&nbsp;</TD>
</TR></TABLE></TD> </TR>
<TR><TD COLSPAN=2  BGCOLOR=#CC9900 STYLE=background:#CC9900><IMG SRC="/inc/images/1x1trans.gif" HEIGHT=6 BORDER=0 VSPACE=0></TD></TR>
</TABLE>

<TABLE WIDTH=100% HEIGHT=100% BORDER=0 CELLSPACING=0 CELLPADDING=0><TR VALIGN=TOP>

<TD WIDTH=128 VALIGN=TOP BGCOLOR=#CCCCCC CLASS=NavLeftTablebackground><TABLE WIDTH=128 BORDER=0 CELLPADDING=2 CELLSPACING=0>
<TR BGCOLOR=#CC9900> <TD WIDTH=128 COLSPAN=2 CLASS=CatBackground><IMG SRC="/inc/images/1x1trans.gif" VSPACE=0 HSPACE=0 BORDER=0 WIDTH=0 HEIGHT=4></TD> </TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/research/welcome.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Welcome</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="http://moneycentral.msn.com/scripts/webquote.dll?iPage=qd&Symbol=tr"; CLASS=navleft1 TARGET=_top>Quotes</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/research/newsnap.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Snapshot</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/charts/charting.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Charts</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="http://news.moneycentral.msn.com/ticker/rcnews.asp?Symbol=tr"; CLASS=navleft1 TARGET=_top>Recent News</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/research/profile.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Company Report</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="http://news.moneycentral.msn.com/sec/mda.asp?Symbol=tr"; CLASS=navleft1 TARGET=_top>SEC Filings</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/invsub/advisor/advisor.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Advisor FYI</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/invsub/analyst/earnest.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Analyst Info</A></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/invsub/results/hilite.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Financial Results</A></TD></TR>
<TR><TD></TD><TD><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD WIDTH=10>&nbsp;</TD><TD><A HREF="/investor/invsub/results/hilite.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Highlights</A></TD></TR></TABLE></TD></TR>
<TR><TD></TD><TD><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD WIDTH=10>&nbsp;</TD><TD><A HREF="/investor/invsub/results/compare.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Key Ratios</A></TD></TR></TABLE></TD></TR>
<TR><TD></TD><TD BGCOLOR=WHITE CLASS=navleftTDhighlight1><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD WIDTH=10>&nbsp;</TD><TD><A HREF="/investor/invsub/results/statemnt.asp?Symbol=tr" CLASS=navlefthighlight1 TARGET=_top>Statements</A></TD></TR></TABLE></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/invsub/insider/trans.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Insider Trading</A></TD></TR>
<TR><TD></TD><TD HEIGHT=1><IMG SRC=/inc/images/1x1line.gif WIDTH=110 HEIGHT=1></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/research/wizards/SRW.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Research Wizard</A></TD></TR>
<TR><TD></TD><TD HEIGHT=1><IMG SRC=/inc/images/1x1line.gif WIDTH=110 HEIGHT=1></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/finder/predefstocks.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Stock Screener</A></TD></TR>
<TR><TD></TD><TD HEIGHT=1><IMG SRC=/inc/images/1x1line.gif WIDTH=110 HEIGHT=1></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="http://moneycentral.msn.com/community/recommend/recticker.asp?Symbol=tr"; CLASS=navleft1 TARGET=_top>Community</A></TD></TR>
<TR><TD></TD><TD HEIGHT=1><IMG SRC=/inc/images/1x1line.gif WIDTH=110 HEIGHT=1></TD></TR>
<TR><TD WIDTH=8></TD><TD><A HREF="/investor/research/printrep.asp?Symbol=tr" CLASS=navleft1 TARGET=_top>Print Report</A></TD></TR>
<TR><TD></TD><TD HEIGHT=1><IMG SRC=/inc/images/1x1line.gif WIDTH=110 HEIGHT=1></TD></TR>
</TABLE></TD>


<TD WIDTH="100%"><TABLE WIDTH=100% BORDER=0 CELLSPACING=15 CELLPADDING=0><TR><TD><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
<FORM ACTION="/investor/invsub/results/statemnt.asp" METHOD=GET NAME=QlistCtl TARGET="">
<TR NOWRAP VALIGN=MIDDLE><TD>
<SPAN CLASS=Normal>Name or Symbol: </SPAN><INPUT TYPE=text SIZE=12 MAXLENGTH=100 NAME=Symbol VALUE="tr"></TD><TD WIDTH=5>&nbsp;</TD><TD>
<INPUT Name="lstStatement" TYPE=Hidden Value="10YearSummary">
<INPUT TYPE=SUBMIT VALUE=Go CLASS=grayGoBtn></TD><TD WIDTH=10>&nbsp;</TD><TD>
<SPAN CLASS=SmallPrompt><A HREF="/investor/common/find.asp?NextPage=/investor/invsub/results/statemnt.asp?lstStatement=10YearSummary&stmtView=Ann" TARGET="_top">Find Symbol</A>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN></TD><TD WIDTH=10>&nbsp;</TD><TD width=30>&nbsp;</td><TD ALIGN=RIGHT><A HREF="http://ads.msn.com/ads/redirect.dll/CID=0005f7fb01ff64d300000000/AREA=INVBRT?image=http://ads.msn.com/ads/INVBRT/!X610006_IN.GIF"; TARGET="_top"><IMG SRC="http://ads.msn.com/ads/INVBRT/!X610006_IN.GIF"; ALT="Click Here for Fidelity Investments(R)" BORDER=0></A></TD></TR></FORM></TABLE><HR Size=1 Color=#CCCC99>
<A HREF=http://moneycentral.msn.com/investor/controls/setup.asp?Symbol=tr&target=http://moneycentral.msn.com/investor/invsub/results/statemnt.asp target=_top>Upgrade MSN MoneyCentral Software</A>
<SCRIPT LANGUAGE=javascript>
<!--//
document.QlistCtl.Symbol.focus();document.QlistCtl.Symbol.select();
//-->
</SCRIPT>
</TD></TR><TR><TD><FORM NAME="frmStatements"><TABLE WIDTH=100% CELLPADDING=0 CELLSPACING=0><TR><TD><SPAN CLASS=Heading2>Tootsie Roll Industries, Inc.</SPAN>&nbsp;&nbsp;&nbsp;&nbsp;<SPAN CLASS=SmallPrompt>Fiscal Year ends 12/00</SPAN>
</TR></TABLE>
<P>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0>
<TR ALIGN=LEFT>
<TD>
	<B>Financial Statement:</B>
	<SELECT NAME="lstStatement" onChange='switchStatement(); return true' SIZE=1>

<OPTION VALUE="Income">Income Statement</OPTION><OPTION VALUE="Balance">Balance Sheet</OPTION><OPTION VALUE="CashFlow">Cash Flow</OPTION><OPTION SELECTED VALUE="10YearSummary">10 Year Summary</OPTION>

	</SELECT>
</TD>
<TD WIDTH=10>&nbsp;</TD>
<TD>

</TD>				
</TR>
<TR><TD COLSPAN=3>
<SPAN CLASS=SmallPrompt>Financial statements are presented in a <A HREF=/investor/glossary/glossary.asp?TermID=599>Media General Financial Services proprietary format</A>.
See 10K and 10Q <A HREF="http://news.moneycentral.msn.com/sec/all.asp?Symbol=tr";>SEC Filings</A> for as reported statements.
</SPAN>
</TD></TR>
</TABLE>
<P>
</FORM>
<SPAN CLASS=Heading3>Income Statement - 10 Year Summary</SPAN>
<TABLE WIDTH="100%" BORDER=1 CELLPADDING=1 CELLSPACING=0 RULES=ROWS FRAME=BELOW BORDERCOLOR=#CCCC99 BORDERCOLORDARK=WHITE>
<TR ALIGN=RIGHT VALIGN=BOTTOM CLASS=smallfontreverse><TD>&nbsp;</TD><TD CLASS=smallfontreverse><B>Sales</B></TD>
<TD CLASS=smallfontreverse><B>EBIT</B></TD>
<TD CLASS=smallfontreverse><B>Depreciation</B></TD>
<TD CLASS=smallfontreverse><B>Total Net Income</B></TD>
<TD CLASS=smallfontreverse><B>EPS</B></TD>
<TD CLASS=smallfontreverse><B>Tax Rate (%)</B></TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/99</TD>
<TD>396.8</TD>
<TD>104.5</TD>
<TD>10.0</TD>
<TD>71.3</TD>
<TD>1.46</TD>
<TD>36.00</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/98</TD>
<TD>388.7</TD>
<TD>101.3</TD>
<TD>12.8</TD>
<TD>67.5</TD>
<TD>1.41</TD>
<TD>36.30</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/97</TD>
<TD>375.6</TD>
<TD>90.1</TD>
<TD>12.8</TD>
<TD>60.7</TD>
<TD>1.25</TD>
<TD>36.40</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/96</TD>
<TD>340.9</TD>
<TD>71.5</TD>
<TD>12.1</TD>
<TD>47.2</TD>
<TD>0.97</TD>
<TD>37.20</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/95</TD>
<TD>312.7</TD>
<TD>61.5</TD>
<TD>10.7</TD>
<TD>40.4</TD>
<TD>0.83</TD>
<TD>37.00</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/94</TD>
<TD>296.9</TD>
<TD>62.6</TD>
<TD>10.5</TD>
<TD>37.9</TD>
<TD>0.78</TD>
<TD>38.10</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/93</TD>
<TD>259.6</TD>
<TD>55.0</TD>
<TD>8.8</TD>
<TD>35.4</TD>
<TD>0.73</TD>
<TD>38.60</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/92</TD>
<TD>245.4</TD>
<TD>49.1</TD>
<TD>6.1</TD>
<TD>32.0</TD>
<TD>0.64</TD>
<TD>38.30</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/91</TD>
<TD>207.9</TD>
<TD>42.5</TD>
<TD>5.2</TD>
<TD>26.5</TD>
<TD>0.56</TD>
<TD>39.90</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/90</TD>
<TD>194.3</TD>
<TD>36.8</TD>
<TD>5.7</TD>
<TD>22.6</TD>
<TD>0.05</TD>
<TD>39.20</TD>
</TR>
</TABLE>
<P>
<SPAN CLASS=Heading3>Balance Sheet - 10 Year Summary (in Millions)</SPAN>
<TABLE WIDTH="100%" BORDER=1 CELLPADDING=1 CELLSPACING=0 RULES=ROWS FRAME=BELOW BORDERCOLOR=#CCCC99 BORDERCOLORDARK=WHITE>
<TR ALIGN=RIGHT VALIGN=BOTTOM CLASS=smallfontreverse><TD>&nbsp;</TD><TD CLASS=smallfontreverse><B>Current Assets</B></TD>
<TD CLASS=smallfontreverse><B>Current Liabilities</B></TD>
<TD CLASS=smallfontreverse><B>Long Term Debt</B></TD>
<TD CLASS=smallfontreverse><B>Shares Outstanding</B></TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/99</TD>
<TD>224.5</TD>
<TD>56.1</TD>
<TD>7.5</TD>
<TD>48.5 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/98</TD>
<TD>228.5</TD>
<TD>53.4</TD>
<TD>7.5</TD>
<TD>47.8 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/97</TD>
<TD>207.0</TD>
<TD>53.6</TD>
<TD>7.5</TD>
<TD>48.2 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/96</TD>
<TD>201.5</TD>
<TD>48.2</TD>
<TD>7.5</TD>
<TD>48.8 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/95</TD>
<TD>164.9</TD>
<TD>55.3</TD>
<TD>7.5</TD>
<TD>48.8 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/94</TD>
<TD>118.9</TD>
<TD>26.3</TD>
<TD>20.0</TD>
<TD>50.3 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/93</TD>
<TD>111.9</TD>
<TD>50.9</TD>
<TD>20.0</TD>
<TD>48.8 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/92</TD>
<TD>129.7</TD>
<TD>22.5</TD>
<TD>0.0</TD>
<TD>48.8 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/91</TD>
<TD>101.7</TD>
<TD>21.2</TD>
<TD>0.0</TD>
<TD>47.4 Mil</TD>
</TR>
<TR ALIGN=RIGHT>
<TD ALIGN=LEFT>12/90</TD>
<TD>77.9</TD>
<TD>22.6</TD>
<TD>0.0</TD>
<TD>47.4 Mil</TD>
</TR>
</TABLE>

<BR>
<BR><BR CLEAR=ALL><SPAN CLASS=SmallPrompt>
<A HREF="http://www.mgfs.com";><IMG SRC="/investor/common/attrib/images/mglgo.gif" HSPACE=2 VSPACE=0 BORDER=0 ALIGN=LEFT WIDTH=87 HEIGHT=21></A>
Stock data provided by <A HREF="http://www.mgfs.com";>Media General Financial Services</A>.<BR><BR CLEAR=ALL>
</SPAN></TD></TR></TABLE></TD></TR></TABLE>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR=#999999 HEIGHT=9 WIDTH=100%><TR><TD HEIGHT=9><FONT STYLE=font-size:4pt>&nbsp;</FONT></TD></TR></TABLE>

<table cellpadding=0 cellspacing=0 border=0 width=100%>
<tr>
<td height=25 bgcolor=#336699 align=center>
<font size=1 face=arial,sans-serif color=#FFFFFF> &nbsp;&nbsp;&copy;2000 Microsoft Corporation. All rights reserved. </font>
<a href="http://go.msn.com/AD/4/";><font size=1 face=arial,sans-serif color=#FFFFFF>Terms of Use</font></a>&nbsp;&nbsp;
<a href="http://go.msn.com/AD/5/";><font size=1 face=arial,sans-serif color=#FFFFFF>Advertise</font></a>&nbsp;&nbsp;
<a href="http://go.msn.com/AD/6/";><font size=1 face=arial,sans-serif color=#FFFFFF>TRUSTe&nbsp;Approved&nbsp;Privacy&nbsp;Statement</font></a>
</td>
</tr>
</table>

</TD></TR></TABLE>
</BODY></HTML>

-End-------------------------------------------------------------------


 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread