ROOT logo
// $Id: TGHtml.cxx,v 1.4 2007/05/07 15:19:07 brun Exp $
// Author:  Valeriy Onuchin   03/05/2007

/*************************************************************************
 * Copyright (C) 1995-2001, Rene Brun, Fons Rademakers and Reiner Rohlfs *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

/**************************************************************************

    HTML widget for xclass. Based on tkhtml 1.28
    Copyright (C) 1997-2000 D. Richard Hipp <drh@acm.org>
    Copyright (C) 2002-2003 Hector Peraza.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

**************************************************************************/

#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#include "TSystem.h"
#include "TGHtml.h"
#include "THashTable.h"
#include "TObjString.h"
#include "TGIdleHandler.h"
#include "TImage.h"
#include "TGScrollBar.h"
#include "TGTextEntry.h"
#include "TGText.h"
#include "Riostream.h"
#include "TGComboBox.h"
#include "TGListBox.h"

//_____________________________________________________________________________
//
// TGHtml
//
// The ROOT HTML widget. A derivate of TGView.
//_____________________________________________________________________________

ClassImp(TGHtml)

int HtmlTraceMask = 0; //HtmlTrace_Table1 | HtmlTrace_Table4;
int HtmlDepth = 0;

#define DEF_FRAME_BG_COLOR        "#c0c0c0"
#define DEF_FRAME_CURSOR          ""
#define DEF_BUTTON_FG             "black"
#define DEF_BUTTON_HIGHLIGHT_BG   "#d9d9d9"
#define DEF_BUTTON_HIGHLIGHT      "black"


//______________________________________________________________________________
TGHtml::TGHtml(const TGWindow *p, int w, int h, int id) : TGView(p, w, h, id)
{
   // HTML Widget constructor.

   int i;

   fExiting = 0;
   fPFirst = 0;
   fPLast = 0;
   fNToken = 0;
   fLastSized = 0;
   fNextPlaced = 0;
   fFirstBlock = 0;
   fLastBlock = 0;
   fFirstInput = 0;
   fLastInput = 0;
   fNInput = 0;
   fNForm = 0;
   fVarId = 0;  // do we need this??
   fInputIdx = 0;
   fRadioIdx = 0;
   fSelBegin.fP = 0;
   fSelEnd.fP = 0;
   fPSelStartBlock = 0;
   fPSelEndBlock = 0;
   fInsOnTime = DEF_HTML_INSERT_ON_TIME;
   fInsOffTime = DEF_HTML_INSERT_OFF_TIME;
   fInsStatus = 0;
   fInsTimer = 0;
   fIns.fP = 0;
   fPInsBlock = 0;
   fInsIndex = 0;
   fZText = 0;
   fNText = 0;
   fNAlloc = 0;
   fNComplete = 0;
   fICol = 0;
   fIPlaintext = 0;
   fPScript = 0;
   fIdle = 0;
   fStyleStack = 0;
   fParaAlignment = ALIGN_None;
   fRowAlignment = ALIGN_None;
   fAnchorFlags = 0;
   fInDt = 0;
   fInTr = 0;
   fInTd = 0;
   fAnchorStart = 0;
   fFormStart = 0;
   fFormElemStart = 0;
   fFormElemLast = 0;
   fLoEndPtr = 0;
   fLoFormStart = 0;
   fInnerList = 0;
   ResetLayoutContext();
   fHighlightWidth = 0;
   fHighlightBgColorPtr = 0;
   fHighlightColorPtr = 0;
   for (i = 0; i < N_FONT; ++i) fAFont[i] = 0;
   memset(fFontValid, 0, sizeof(fFontValid));
   for (i = 0; i < N_COLOR; ++i) {
      fApColor[i] = 0;
      fIDark[i] = 0;
      fILight[i] = 0;
   }
   fFgColor = AllocColor("black");
   fBgColor = AllocColor("white"); //AllocColor("#c0c0c0");
   fNewLinkColor = AllocColor(DEF_HTML_UNVISITED);
   fOldLinkColor = AllocColor(DEF_HTML_VISITED);
   fSelectionColor = AllocColor(DEF_HTML_SELECTION_COLOR);

   fApColor[COLOR_Normal] = fFgColor;
   fApColor[COLOR_Visited] = fOldLinkColor;
   fApColor[COLOR_Unvisited] = fNewLinkColor;
   fApColor[COLOR_Selection] = fSelectionColor;
   fApColor[COLOR_Background] = fBgColor;

   fBgImage = 0;

   SetBackgroundColor(fApColor[COLOR_Background]->fPixel);
   SetBackgroundPixmap(0);  // force usage of solid color

   fColorUsed = 0;

   for (i = 0; i < N_CACHE_GC; ++i) fAGcCache[i].fIndex = 0;
   fGcNextToFree = 0;
   fImageList = 0;
   fZBaseHref = 0;
   fInnerList = 0;
   fFormPadding = 5;
   fOverrideFonts = 0;
   fOverrideColors = 0;
   fHasScript = 0;
   fHasFrames = 0;
   fAddEndTags = 0;
   fTableBorderMin = 0;
   fVarind = 0;
   fIdind = 0;
   fInParse = 0;
   fZGoto = 0;
   fExts = 0;
   fUnderlineLinks = kTRUE;
   fExportSelection = DEF_HTML_EXPORT_SEL;
   fTableRelief = HTML_RELIEF_RAISED;
   fRuleRelief = HTML_RELIEF_SUNKEN;
   fRulePadding = 5;
   fZBase = 0;
   fZBaseHref = 0;
   fCursor = kPointer;
   fMaxX = 0;
   fMaxY = 0;

   fXMargin = fYMargin = 0; //HTML_INDENT/4;

   fFlags = RESIZE_ELEMENTS | RELAYOUT;

   fDirtyLeft = LARGE_NUMBER;
   fDirtyRight = 0;
   fDirtyTop = LARGE_NUMBER;
   fDirtyBottom = 0;


   fVsb->SetAccelerated();
   fHsb->SetAccelerated();

   fLastUri = 0;

   AddInput(kExposureMask | kFocusChangeMask);
   AddInput(kButtonPressMask | kButtonReleaseMask | kPointerMotionMask);

   fUidTable = new THashTable(100);
}

//______________________________________________________________________________
TGHtml::~TGHtml()
{
   // HTML widget destructor.

   int i;

   fExiting = 1;
   HClear();
   for (i = 0; i < N_FONT; i++) {
      if (fAFont[i] != 0) fClient->FreeFont(fAFont[i]);
   }
   if (fInsTimer) delete fInsTimer;
   if (fIdle) delete fIdle;

  // TODO: should also free colors!
}

//______________________________________________________________________________
void TGHtml::UpdateBackgroundStart()
{
   // Start background update.

   //GCValues_t gcv;
   //unsigned int mask = GCTileStipXOrigin | GCTileStipYOrigin;
//
   //gcv.ts_x_origin = -fVvisible.fX;
   //gcv.ts_y_origin = -fVisibleStart.fY;
   //XChangeGC(GetDisplay(), _backGC, mask, &gcv);
}

//______________________________________________________________________________
void TGHtml::FreeColor(ColorStruct_t *color)
{
   // Free system color.

   gVirtualX->FreeColor(gClient->GetDefaultColormap(), color->fPixel);
   delete color;
}

//______________________________________________________________________________
ColorStruct_t *TGHtml::AllocColor(const char *name)
{
   // Allocate system color by name.

   ColorStruct_t *color = new ColorStruct_t;

   color->fPixel = 0;
   if (gVirtualX->ParseColor(fClient->GetDefaultColormap(), name, *color)) {
      if (!gVirtualX->AllocColor(fClient->GetDefaultColormap(), *color)) {
         // force allocation of pixel 0
         gVirtualX->QueryColor(fClient->GetDefaultColormap(), *color);
         gVirtualX->AllocColor(fClient->GetDefaultColormap(), *color);
      }
   }

   return color;
}

//______________________________________________________________________________
ColorStruct_t *TGHtml::AllocColorByValue(ColorStruct_t *color)
{
   // Allocate system color by value.

   ColorStruct_t *c = new ColorStruct_t;
   *c = *color;

   if (!gVirtualX->AllocColor(gClient->GetDefaultColormap(), *c)) {
      // force allocation of pixel 0
      c->fPixel = 0;
      gVirtualX->QueryColor(gClient->GetDefaultColormap(), *c);
      gVirtualX->AllocColor(gClient->GetDefaultColormap(), *c);
   }

   return c;
}

//______________________________________________________________________________
void TGHtml::Clear(Option_t *)
{
   // Erase all HTML from this widget and clear the screen. This is
   // typically done before loading a new document.

   HClear();
   TGView::Clear();
   fFlags |= REDRAW_TEXT | VSCROLL | HSCROLL;
   ScheduleRedraw();
}

//______________________________________________________________________________
int TGHtml::ParseText(char *text, const char *index)
{
   // Appends (or insert at the specified position) the given HTML text to the
   // end of any HTML text that may have been inserted by prior calls to this
   // command.  Then it runs the tokenizer, parser and layout engine as far as
   // possible with the text that is available. The display is updated
   // appropriately.

   SHtmlIndex_t iStart;
   TGHtmlElement *savePtr=0;

   iStart.fP = 0;
   iStart.fI = 0;

   fLoEndPtr = fPLast;

   if (index) {
      int rc = GetIndex(index, &iStart.fP, &iStart.fI);
      if (rc != 0) return kFALSE;  // malformed index
      if (iStart.fP) {
         savePtr = iStart.fP->fPNext;
         fPLast = iStart.fP;
         iStart.fP->fPNext = 0;
      }
   }

   TokenizerAppend(text);

   if (fLoEndPtr) {
      fFormStart = fLoFormStart;
      if (iStart.fP && savePtr) {
         AddStyle(fLoEndPtr);
         fPLast->fPNext = savePtr;
         savePtr->fPPrev = fPLast;
         fPLast = fLoEndPtr;
         fFlags |= REDRAW_TEXT | RELAYOUT;
         ScheduleRedraw();
      } else if (fLoEndPtr->fPNext) {
         AddStyle(fLoEndPtr->fPNext);
      }
   } else if (fPFirst) {
      fParaAlignment = ALIGN_None;
      fRowAlignment = ALIGN_None;
      fAnchorFlags = 0;
      fInDt = 0;
      fAnchorStart = 0;
      fFormStart = 0;
      fInnerList = 0;
      fNInput = 0;
      AddStyle(fPFirst);
   }
#if 1
   fLoEndPtr = fPLast;
   fLoFormStart = fFormStart;
#endif

   fFlags |= EXTEND_LAYOUT;
   ScheduleRedraw();

   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::SetTableRelief(int relief)
{
   // Sets relief mode of html table.

   if (fTableRelief != relief) {
      fTableRelief = relief;
      fFlags |= RELAYOUT;
      RedrawEverything();
   }
}

//______________________________________________________________________________
void TGHtml::SetRuleRelief(int relief)
{
   // Sets relief mode of html rule.

   if (fRuleRelief != relief) {
      fRuleRelief = relief;
      fFlags |= RELAYOUT;
      RedrawEverything();
   }
}

//______________________________________________________________________________
void TGHtml::UnderlineLinks(int onoff)
{
   // Set/reset html links underline.

   if (fUnderlineLinks != onoff) {
      fUnderlineLinks = onoff;
//    fFlags |= RESIZE_ELEMENTS | RELAYOUT;
//    AddStyle(fPFirst);

      TGHtmlElement *p;
      SHtmlStyle_t style = GetCurrentStyle();
      for (p = fPFirst; p; p = p->fPNext) {
         if (p->fType == Html_A) {
            if (fAnchorStart) {
               style = PopStyleStack(Html_EndA);
               fAnchorStart = 0;
               fAnchorFlags = 0;
            }
            const char *z = p->MarkupArg("href", 0);
            if (z) {
               style.fColor = GetLinkColor(z);
               if (fUnderlineLinks) style.fFlags |= STY_Underline;
               fAnchorFlags |= STY_Anchor;
               PushStyleStack(Html_EndA, style);
               fAnchorStart = (TGHtmlAnchor *) p;
            }
         } else if (p->fType == Html_EndA) {
            if (fAnchorStart) {
               ((TGHtmlRef *)p)->fPOther = fAnchorStart;
               style = PopStyleStack(Html_EndA);
               fAnchorStart = 0;
               fAnchorFlags = 0;
            }
         }
         p->fStyle.fFlags &= ~STY_Underline;
         p->fStyle.fFlags |= (style.fFlags & STY_Underline);
      }

      RedrawEverything();
   }
}

//______________________________________________________________________________
void TGHtml::SetBaseUri(const char *uri)
{
   // Sets base URI.

   if (fZBase) delete[] fZBase;
   fZBase = 0;
   if (uri) fZBase = StrDup(uri);
}

//______________________________________________________________________________
int TGHtml::GotoAnchor(const char *name)
{
   // Go to anchor position.

   const char *z;
   TGHtmlElement *p;

   for (p = fPFirst; p; p = p->fPNext) {
      if (p->fType == Html_A) {
         z = p->MarkupArg("name", 0);
         if (z && strcmp(z, name) == 0) {
            ScrollToPosition(TGLongPosition(fVisible.fX, ((TGHtmlAnchor *)p)->fY));
            return kTRUE;
         }
      }
   }

   return kFALSE;
}

//______________________________________________________________________________
const char *TGHtml::GetUid(const char *string)
{
   // Given a string, this procedure returns a unique identifier for the
   // string.
   //
   // This procedure returns a pointer to a new char string corresponding to
   // the "string" argument. The new string has a value identical to string
   // (strcmp will return 0), but it's guaranteed that any other calls to this
   // procedure with a string equal to "string" will return exactly the same
   // result (i.e. can compare pointer *values* directly, without having to
   // call strcmp on what they point to).

   //int dummy;

   TObjString *obj = 0;
   obj = (TObjString*)fUidTable->FindObject(string);

   if (!obj) {
      obj = new TObjString(string);
      fUidTable->Add(obj);
   }

   return (const char *)obj->GetName();
}

//______________________________________________________________________________
void TGHtml::ComputeVirtualSize()
{
   // Computes virtual size of html area.

   fVirtualSize = TGDimension(fMaxX, fMaxY);
}

//______________________________________________________________________________
void TGHtml::ClearGcCache()
{
   // Clear the cache of GCs

   int i;

   for (i = 0; i < N_CACHE_GC; i++) {
      if (fAGcCache[i].fIndex) {
         gVirtualX->DeleteGC(fAGcCache[i].fGc);
         fAGcCache[i].fIndex = 0;
      }
   }
   fGcNextToFree = 0;
}

//______________________________________________________________________________
void TGHtml::ResetLayoutContext()
{
   // Reset the main layout context in the main widget.  This happens
   // before we redo the layout, or just before deleting the widget.

   fLayoutContext.Reset();
}

//______________________________________________________________________________
void TGHtml::Redraw()
{
   // This routine is invoked in order to redraw all or part of the HTML
   // widget. This might happen because the display has changed, or in
   // response to an expose event. In all cases, though, this routine
   // is called by an idle handler.

   Pixmap_t pixmap;           // The buffer on which to render HTML
   int x, y, w, h;          // Virtual canvas coordinates of area to draw
   int hw;                  // highlight thickness
   int clipwinH, clipwinW;  // Width and height of the clipping window
   TGHtmlBlock *pBlock;      // For looping over blocks to be drawn
   int redoSelection = 0;   // kTRUE to recompute the selection

   // Don't do anything if we are in the middle of a parse.

   if (fInParse) {
      fFlags &= ~REDRAW_PENDING;
      return;
   }

   // Recompute the layout, if necessary or requested.
   //
   // Calling LayoutDoc() is tricky because LayoutDoc() may invoke one
   // or more user-overriden methods, and these methods could, in theory,
   // do nasty things. So we have to take precautions:
   //
   // *  Do not remove the REDRAW_PENDING flag until after LayoutDoc()
   //    has been called, to prevent a recursive call to Redraw().

   if ((fFlags & RESIZE_ELEMENTS) != 0 && (fFlags & STYLER_RUNNING) == 0) {
      TGHtmlImage *pImage;
      for (pImage = fImageList; pImage; pImage = pImage->fPNext) {
         pImage->fPList = 0;
      }
      fLastSized = 0;
      fFlags &= ~RESIZE_ELEMENTS;
      fFlags |= RELAYOUT;
   }

   // We used to make a distinction between RELAYOUT and EXTEND_LAYOUT.
   // RELAYOUT would be used when the widget was resized, but the
   // less compute-intensive EXTEND_LAYOUT would be used when new
   // text was appended.
   //
   // Unfortunately, EXTEND_LAYOUT has some problem that arise when
   // tables are used.  The quick fix is to make an EXTEND_LAYOUT do
   // a complete RELAYOUT.  Someday, we need to fix EXTEND_LAYOUT so
   // that it works right...

   if ((fFlags & (RELAYOUT | EXTEND_LAYOUT)) != 0
      && (fFlags & STYLER_RUNNING) == 0) {
      fNextPlaced = 0;
      //fNInput = 0;
      fVarId = 0;
      fMaxX = 0;
      fMaxY = 0;
      ResetLayoutContext();
      fFirstBlock = 0;
      fLastBlock = 0;
      redoSelection = 1;
      fFlags &= ~RELAYOUT;
      fFlags |= HSCROLL | VSCROLL | REDRAW_TEXT | EXTEND_LAYOUT;
   }

   if ((fFlags & EXTEND_LAYOUT) && fPFirst != 0) {
      LayoutDoc();
      fFlags &= ~EXTEND_LAYOUT;
      FormBlocks();
      MapControls();
      if (redoSelection && fSelBegin.fP && fSelEnd.fP) {
         UpdateSelection(1);
         UpdateInsert();
      }
   }
   fFlags &= ~REDRAW_PENDING;

   // No need to do any actual drawing if we aren't mapped

////  if (!IsMapped()) return;

   // Update the scrollbars.

   if ((fFlags & (HSCROLL | VSCROLL)) != 0) {
      ComputeVirtualSize();
      fFlags &= ~(HSCROLL | VSCROLL);

      if (fFlags & REDRAW_PENDING) return;
   }

   // Redraw the focus highlight, if requested
   hw = fHighlightWidth;
   if (fFlags & REDRAW_FOCUS) {
      if (hw > 0) {
#if 0
      unsigned long color;

      if (fFlags & GOT_FOCUS) {
         color = highlightColorPtr;
      } else {
         color = highlightBgColorPtr;
      }
      _DrawFocusHighlight(color);
#endif
      }
      fFlags &= ~REDRAW_FOCUS;
   }

   // If the styler is in a callback, abort further processing.
   // TODO: check this!

   if (fFlags & STYLER_RUNNING) {
      goto earlyOut;
   }

   MapControls();

   // Compute the virtual canvas coordinates corresponding to the
   // dirty region of the clipping window.

   clipwinW = fCanvas->GetWidth();
   clipwinH = fCanvas->GetHeight();
   if (fFlags & REDRAW_TEXT) {
      w = clipwinW;
      h = clipwinH;
      x = fVisible.fX;
      y = fVisible.fY;
      fDirtyLeft = 0;
      fDirtyTop = 0;
      fFlags &= ~REDRAW_TEXT;
   } else {
      if (fDirtyLeft < 0) fDirtyLeft = 0;
      if (fDirtyRight > clipwinW) fDirtyRight = clipwinW;
      if (fDirtyTop < 0) fDirtyTop = 0;
      if (fDirtyBottom > clipwinH) fDirtyBottom = clipwinH;
      w = fDirtyRight - fDirtyLeft;
      h = fDirtyBottom - fDirtyTop;
      x = fVisible.fX + fDirtyLeft;
      y = fVisible.fY + fDirtyTop;
   }

   // Skip the rest of the drawing process if the area to be refreshed is
   // less than zero
   if (w > 0 && h > 0) {
      GContext_t gcBg;
      TGRectangle xrec;
      // printf("Redraw %dx%d at %d,%d\n", w, h, x, y);

      // Allocate and clear a pixmap upon which to draw
      gcBg = GetGC(COLOR_Background, FONT_Any);
      pixmap = gVirtualX->CreatePixmap(fCanvas->GetId(), w, h);
      xrec.fX = 0;
      xrec.fY = 0;
      xrec.fW = w;
      xrec.fH = h;
#if 0

//old--    XFillRectangles(GetDisplay(), pixmap, gcBg, &xrec, 1);
//new--    if (fBgImage)
//           BGDraw(fVisible.fX, fVisible.fY, w, h, fBgImage);
#else

      fWhiteGC.SetTileStipXOrigin(-fVisible.fX - fDirtyLeft);
      fWhiteGC.SetTileStipYOrigin(-fVisible.fY - fDirtyTop);

      gVirtualX->FillRectangle(pixmap, fWhiteGC.GetGC(), 0, 0, w, h);
      UpdateBackgroundStart();  // back to original
#endif

      // Render all visible HTML onto the pixmap
      for (pBlock = fFirstBlock; pBlock; pBlock = pBlock->fBNext) {
         if (pBlock->fTop <= y+h && pBlock->fBottom >= y-10 &&
            pBlock->fLeft <= x+w && pBlock->fRight >= x-10) {
            BlockDraw(pBlock, pixmap, x, y, w, h, pixmap);
         }
      }

      // Finally, copy the pixmap onto the window and delete the pixmap
      gVirtualX->CopyArea(pixmap, fCanvas->GetId(),
                          gcBg, 0, 0, w, h, fDirtyLeft, fDirtyTop);
      gVirtualX->Update(kFALSE);

      gVirtualX->DeletePixmap(pixmap);
//    XFlush(GetDisplay());
   }

   // Redraw images, if requested
   if (fFlags & REDRAW_IMAGES) {
      TGHtmlImage *pImage;
      TGHtmlImageMarkup *pElem;
      int top, bottom, left, right;     // Coordinates of the clipping window
      int imageTop;                     // Top edge of image

      top = fVisible.fY;
      bottom = top + fCanvas->GetHeight();
      left = fVisible.fX;
      right = left + fCanvas->GetWidth();
      for (pImage = fImageList; pImage; pImage = pImage->fPNext) {
         for (pElem = pImage->fPList; pElem; pElem = pElem->fINext) {
            if (pElem->fRedrawNeeded == 0) continue;
            imageTop = pElem->fY - pElem->fAscent;
            if (imageTop > bottom || imageTop + pElem->fH < top
               || pElem->fX > right || pElem->fX + pElem->fW < left) continue;

            DrawImage(pElem, fCanvas->GetId(), left, top, right, bottom);
         }
      }
      fFlags &= ~(REDRAW_IMAGES | ANIMATE_IMAGES);
   }

   // Set the dirty region to the empty set.
earlyOut:
   fDirtyTop = LARGE_NUMBER;
   fDirtyLeft = LARGE_NUMBER;
   fDirtyBottom = 0;
   fDirtyRight = 0;

   return;
}

//______________________________________________________________________________
void TGHtml::ScheduleRedraw()
{
   // Make sure that a call to the Redraw() routine has been queued.

   if ((fFlags & REDRAW_PENDING) == 0 /*&& IsMapped()*/) {
      if (!fIdle) fIdle = new TGIdleHandler(this);
      fFlags |= REDRAW_PENDING;
   }
}

//______________________________________________________________________________
Bool_t TGHtml::HandleIdleEvent(TGIdleHandler *idle)
{
   // Handles idle event.

   if (idle != fIdle) return kFALSE;
   Redraw();
   delete fIdle;
   fIdle = NULL;
   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::RedrawArea(int left, int top, int right, int bottom)
{
   // If any part of the screen needs to be redrawn, then call this routine
   // with the values of a box (in window coordinates) that needs to be
   // redrawn. This routine will schedule an idle handler to do the redraw.
   //
   // The box coordinates are relative to the clipping window (fCanvas).

   if (bottom < 0) return;
   if (top > (int)fCanvas->GetHeight()) return;
   if (right < 0) return;
   if (left > (int)fCanvas->GetWidth()) return;
   if (fDirtyTop > top) fDirtyTop = top;
   if (fDirtyLeft > left) fDirtyLeft = left;
   if (fDirtyBottom < bottom) fDirtyBottom = bottom;
   if (fDirtyRight < right) fDirtyRight = right;
   ScheduleRedraw();
}

//______________________________________________________________________________
void TGHtml::DrawRegion(Int_t x, Int_t y, UInt_t w, UInt_t h)
{
   // Draw region defined by [x,y] [w,h].

   TGView::DrawRegion(x, y, w, h);

#if 0
   RedrawArea(x, y, x + w + 1, y + h + 1);
#else
   int left = x;
   int top = y;
   int right = x + w + 1;
   int bottom = y + h + 1;
   if (bottom < 0) return;
   if (top > (int) fCanvas->GetHeight()) return;
   if (right < 0) return;
   if (left > (int)fCanvas->GetWidth()) return;
   if (fDirtyTop > top) fDirtyTop = top;
   if (fDirtyLeft > left) fDirtyLeft = left;
   if (fDirtyBottom < bottom) fDirtyBottom = bottom;
   if (fDirtyRight < right) fDirtyRight = right;

   fFlags |= REDRAW_PENDING;
   Redraw();
#endif
   return;
}

//______________________________________________________________________________
Bool_t TGHtml::ItemLayout()
{
   // Layout html widget.

#if 0
   fFlags |= RELAYOUT | VSCROLL | HSCROLL;
   Redraw(); //RedrawEverything();
#else
   fNextPlaced = 0;
   //fNInput = 0;
   fVarId = 0;
   fMaxX = 0;
   fMaxY = 0;
   ResetLayoutContext();
   fFirstBlock = 0;
   fLastBlock = 0;
   if (fPFirst != 0) {
      LayoutDoc();
      FormBlocks();
      MapControls();
      if (fSelBegin.fP && fSelEnd.fP) {
         UpdateSelection(1);
         UpdateInsert();
      }
   }
   ComputeVirtualSize();
   ScheduleRedraw();
#endif
   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::RedrawBlock(TGHtmlBlock *p)
{
   // Redraw the TGHtmlBlock given.

   if (p) {
      RedrawArea(p->fLeft - fVisible.fX, p->fTop - fVisible.fY,
                 p->fRight - fVisible.fX + 1, p->fBottom - fVisible.fY);
   }
}

//______________________________________________________________________________
void TGHtml::RedrawEverything()
{
   // Call this routine to force the entire widget to be redrawn.

   fFlags |= REDRAW_FOCUS | REDRAW_TEXT;
   ScheduleRedraw();
}

//______________________________________________________________________________
void TGHtml::RedrawText(int y)
{
   // Call this routine to cause all of the rendered HTML at the
   // virtual canvas coordinate of Y and beyond to be redrawn.

   int clipHeight;     // Height of the clipping window

   clipHeight = fCanvas->GetHeight();
   y -= fVisible.fY;
   if (y < clipHeight) {
      RedrawArea(0, y, LARGE_NUMBER, clipHeight);
   }
}

//______________________________________________________________________________
void TGHtml::HClear()
{
   // Erase all data from the HTML widget. Bring it back to an empty screen.

   int i;
   TGHtmlElement *p, *fPNext;

   fXMargin = fYMargin = 0; //HTML_INDENT/4;

   DeleteControls();
   for (p = fPFirst; p; p = fPNext) {
      fPNext = p->fPNext;
      delete p;
   }
   fPFirst = 0;
   fPLast = 0;
   fNToken = 0;
   if (fZText) delete[] fZText;
   fZText = 0;
   fNText = 0;
   fNAlloc = 0;
   fNComplete = 0;
   fIPlaintext = 0;

   for (i = 0; i < N_COLOR; ++i) {
      if (fApColor[i] != 0) FreeColor(fApColor[i]);
      fApColor[i] = 0;
      fIDark[i] = 0;
      fILight[i] = 0;
   }

   if (!fExiting) {
      fFgColor = AllocColor("black");
      fBgColor = AllocColor("white"); //AllocColor("#c0c0c0");
      fNewLinkColor = AllocColor(DEF_HTML_UNVISITED);
      fOldLinkColor = AllocColor(DEF_HTML_VISITED);
      fSelectionColor = AllocColor(DEF_HTML_SELECTION_COLOR);

      fApColor[COLOR_Normal] = fFgColor;
      fApColor[COLOR_Visited] = fOldLinkColor;
      fApColor[COLOR_Unvisited] = fNewLinkColor;
      fApColor[COLOR_Selection] = fSelectionColor;
      fApColor[COLOR_Background] = fBgColor;

      SetBackgroundColor(fApColor[COLOR_Background]->fPixel);
      SetBackgroundPixmap(0);  // use solid color
   }

   fColorUsed = 0;
   while (fImageList) {
      TGHtmlImage *p2 = fImageList;
      fImageList = p2->fPNext;
      delete p2;
   }

   if (fBgImage) delete fBgImage;
   fBgImage = 0;

   while (fStyleStack) {
      SHtmlStyleStack_t *p2 = fStyleStack;
      fStyleStack = p2->fPNext;
      delete p2;
   }
   ClearGcCache();
   ResetLayoutContext();
//  if (fZBase) delete[] fZBase;
//  fZBase = 0;

   if (fZBaseHref) delete [] fZBaseHref;
   fZBaseHref = 0;
   fLastSized = 0;
   fNextPlaced = 0;
   fFirstBlock = 0;
   fLastBlock = 0;
   fNInput = 0;
   fNForm = 0;
   fVarId = 0;
   fParaAlignment = ALIGN_None;
   fRowAlignment = ALIGN_None;
   fAnchorFlags = 0;
   fInDt = 0;
   fAnchorStart = 0;
   fFormStart = 0;
   fInnerList = 0;
   fMaxX = 0;
   fMaxY = 0;
#if 0  // in OXView::Clear()
   fVisible = TGPosition(0, 0);
   _virtualSize = TGDimension(0, 0);
   ScrollTTGPosition(fVisible);
#endif
   fPInsBlock = 0;
   fIns.fP = 0;
   fSelBegin.fP = 0;
   fSelEnd.fP = 0;
   fPSelStartBlock = 0;
   fPSelEndBlock = 0;
   fHasScript = 0;
   fHasFrames = 0;
   fLastUri = 0;
}

//______________________________________________________________________________
Bool_t TGHtml::HandleTimer(TTimer *t)
{
   // Handle timer event.

   if (t == fInsTimer) {
      if (fInsTimer) delete fInsTimer;
      fInsTimer = NULL;
      FlashCursor();
      return kTRUE;
   } else {
      TGHtmlImage *pImage;
      for (pImage = fImageList; pImage; pImage = pImage->fPNext) {
         if (pImage->fTimer == t) {
            AnimateImage(pImage);
            return kTRUE;
         }
      }
   }
   return kFALSE;
}

//______________________________________________________________________________
void TGHtml::FlashCursor()
{
   // Flash the insertion cursor.

   if (fPInsBlock == 0 || fInsOnTime <= 0 || fInsOffTime <= 0) return;
   RedrawBlock(fPInsBlock);
   if ((fFlags & GOT_FOCUS) == 0) {
      fInsStatus = 0;
   } else if (fInsStatus) {
      fInsTimer = new TTimer(this, fInsOffTime);
      fInsStatus = 0;
   } else {
      fInsTimer = new TTimer(this, fInsOnTime);
      fInsStatus = 1;
   }
}

//______________________________________________________________________________
GContext_t TGHtml::GetGC(int color, int font)
{
   // Return a GC from the cache.  As many as N_CACHE_GCs are kept valid
   // at any one time.  They are replaced using an LRU algorithm.
   //
   // A value of FONT_Any (-1) for the font means "don't care".

   int i, j;
   GcCache_t *p = fAGcCache;
   GCValues_t gcValues;
   TGFont *xfont;

   // Check for an existing GC.

   if (color < 0 || color >= N_COLOR) color = 0;
   if (font < FONT_Any || font >= N_FONT) font = FONT_Default;

   for (i = 0; i < N_CACHE_GC; i++, p++) {
      if (p->fIndex == 0) continue;
      if ((font < 0 || p->fFont == font) && p->fColor == color) {
         if (p->fIndex > 1) {
            for (j = 0; j < N_CACHE_GC; j++) {
               if (fAGcCache[j].fIndex && fAGcCache[j].fIndex < p->fIndex ) {
                  fAGcCache[j].fIndex++;
               }
            }
            p->fIndex = 1;
         }
         return fAGcCache[i].fGc;
      }
   }

   // No GC matches. Find a place to allocate a new GC.

   p = fAGcCache;
   for (i = 0; i < N_CACHE_GC; i++, p++) {
      if (p->fIndex == 0 || p->fIndex == N_CACHE_GC) break;
   }
   if (i >= N_CACHE_GC) {  // No slot, so free one (round-robin)
      p = fAGcCache;
      for (i = 0; i < N_CACHE_GC && i < fGcNextToFree; ++i, ++p) {}
         fGcNextToFree = (fGcNextToFree + 1) % N_CACHE_GC;
         gVirtualX->DeleteGC(p->fGc);
   }
   gcValues.fForeground = fApColor[color]->fPixel;
   gcValues.fGraphicsExposures = kTRUE;
   gcValues.fMask = kGCForeground | kGCGraphicsExposures;

   if (font < 0) font = FONT_Default;
   xfont = GetFont(font);

   if (xfont) {
      gcValues.fFont = xfont->GetFontHandle();
      gcValues.fMask |= kGCFont;
   }

   p->fGc = gVirtualX->CreateGC(fId, &gcValues);

   if (p->fIndex == 0) p->fIndex = N_CACHE_GC + 1;
   for (j = 0; j < N_CACHE_GC; j++) {
      if (fAGcCache[j].fIndex && fAGcCache[j].fIndex < p->fIndex) {
         fAGcCache[j].fIndex++;
      }
   }
   p->fIndex = 1;
   p->fFont = font;
   p->fColor = color;

   return p->fGc;
}

//______________________________________________________________________________
GContext_t TGHtml::GetAnyGC()
{
   // Retrieve any valid GC. The font and color don't matter since the
   // GC will only be used for copying.

   int i;
   GcCache_t *p = fAGcCache;

   for (i = 0; i < N_CACHE_GC; i++, p++) {
      if (p->fIndex) return p->fGc;
   }

   return GetGC(COLOR_Normal, FONT_Default);
}

//______________________________________________________________________________
Bool_t TGHtml::HandleFocusChange(Event_t *event)
{
   // Handle focus change event.

   if (event->fType == kFocusIn) {
      fFlags |= GOT_FOCUS | REDRAW_FOCUS;
      ScheduleRedraw();
      UpdateInsert();
   } else {  // FocusOut
      fFlags &= ~GOT_FOCUS;
      fFlags |= REDRAW_FOCUS;
      ScheduleRedraw();
   }
   return kTRUE;
}

//______________________________________________________________________________
TGHtmlInput *TGHtml::GetInputElement(int x, int y)
{
   // This routine searchs for a hyperlink beneath the coordinates x,y
   // and returns a pointer to the HREF for that hyperlink. The text
   // is held in one of the markup argv[] fields of the <a> markup.

   TGHtmlInput *p;     // For looping over all controls
   int vx, vy, vw, vh;    // Part of the virtual canvas that is visible

   vx = fVisible.fX;
   vy = fVisible.fY;
   vw = fCanvas->GetWidth();
   vh = fCanvas->GetHeight();
   for (p = fFirstInput; p; p = p->fINext) {
      if (p->fFrame == 0) continue;
      if (p->fY < vy + vh && p->fY + p->fH > vy &&
          p->fX < vx + vw && p->fX + p->fW > vx) {
         if ((x > p->fX) && (y > p->fY) && (x < (p->fX + p->fW)) &&
             (y < (p->fY + p->fH)) ) {
            return p;
         }
      }
   }
   return 0;
}

//______________________________________________________________________________
Bool_t TGHtml::HandleHtmlInput(TGHtmlInput *pr, Event_t *event)
{
   // Handle html input (button, checkbox, ...) event.

   Window_t childdum;
   Event_t eventSt;
   eventSt.fType      = event->fType;
   eventSt.fWindow    = event->fWindow;
   eventSt.fTime      = event->fTime;
   eventSt.fX         = 2;
   eventSt.fY         = 2;
   eventSt.fXRoot     = event->fXRoot;
   eventSt.fYRoot     = event->fYRoot;
   eventSt.fCode      = event->fCode;
   eventSt.fState     = event->fState;
   eventSt.fWidth     = event->fWidth;
   eventSt.fHeight    = event->fHeight;
   eventSt.fCount     = event->fCount;
   eventSt.fSendEvent = event->fSendEvent;
   eventSt.fHandle    = event->fHandle;
   eventSt.fFormat    = event->fFormat;
   eventSt.fUser[0]   = event->fUser[0];
   eventSt.fUser[1]   = event->fUser[1];
   eventSt.fUser[2]   = event->fUser[2];
   eventSt.fUser[3]   = event->fUser[3];
   eventSt.fUser[4]   = event->fUser[4];
   gVirtualX->TranslateCoordinates(GetId(), pr->fFrame->GetId(),
                                   event->fX, event->fY, eventSt.fX,
                                   eventSt.fY, childdum);

   const char *name = pr->MarkupArg("name", 0);
   const char *val = pr->MarkupArg("value", 0);
   switch (pr->fItype) {
      case INPUT_TYPE_Submit:
      case INPUT_TYPE_Button: {
         TGButton *b = (TGButton *) pr->fFrame;
         Bool_t was = !b->IsDown();
         b->HandleButton(&eventSt);
         Bool_t now = !b->IsDown();
         if (!was && now) {
            if (pr->fItype == INPUT_TYPE_Submit)
               SubmitClicked(val);   // emit SubmitClicked
            else
               ButtonClicked(name, val);   // emit ButtonClicked
         }
         break;
      }
      case INPUT_TYPE_Radio: {
         TGRadioButton *rb = (TGRadioButton *) pr->fFrame;
         Bool_t was = !rb->IsDown();
         rb->HandleButton(&eventSt);
         Bool_t now = !rb->IsDown();
         if ((!was && now) || (was && !now)) {
            HandleRadioButton(pr);
            RadioChanged(name, val);      // emit RadioChanged
         }
         break;
      }
      case INPUT_TYPE_Checkbox: {
         TGCheckButton *cb = (TGCheckButton *) pr->fFrame;
         Bool_t was = !cb->IsDown();
         cb->HandleButton(&eventSt);
         Bool_t now = !cb->IsDown();
         if ((!was && now) || (was && !now))
            CheckToggled(name, !now, val);   // emit CheckToggled
         break;
      }
      case INPUT_TYPE_Text:
      case INPUT_TYPE_Password: {
         TGTextEntry *te = (TGTextEntry *) pr->fFrame;
         te->SetFocus();
         break;
      }
      case INPUT_TYPE_Select: {
         RemoveInput(kButtonPressMask | kButtonReleaseMask | kPointerMotionMask);
         eventSt.fUser[0] = childdum;
         if (pr->fFrame->InheritsFrom("TGComboBox"))
            ((TGComboBox *)pr->fFrame)->HandleButton(&eventSt);
         else if (pr->fFrame->InheritsFrom("TGListBox"))
            ((TGListBox *)pr->fFrame)->HandleButton(&eventSt);
         InputSelected(name, val); // emit InputSelected
         AddInput(kButtonPressMask | kButtonReleaseMask | kPointerMotionMask);
         break;
      }
      default:
         break;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGHtml::HandleRadioButton(TGHtmlInput *p)
{
   // Handle radio button event.

   TGHtmlInput *pr;
   for (pr = fFirstInput; pr; pr = pr->fINext) {
      if ((pr->fPForm == p->fPForm) && (pr->fItype == INPUT_TYPE_Radio)) {
         if (pr != p) {
            if (strcmp(pr->MarkupArg("name", ""), p->MarkupArg("name", "")) == 0) {
               ((TGRadioButton *)pr->fFrame)->SetState(kButtonUp);
            }
         }
      }
   }

   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::ButtonClicked(const char *name, const char *val)
{
   // Emit ButtonClicked() signal.

   Long_t args[2];

   args[0] = (Long_t)name;
   args[1] = (Long_t)val;

   Emit("ButtonClicked(char*,char*)", args);
}

//______________________________________________________________________________
void TGHtml::CheckToggled(const char *name, Bool_t on, const char *val)
{
   // Emit CheckToggled() signal.

   Long_t args[3];

   args[0] = (Long_t)name;
   args[1] = on;
   args[2] = (Long_t)val;

   Emit("CheckToggled(char*,Bool_t,char*)", args);
}

//______________________________________________________________________________
void TGHtml::RadioChanged(const char *name, const char *val)
{
   // Emit RadioChanged() signal.

   Long_t args[2];

   args[0] = (Long_t)name;
   args[1] = (Long_t)val;

   Emit("RadioChanged(char*,char*)", args);
}

//______________________________________________________________________________
void TGHtml::InputSelected(const char *name, const char *val)
{
   // Emit Selected() signal.

   Long_t args[2];

   args[0] = (Long_t)name;
   args[1] = (Long_t)val;

   Emit("InputSelected(char*,char*)", args);
}

//______________________________________________________________________________
void TGHtml::SubmitClicked(const char *val)
{
   // Emit SubmitClicked() signal.

   Emit("SubmitClicked(char*)", val);
}

//______________________________________________________________________________
Bool_t TGHtml::HandleButton(Event_t *event)
{
   // Handle mouse button event.

   int amount, ch;

   ch = fCanvas->GetHeight();
   amount = fScrollVal.fY * TMath::Max(ch/6, 1);

   int ix = event->fX + fVisible.fX;
   int iy = event->fY + fVisible.fY;
   TGHtmlInput *pr = GetInputElement(ix, iy);
   if (pr) {
      HandleHtmlInput(pr, event);
   }
   if ((event->fType == kButtonPress) && (event->fCode == kButton1)) {
      int x = event->fX + fVisible.fX;
      int y = event->fY + fVisible.fY;
      const char *uri = GetHref(x, y);

#if 0  // insertion cursor test
      char ix[20];
      sprintf(ix, "begin");
      SetInsert(ix);
#endif

      if (uri) {
         uri = ResolveUri(uri);
         if (uri) {
            MouseDown(uri);
            //!!delete[] uri;
         }
      }
   } else if (event->fCode == kButton4) {
      ScrollToPosition(TGLongPosition(fVisible.fX, fVisible.fY / fScrollVal.fY - amount));
   } else if (event->fCode == kButton5) {
      ScrollToPosition(TGLongPosition(fVisible.fX, fVisible.fY / fScrollVal.fY + amount));
   } else {
      return TGView::HandleButton(event);
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGHtml::HandleMotion(Event_t *event)
{
   // handle mouse motion events

   int x = event->fX + fVisible.fX;
   int y = event->fY + fVisible.fY;
   const char *uri = GetHref(x, y);

   if (uri) {
      gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kHand));
   } else {
      gVirtualX->SetCursor(fId, gVirtualX->CreateCursor(kPointer));
   }

   if (uri != fLastUri) {
      fLastUri = uri;
      if (uri) uri = ResolveUri(uri);
      MouseOver(uri);
      //!!if (uri) delete [] uri;
   }

   return kTRUE;
}

//______________________________________________________________________________
TGFont *TGHtml::GetFont(int iFont)
{
   // The rendering and layout routines should call this routine in order to
   // get a font structure. The iFont parameter specifies which of the N_FONT
   // fonts should be obtained. The font is allocated if necessary.

   TGFont *toFree = 0;

   if (iFont < 0) iFont = 0;
   if (iFont >= N_FONT) { iFont = N_FONT - 1; CANT_HAPPEN; }

   // If the font has previously been allocated, but the "fontValid" bitmap
   // shows it is no longer valid, then mark it for freeing later. We use
   // a policy of allocate-before-free because xclass' font cache operates
   // much more efficiently that way.

   if (!FontIsValid(iFont) && fAFont[iFont] != 0) {
      toFree = fAFont[iFont];
      fAFont[iFont] = 0;
   }

   // If we need to allocate a font, first construct the font name then
   // allocate it.

   if (fAFont[iFont] == 0) {
      char name[200];         // Name of the font
      const char *familyStr = "";
      int iFamily;
      int iSize;
      int size;

      iFamily = FontFamily(iFont) >> 3;
      iSize = FontSize(iFont) + 1;

      switch (iFamily) {
//#define TIMES
#ifdef TIMES
         case 0:  familyStr = "times -%d";                 break;
         case 1:  familyStr = "times -%d bold";            break;
         case 2:  familyStr = "times -%d italic";          break;
         case 3:  familyStr = "times -%d bold italic";     break;
         case 4:  familyStr = "courier -%d";               break;
         case 5:  familyStr = "courier -%d bold";          break;
         case 6:  familyStr = "courier -%d italic";        break;
         case 7:  familyStr = "courier -%d bold italic";   break;
         default: familyStr = "times -16";                 CANT_HAPPEN;
#else
         case 0:  familyStr = "helvetica -%d";             break;
         case 1:  familyStr = "helvetica -%d bold";        break;
         case 2:  familyStr = "helvetica -%d italic";      break;
         case 3:  familyStr = "helvetica -%d bold italic"; break;
         case 4:  familyStr = "courier -%d";               break;
         case 5:  familyStr = "courier -%d bold";          break;
         case 6:  familyStr = "courier -%d italic";        break;
         case 7:  familyStr = "courier -%d bold italic";   break;
         default: familyStr = "helvetica -14";             CANT_HAPPEN;
#endif
      }
#if 0
      switch (iSize) {
         case 1:  size = 6+finc/*8*/;   break;
         case 2:  size = 10+finc/*10*/;  break;
         case 3:  size = 12+finc/*12*/;  break;
         case 4:  size = 14+finc/*14*/;  break;
         case 5:  size = 20+finc/*16*/;  break;
         case 6:  size = 24+finc/*18*/;  break;
         case 7:  size = 30+finc/*24*/;  break;
         default: size = 14+finc/*14*/;  CANT_HAPPEN;
      }
#else
      switch (iSize) {
         case 1:  size = 8;   break;
         case 2:  size = 10;  break;
         case 3:  size = 12;  break;
         case 4:  size = 14;  break;
         case 5:  size = 16;  break;
         case 6:  size = 18;  break;
         case 7:  size = 24;  break;
         default: size = 14;  CANT_HAPPEN;
      }
#endif
#ifdef TIMES
      if (iFamily < 4) size += 2;
#endif

      sprintf(name, familyStr, size);

      // Get the named font
      fAFont[iFont] = fClient->GetFont(name);\

      if (fAFont[iFont] == 0) {
         fprintf(stderr, "TGHtml: could not get font \"%s\", trying fixed\n",
                      name);
         fAFont[iFont] = fClient->GetFont("fixed");
      }
      if (fAFont[iFont]==0 ){
         fprintf(stderr, "TGHtml: could not get font \"fixed\", trying "
                      "\"helvetica -12\"\n");
         fAFont[iFont] = fClient->GetFont("helvetica -12");
      }
      FontSetValid(iFont);
   }

   // Free the expired font, if any.

   if (toFree) fClient->FreeFont(toFree);

   return fAFont[iFont];
}

//______________________________________________________________________________
int TGHtml::InArea(TGHtmlMapArea *p, int left, int top, int x, int y)
{
   // Only support rect and circles for now

   int *ip = p->fCoords;
   if (!ip) return 0;

   if (p->fMType == HTML_MAP_RECT) {
      return ((left + ip[0]) <= x && (left + ip[2]) >= x &&
              (top  + ip[1]) <= y && (top  + ip[3]) >= y);
   } else if (p->fMType == HTML_MAP_CIRCLE) {
      int dx = left + ip[0] - x;
      int dy = top + ip[1] - y;
      return (dx * dx + dy * dy <= ip[2] * ip[2]);
   }
   return 0;
}

//______________________________________________________________________________
TGHtmlElement *TGHtml::GetMap(const char *name)
{
   // Returns html map element.

   TGHtmlElement *p = fPFirst;
   const char *z, *zb;

   while (p) {
      if (p->fType == Html_MAP) {
         z = p->MarkupArg("name", 0);
         zb = p->MarkupArg("shape", 0);
         if (zb && *zb != 'r') return 0;
         if (z && !strcmp(z, name)) return p;
      }
      p = p->fPNext;
   }
   return 0;
}

//______________________________________________________________________________
float TGHtml::ColorDistance(ColorStruct_t *pA, ColorStruct_t *pB)
{
   // Compute the squared distance between two colors

   float x, y, z;

   x = 0.30 * (pA->fRed - pB->fRed);
   y = 0.61 * (pA->fGreen - pB->fGreen);
   z = 0.11 * (pA->fBlue - pB->fBlue);

   return x*x + y*y + z*z;
}

//______________________________________________________________________________
int TGHtml::GetColorByName(const char *zColor)
{
   // This routine returns an index between 0 and N_COLOR-1 which indicates
   // which ColorStruct_t structure in the fApColor[] array should be used to describe
   // the color specified by the given name.

   ColorStruct_t *pNew;
   int iColor;
   const char *name;  // unique!
   int i, n;
   char zAltColor[16];

   // Netscape accepts color names that are just HEX values, without
   // the # up front.  This isn't valid HTML, but we support it for
   // compatibility.

   n = strlen(zColor);
   if (n == 6 || n == 3 || n == 9 || n == 12) {
      for (i = 0; i < n; i++) {
         if (!isxdigit(zColor[i])) break;
      }
      if (i == n) {
         sprintf(zAltColor, "#%s", zColor);
      } else {
         strcpy(zAltColor, zColor);
      }
      name = GetUid(zAltColor);
   } else {
      name = GetUid(zColor);
   }

   pNew = AllocColor(name);
   if (pNew == 0) {
      return 0;      // Color 0 is always the default
   }

   iColor = GetColorByValue(pNew);
   FreeColor(pNew);

   return iColor;
}


// Macros used in the computation of appropriate shadow colors.

#define MAX_COLOR    65535
#define MAX(A,B)     ((A)<(B)?(B):(A))
#define MIN(A,B)     ((A)<(B)?(A):(B))

//______________________________________________________________________________
int TGHtml::IsDarkColor(ColorStruct_t *p)
{
   // Check to see if the given color is too dark to be easily distinguished
   // from black.

   float x, y, z;

   x = 0.50 * p->fRed;
   y = 1.00 * p->fGreen;
   z = 0.28 * p->fBlue;
   return (x*x + y*y + z*z) < (0.05 * MAX_COLOR * MAX_COLOR);
}

//______________________________________________________________________________
int TGHtml::GetDarkShadowColor(int iBgColor)
{
   // Given that the background color is iBgColor, figure out an
   // appropriate color for the dark part of a 3D shadow.

   if (fIDark[iBgColor] == 0) {
      ColorStruct_t *pRef, val;
      pRef = fApColor[iBgColor];
      if (IsDarkColor(pRef)) {
         int t1, t2;
         t1 = (int) MIN(MAX_COLOR, pRef->fRed * 1.2);
         t2 = (pRef->fRed * 3 + MAX_COLOR) / 4;
         val.fRed = MAX(t1, t2);
         t1 = (int) MIN(MAX_COLOR, pRef->fGreen * 1.2);
         t2 = (pRef->fGreen * 3 + MAX_COLOR) / 4;
         val.fGreen = MAX(t1, t2);
         t1 = (int) MIN(MAX_COLOR, pRef->fBlue * 1.2);
         t2 = (pRef->fBlue * 3 + MAX_COLOR) / 4;
         val.fBlue = MAX(t1, t2);
      } else {
         val.fRed = (unsigned short) (pRef->fRed * 0.6);
         val.fGreen = (unsigned short) (pRef->fGreen * 0.6);
         val.fBlue = (unsigned short) (pRef->fBlue * 0.6);
      }
      fIDark[iBgColor] = GetColorByValue(&val) + 1;
   }

   return fIDark[iBgColor] - 1;
}

//______________________________________________________________________________
int TGHtml::IsLightColor(ColorStruct_t *p)
{
   // Check to see if the given color is too light to be easily distinguished
   // from white.

   return p->fGreen >= 0.85 * MAX_COLOR;
}

//______________________________________________________________________________
int TGHtml::GetLightShadowColor(int iBgColor)
{
   // Given that the background color is iBgColor, figure out an
   // appropriate color for the bright part of the 3D shadow.

   if (fILight[iBgColor] == 0) {
      ColorStruct_t *pRef, val;
      pRef = fApColor[iBgColor];
      if (IsLightColor(pRef)) {
         val.fRed = (unsigned short) (pRef->fRed * 0.9);
         val.fGreen = (unsigned short) (pRef->fGreen * 0.9);
         val.fBlue = (unsigned short) (pRef->fBlue * 0.9);
      } else {
         int t1, t2;
         t1 = (int) MIN(MAX_COLOR, pRef->fGreen * 1.4);
         t2 = (pRef->fGreen + MAX_COLOR) / 2;
         val.fGreen = MAX(t1, t2);
         t1 = (int) MIN(MAX_COLOR, pRef->fRed * 1.4);
         t2 = (pRef->fRed + MAX_COLOR) / 2;
         val.fRed = MAX(t1, t2);
         t1 = (int) MIN(MAX_COLOR, pRef->fBlue * 1.4);
         t2 = (pRef->fBlue + MAX_COLOR) / 2;
         val.fBlue = MAX(t1, t2);
      }
      fILight[iBgColor] = GetColorByValue(&val) + 1;
   }

   return fILight[iBgColor] - 1;
}

//______________________________________________________________________________
int TGHtml::GetColorByValue(ColorStruct_t *pRef)
{
   // Find a color integer for the color whose color components
   // are given by pRef.

   int i;
   float dist;
   float closestDist;
   int closest;
   int r, g, b;
# define COLOR_MASK  0xf800

   // Search for an exact match
   r = pRef->fRed & COLOR_MASK;
   g = pRef->fGreen & COLOR_MASK;
   b = pRef->fBlue & COLOR_MASK;
   for (i = 0; i < N_COLOR; i++) {
      ColorStruct_t *p = fApColor[i];
      if (p &&
         ((p->fRed & COLOR_MASK) == r) &&
         ((p->fGreen & COLOR_MASK) == g) &&
         ((p->fBlue & COLOR_MASK) == b)) {
         fColorUsed |= (1<<i);
         return i;
      }
   }

   // No exact matches. Look for a completely unused slot
   for (i = N_PREDEFINED_COLOR; i < N_COLOR; i++) {
      if (fApColor[i] == 0) {
         fApColor[i] = AllocColorByValue(pRef);
         fColorUsed |= (1<<i);
         return i;
      }
   }

   // No empty slots. Look for a slot that contains a color that
   // isn't currently in use.
   for (i = N_PREDEFINED_COLOR; i < N_COLOR; i++) {
      if (((fColorUsed >> i) & 1) == 0) {
         FreeColor(fApColor[i]);
         fApColor[i] = AllocColorByValue(pRef);
         fColorUsed |= (1<<i);
         return i;
      }
   }

   // Ok, find the existing color that is closest to the color requested
   // and use it.
   closest = 0;
   closestDist = ColorDistance(pRef, fApColor[0]);
   for (i = 1; i < N_COLOR; i++) {
      dist = ColorDistance(pRef, fApColor[i]);
      if (dist < closestDist) {
         closestDist = dist;
         closest = i;
      }
   }

   return closest;
}

//______________________________________________________________________________
const char *TGHtml::GetHref(int x, int y, const char **target)
{
   // This routine searchs for a hyperlink beneath the coordinates x,y
   // and returns a pointer to the HREF for that hyperlink. The text
   // is held in one of the markup argv[] fields of the <a> markup.

   TGHtmlBlock *pBlock;
   TGHtmlElement *pElem;

   for (pBlock = fFirstBlock; pBlock; pBlock = pBlock->fBNext) {
      if (pBlock->fTop > y || pBlock->fBottom < y ||
          pBlock->fLeft > x || pBlock->fRight < x) continue;
      pElem = pBlock->fPNext;
      if (pElem->fType == Html_IMG) {
         TGHtmlImageMarkup *image = (TGHtmlImageMarkup *) pElem;
         if (image->fPMap) {
            pElem = image->fPMap->fPNext;
            while (pElem && pElem->fType != Html_EndMAP) {
               if (pElem->fType == Html_AREA) {
                  if (InArea((TGHtmlMapArea *) pElem, pBlock->fLeft, pBlock->fTop, x, y)) {
                     if (target) *target = pElem->MarkupArg("target", 0);
                     return pElem->MarkupArg("href", 0);
                  }
               }
               pElem = pElem->fPNext;
            }
            continue;
         }
      }
      if ((pElem->fStyle.fFlags & STY_Anchor) == 0) continue;
      switch (pElem->fType) {
         case Html_Text:
         case Html_Space:
         case Html_IMG:
            while (pElem && pElem->fType != Html_A) pElem = pElem->fPPrev;
            if (pElem == 0 || pElem->fType != Html_A) break;
            if (target) *target = pElem->MarkupArg("target", 0);
            return pElem->MarkupArg("href", 0);

            default:
               break;
      }
   }

   return 0;
}

//______________________________________________________________________________
int TGHtml::ElementCoords(TGHtmlElement *p, int /*i*/, int pct, int *coords)
{
   // Return coordinates of item

   TGHtmlBlock *pBlock;

   while (p && p->fType != Html_Block) p = p->fPPrev;
   if (!p) return 1;

   pBlock = (TGHtmlBlock *) p;
   if (pct) {
      TGHtmlElement *pEnd = fPLast;
      TGHtmlBlock *pb2;
      while (pEnd && pEnd->fType != Html_Block) pEnd = pEnd->fPPrev;
      pb2 = (TGHtmlBlock *) pEnd;
#define HGCo(dir) pb2->dir ? pBlock->dir * 100 / pb2->dir : 0
      coords[0] = HGCo(fLeft);
      coords[1] = HGCo(fTop);
      coords[3] = HGCo(fRight);
      coords[4] = HGCo(fBottom);
   } else {
      coords[0] = pBlock->fLeft;
      coords[1] = pBlock->fTop;
      coords[2] = pBlock->fRight;
      coords[3] = pBlock->fBottom;
   }
   return 0;
}

//______________________________________________________________________________
TGHtmlElement *TGHtml::AttrElem(const char *name, char *value)
{
   // Returns html element matching attribute name and value.

   TGHtmlElement *p;
   const char *z;

   for (p = fPFirst; p; p = p->fPNext) {
      if (p->fType != Html_A) continue;
      z = p->MarkupArg(name, 0);
      if (z && (strcmp(z, value) == 0)) return p;
   }
   return 0;
}

//______________________________________________________________________________
void TGHtml::UpdateSelection(int forceUpdate)
{
   // Given the selection end-points in fSelBegin and fSelEnd, recompute
   // pSelBeginBlock and fPSelEndBlock, then call UpdateSelectionDisplay()
   // to update the display.
   //
   // This routine should be called whenever the selection changes or
   // whenever the set of TGHtmlBlock structures change.

   TGHtmlBlock *pBlock;
   int index;
   int needUpdate = forceUpdate;
   int temp;

   if (fSelEnd.fP == 0) fSelBegin.fP = 0;

   IndexToBlockIndex(fSelBegin, &pBlock, &index);
   if (needUpdate || pBlock != fPSelStartBlock) {
      needUpdate = 1;
      RedrawBlock(fPSelStartBlock);
      fPSelStartBlock = pBlock;
      fSelStartIndex = index;
   } else if (index != fSelStartIndex) {
      RedrawBlock(pBlock);
      fSelStartIndex = index;
   }

   if (fSelBegin.fP == 0) fSelEnd.fP = 0;

   IndexToBlockIndex(fSelEnd, &pBlock, &index);
   if (needUpdate || pBlock != fPSelEndBlock) {
      needUpdate = 1;
      RedrawBlock(fPSelEndBlock);
      fPSelEndBlock = pBlock;
      fSelEndIndex = index;
   } else if (index != fSelEndIndex) {
      RedrawBlock(pBlock);
      fSelEndIndex = index;
   }

   if (fPSelStartBlock && fPSelStartBlock == fPSelEndBlock &&
       fSelStartIndex > fSelEndIndex) {
      temp = fSelStartIndex;
      fSelStartIndex = fSelEndIndex;
      fSelEndIndex = temp;
   }

   if (needUpdate) {
      fFlags |= ANIMATE_IMAGES;
      UpdateSelectionDisplay();
   }
}

//______________________________________________________________________________
void TGHtml::UpdateSelectionDisplay()
{
   // The fPSelStartBlock and fPSelEndBlock values have been changed.
   // This routine's job is to loop over all TGHtmlBlocks and either
   // set or clear the HTML_Selected bits in the .fFlags field
   // as appropriate.  For every TGHtmlBlock where the bit changes,
   // mark that block for redrawing.

   int selected = 0;
   SHtmlIndex_t tempIndex;
   TGHtmlBlock *pTempBlock;
   int temp;
   TGHtmlBlock *p;

   for (p = fFirstBlock; p; p = p->fBNext) {
      if (p == fPSelStartBlock) {
         selected = 1;
         RedrawBlock(p);
      } else if (!selected && p == fPSelEndBlock) {
         selected = 1;
         tempIndex = fSelBegin;
         fSelBegin = fSelEnd;
         fSelEnd = tempIndex;
         pTempBlock = fPSelStartBlock;
         fPSelStartBlock = fPSelEndBlock;
         fPSelEndBlock = pTempBlock;
         temp = fSelStartIndex;
         fSelStartIndex = fSelEndIndex;
         fSelEndIndex = temp;
         RedrawBlock(p);
      }
      if (p->fFlags & HTML_Selected) {
         if (!selected) {
            p->fFlags &= ~HTML_Selected;
            RedrawBlock(p);
         }
      } else {
         if (selected) {
            p->fFlags |= HTML_Selected;
            RedrawBlock(p);
         }
      }
      if (p == fPSelEndBlock) {
         selected = 0;
         RedrawBlock(p);
      }
   }
}

//______________________________________________________________________________
void TGHtml::LostSelection()
{
   // Clear selection.

   if (fExportSelection) {
      // clear selection
      fPSelStartBlock = 0;
      fPSelEndBlock = 0;
      fSelBegin.fP = 0;
      fSelEnd.fP = 0;
      UpdateSelectionDisplay();
   }
}

//______________________________________________________________________________
int TGHtml::SelectionSet(const char *startIx, const char *endIx)
{
   // Set selection.

   SHtmlIndex_t sBegin, sEnd;
   int bi, ei;

   if (GetIndex(startIx, &sBegin.fP, &sBegin.fI)) {
      // malformed start index
      return kFALSE;
   }

   if (GetIndex(endIx, &sEnd.fP, &sEnd.fI)) {
      // malformed end index
      return kFALSE;
   }

   bi = TokenNumber(sBegin.fP);
   ei = TokenNumber(sEnd.fP);

   if (!(sBegin.fP && sEnd.fP)) return kTRUE;

   if (bi < ei || (bi == ei && sBegin.fI <= sEnd.fI)) {
      fSelBegin = sBegin;
      fSelEnd = sEnd;
   } else {
      fSelBegin = sEnd;
      fSelEnd = sBegin;
   }

   UpdateSelection(0);
   if (fExportSelection) {
      // TODO:
      // get selection ownership ... fId, XA_PRIMARY
      // selection lost handler must directly call LostSelection()
   }

   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::UpdateInsert()
{
   // Recompute the position of the insertion cursor based on the
   // position in fIns.

   IndexToBlockIndex(fIns, &fPInsBlock, &fInsIndex);
   RedrawBlock(fPInsBlock);
   if (fInsTimer == 0) {
      fInsStatus = 0;
      FlashCursor();
   }
}

//______________________________________________________________________________
int TGHtml::SetInsert(const char *insIx)
{
   // Set the position of the insertion cursor.

   SHtmlIndex_t i;

   if (!insIx) {
      RedrawBlock(fPInsBlock);
      fInsStatus = 0;
      fPInsBlock = 0;
      fIns.fP = 0;
   } else {
      if (GetIndex(insIx, &i.fP, &i.fI)) {
         // malformed index
         return kFALSE;
      }
      RedrawBlock(fPInsBlock);
      fIns = i;
      UpdateInsert();
   }

   return kTRUE;
}

//______________________________________________________________________________
void TGHtml::SavePrimitive(ostream &out, Option_t * /*= ""*/)
{
   // Save a html widget as a C++ statement(s) on output stream out.

   out << "   TGHtml *";
   out << GetName() << " = new TGHtml(" << fParent->GetName()
       << "," << GetWidth() << "," << GetHeight()
       << ");"<< endl;

   if (fCanvas->GetBackground() != TGFrame::GetWhitePixel()) {
      out << "   " << GetName() << "->ChangeBackground(" << fCanvas->GetBackground() << ");" << endl;
   }

   char fn[kMAXPATHLEN];
   TGText txt(GetText());
   sprintf(fn,"Html%s.htm",GetName()+5);
   txt.Save(fn);
   out << "   " << "FILE *f = fopen(\"" << fn << "\", \"r\");" << endl;
   out << "   " << "if (f) {" << endl;
   out << "      " << GetName() << "->Clear();" << endl;
   out << "      " << GetName() << "->Layout();" << endl;
   out << "      " << GetName() << "->SetBaseUri(\"\");" << endl;
   out << "      " << "char *buf = (char *)calloc(4096, sizeof(char));" << endl;
   out << "      " << "while (fgets(buf, 4096, f)) {" << endl;
   out << "         " << GetName() << "->ParseText(buf);" << endl;
   out << "      " << "}" << endl;
   out << "      " << "free(buf);" << endl;
   out << "      " << "fclose(f);" << endl;
   out << "   " << "}" << endl;
   out << "   " << GetName() << "->Layout();" << endl;
}
 TGHtml.cxx:1
 TGHtml.cxx:2
 TGHtml.cxx:3
 TGHtml.cxx:4
 TGHtml.cxx:5
 TGHtml.cxx:6
 TGHtml.cxx:7
 TGHtml.cxx:8
 TGHtml.cxx:9
 TGHtml.cxx:10
 TGHtml.cxx:11
 TGHtml.cxx:12
 TGHtml.cxx:13
 TGHtml.cxx:14
 TGHtml.cxx:15
 TGHtml.cxx:16
 TGHtml.cxx:17
 TGHtml.cxx:18
 TGHtml.cxx:19
 TGHtml.cxx:20
 TGHtml.cxx:21
 TGHtml.cxx:22
 TGHtml.cxx:23
 TGHtml.cxx:24
 TGHtml.cxx:25
 TGHtml.cxx:26
 TGHtml.cxx:27
 TGHtml.cxx:28
 TGHtml.cxx:29
 TGHtml.cxx:30
 TGHtml.cxx:31
 TGHtml.cxx:32
 TGHtml.cxx:33
 TGHtml.cxx:34
 TGHtml.cxx:35
 TGHtml.cxx:36
 TGHtml.cxx:37
 TGHtml.cxx:38
 TGHtml.cxx:39
 TGHtml.cxx:40
 TGHtml.cxx:41
 TGHtml.cxx:42
 TGHtml.cxx:43
 TGHtml.cxx:44
 TGHtml.cxx:45
 TGHtml.cxx:46
 TGHtml.cxx:47
 TGHtml.cxx:48
 TGHtml.cxx:49
 TGHtml.cxx:50
 TGHtml.cxx:51
 TGHtml.cxx:52
 TGHtml.cxx:53
 TGHtml.cxx:54
 TGHtml.cxx:55
 TGHtml.cxx:56
 TGHtml.cxx:57
 TGHtml.cxx:58
 TGHtml.cxx:59
 TGHtml.cxx:60
 TGHtml.cxx:61
 TGHtml.cxx:62
 TGHtml.cxx:63
 TGHtml.cxx:64
 TGHtml.cxx:65
 TGHtml.cxx:66
 TGHtml.cxx:67
 TGHtml.cxx:68
 TGHtml.cxx:69
 TGHtml.cxx:70
 TGHtml.cxx:71
 TGHtml.cxx:72
 TGHtml.cxx:73
 TGHtml.cxx:74
 TGHtml.cxx:75
 TGHtml.cxx:76
 TGHtml.cxx:77
 TGHtml.cxx:78
 TGHtml.cxx:79
 TGHtml.cxx:80
 TGHtml.cxx:81
 TGHtml.cxx:82
 TGHtml.cxx:83
 TGHtml.cxx:84
 TGHtml.cxx:85
 TGHtml.cxx:86
 TGHtml.cxx:87
 TGHtml.cxx:88
 TGHtml.cxx:89
 TGHtml.cxx:90
 TGHtml.cxx:91
 TGHtml.cxx:92
 TGHtml.cxx:93
 TGHtml.cxx:94
 TGHtml.cxx:95
 TGHtml.cxx:96
 TGHtml.cxx:97
 TGHtml.cxx:98
 TGHtml.cxx:99
 TGHtml.cxx:100
 TGHtml.cxx:101
 TGHtml.cxx:102
 TGHtml.cxx:103
 TGHtml.cxx:104
 TGHtml.cxx:105
 TGHtml.cxx:106
 TGHtml.cxx:107
 TGHtml.cxx:108
 TGHtml.cxx:109
 TGHtml.cxx:110
 TGHtml.cxx:111
 TGHtml.cxx:112
 TGHtml.cxx:113
 TGHtml.cxx:114
 TGHtml.cxx:115
 TGHtml.cxx:116
 TGHtml.cxx:117
 TGHtml.cxx:118
 TGHtml.cxx:119
 TGHtml.cxx:120
 TGHtml.cxx:121
 TGHtml.cxx:122
 TGHtml.cxx:123
 TGHtml.cxx:124
 TGHtml.cxx:125
 TGHtml.cxx:126
 TGHtml.cxx:127
 TGHtml.cxx:128
 TGHtml.cxx:129
 TGHtml.cxx:130
 TGHtml.cxx:131
 TGHtml.cxx:132
 TGHtml.cxx:133
 TGHtml.cxx:134
 TGHtml.cxx:135
 TGHtml.cxx:136
 TGHtml.cxx:137
 TGHtml.cxx:138
 TGHtml.cxx:139
 TGHtml.cxx:140
 TGHtml.cxx:141
 TGHtml.cxx:142
 TGHtml.cxx:143
 TGHtml.cxx:144
 TGHtml.cxx:145
 TGHtml.cxx:146
 TGHtml.cxx:147
 TGHtml.cxx:148
 TGHtml.cxx:149
 TGHtml.cxx:150
 TGHtml.cxx:151
 TGHtml.cxx:152
 TGHtml.cxx:153
 TGHtml.cxx:154
 TGHtml.cxx:155
 TGHtml.cxx:156
 TGHtml.cxx:157
 TGHtml.cxx:158
 TGHtml.cxx:159
 TGHtml.cxx:160
 TGHtml.cxx:161
 TGHtml.cxx:162
 TGHtml.cxx:163
 TGHtml.cxx:164
 TGHtml.cxx:165
 TGHtml.cxx:166
 TGHtml.cxx:167
 TGHtml.cxx:168
 TGHtml.cxx:169
 TGHtml.cxx:170
 TGHtml.cxx:171
 TGHtml.cxx:172
 TGHtml.cxx:173
 TGHtml.cxx:174
 TGHtml.cxx:175
 TGHtml.cxx:176
 TGHtml.cxx:177
 TGHtml.cxx:178
 TGHtml.cxx:179
 TGHtml.cxx:180
 TGHtml.cxx:181
 TGHtml.cxx:182
 TGHtml.cxx:183
 TGHtml.cxx:184
 TGHtml.cxx:185
 TGHtml.cxx:186
 TGHtml.cxx:187
 TGHtml.cxx:188
 TGHtml.cxx:189
 TGHtml.cxx:190
 TGHtml.cxx:191
 TGHtml.cxx:192
 TGHtml.cxx:193
 TGHtml.cxx:194
 TGHtml.cxx:195
 TGHtml.cxx:196
 TGHtml.cxx:197
 TGHtml.cxx:198
 TGHtml.cxx:199
 TGHtml.cxx:200
 TGHtml.cxx:201
 TGHtml.cxx:202
 TGHtml.cxx:203
 TGHtml.cxx:204
 TGHtml.cxx:205
 TGHtml.cxx:206
 TGHtml.cxx:207
 TGHtml.cxx:208
 TGHtml.cxx:209
 TGHtml.cxx:210
 TGHtml.cxx:211
 TGHtml.cxx:212
 TGHtml.cxx:213
 TGHtml.cxx:214
 TGHtml.cxx:215
 TGHtml.cxx:216
 TGHtml.cxx:217
 TGHtml.cxx:218
 TGHtml.cxx:219
 TGHtml.cxx:220
 TGHtml.cxx:221
 TGHtml.cxx:222
 TGHtml.cxx:223
 TGHtml.cxx:224
 TGHtml.cxx:225
 TGHtml.cxx:226
 TGHtml.cxx:227
 TGHtml.cxx:228
 TGHtml.cxx:229
 TGHtml.cxx:230
 TGHtml.cxx:231
 TGHtml.cxx:232
 TGHtml.cxx:233
 TGHtml.cxx:234
 TGHtml.cxx:235
 TGHtml.cxx:236
 TGHtml.cxx:237
 TGHtml.cxx:238
 TGHtml.cxx:239
 TGHtml.cxx:240
 TGHtml.cxx:241
 TGHtml.cxx:242
 TGHtml.cxx:243
 TGHtml.cxx:244
 TGHtml.cxx:245
 TGHtml.cxx:246
 TGHtml.cxx:247
 TGHtml.cxx:248
 TGHtml.cxx:249
 TGHtml.cxx:250
 TGHtml.cxx:251
 TGHtml.cxx:252
 TGHtml.cxx:253
 TGHtml.cxx:254
 TGHtml.cxx:255
 TGHtml.cxx:256
 TGHtml.cxx:257
 TGHtml.cxx:258
 TGHtml.cxx:259
 TGHtml.cxx:260
 TGHtml.cxx:261
 TGHtml.cxx:262
 TGHtml.cxx:263
 TGHtml.cxx:264
 TGHtml.cxx:265
 TGHtml.cxx:266
 TGHtml.cxx:267
 TGHtml.cxx:268
 TGHtml.cxx:269
 TGHtml.cxx:270
 TGHtml.cxx:271
 TGHtml.cxx:272
 TGHtml.cxx:273
 TGHtml.cxx:274
 TGHtml.cxx:275
 TGHtml.cxx:276
 TGHtml.cxx:277
 TGHtml.cxx:278
 TGHtml.cxx:279
 TGHtml.cxx:280
 TGHtml.cxx:281
 TGHtml.cxx:282
 TGHtml.cxx:283
 TGHtml.cxx:284
 TGHtml.cxx:285
 TGHtml.cxx:286
 TGHtml.cxx:287
 TGHtml.cxx:288
 TGHtml.cxx:289
 TGHtml.cxx:290
 TGHtml.cxx:291
 TGHtml.cxx:292
 TGHtml.cxx:293
 TGHtml.cxx:294
 TGHtml.cxx:295
 TGHtml.cxx:296
 TGHtml.cxx:297
 TGHtml.cxx:298
 TGHtml.cxx:299
 TGHtml.cxx:300
 TGHtml.cxx:301
 TGHtml.cxx:302
 TGHtml.cxx:303
 TGHtml.cxx:304
 TGHtml.cxx:305
 TGHtml.cxx:306
 TGHtml.cxx:307
 TGHtml.cxx:308
 TGHtml.cxx:309
 TGHtml.cxx:310
 TGHtml.cxx:311
 TGHtml.cxx:312
 TGHtml.cxx:313
 TGHtml.cxx:314
 TGHtml.cxx:315
 TGHtml.cxx:316
 TGHtml.cxx:317
 TGHtml.cxx:318
 TGHtml.cxx:319
 TGHtml.cxx:320
 TGHtml.cxx:321
 TGHtml.cxx:322
 TGHtml.cxx:323
 TGHtml.cxx:324
 TGHtml.cxx:325
 TGHtml.cxx:326
 TGHtml.cxx:327
 TGHtml.cxx:328
 TGHtml.cxx:329
 TGHtml.cxx:330
 TGHtml.cxx:331
 TGHtml.cxx:332
 TGHtml.cxx:333
 TGHtml.cxx:334
 TGHtml.cxx:335
 TGHtml.cxx:336
 TGHtml.cxx:337
 TGHtml.cxx:338
 TGHtml.cxx:339
 TGHtml.cxx:340
 TGHtml.cxx:341
 TGHtml.cxx:342
 TGHtml.cxx:343
 TGHtml.cxx:344
 TGHtml.cxx:345
 TGHtml.cxx:346
 TGHtml.cxx:347
 TGHtml.cxx:348
 TGHtml.cxx:349
 TGHtml.cxx:350
 TGHtml.cxx:351
 TGHtml.cxx:352
 TGHtml.cxx:353
 TGHtml.cxx:354
 TGHtml.cxx:355
 TGHtml.cxx:356
 TGHtml.cxx:357
 TGHtml.cxx:358
 TGHtml.cxx:359
 TGHtml.cxx:360
 TGHtml.cxx:361
 TGHtml.cxx:362
 TGHtml.cxx:363
 TGHtml.cxx:364
 TGHtml.cxx:365
 TGHtml.cxx:366
 TGHtml.cxx:367
 TGHtml.cxx:368
 TGHtml.cxx:369
 TGHtml.cxx:370
 TGHtml.cxx:371
 TGHtml.cxx:372
 TGHtml.cxx:373
 TGHtml.cxx:374
 TGHtml.cxx:375
 TGHtml.cxx:376
 TGHtml.cxx:377
 TGHtml.cxx:378
 TGHtml.cxx:379
 TGHtml.cxx:380
 TGHtml.cxx:381
 TGHtml.cxx:382
 TGHtml.cxx:383
 TGHtml.cxx:384
 TGHtml.cxx:385
 TGHtml.cxx:386
 TGHtml.cxx:387
 TGHtml.cxx:388
 TGHtml.cxx:389
 TGHtml.cxx:390
 TGHtml.cxx:391
 TGHtml.cxx:392
 TGHtml.cxx:393
 TGHtml.cxx:394
 TGHtml.cxx:395
 TGHtml.cxx:396
 TGHtml.cxx:397
 TGHtml.cxx:398
 TGHtml.cxx:399
 TGHtml.cxx:400
 TGHtml.cxx:401
 TGHtml.cxx:402
 TGHtml.cxx:403
 TGHtml.cxx:404
 TGHtml.cxx:405
 TGHtml.cxx:406
 TGHtml.cxx:407
 TGHtml.cxx:408
 TGHtml.cxx:409
 TGHtml.cxx:410
 TGHtml.cxx:411
 TGHtml.cxx:412
 TGHtml.cxx:413
 TGHtml.cxx:414
 TGHtml.cxx:415
 TGHtml.cxx:416
 TGHtml.cxx:417
 TGHtml.cxx:418
 TGHtml.cxx:419
 TGHtml.cxx:420
 TGHtml.cxx:421
 TGHtml.cxx:422
 TGHtml.cxx:423
 TGHtml.cxx:424
 TGHtml.cxx:425
 TGHtml.cxx:426
 TGHtml.cxx:427
 TGHtml.cxx:428
 TGHtml.cxx:429
 TGHtml.cxx:430
 TGHtml.cxx:431
 TGHtml.cxx:432
 TGHtml.cxx:433
 TGHtml.cxx:434
 TGHtml.cxx:435
 TGHtml.cxx:436
 TGHtml.cxx:437
 TGHtml.cxx:438
 TGHtml.cxx:439
 TGHtml.cxx:440
 TGHtml.cxx:441
 TGHtml.cxx:442
 TGHtml.cxx:443
 TGHtml.cxx:444
 TGHtml.cxx:445
 TGHtml.cxx:446
 TGHtml.cxx:447
 TGHtml.cxx:448
 TGHtml.cxx:449
 TGHtml.cxx:450
 TGHtml.cxx:451
 TGHtml.cxx:452
 TGHtml.cxx:453
 TGHtml.cxx:454
 TGHtml.cxx:455
 TGHtml.cxx:456
 TGHtml.cxx:457
 TGHtml.cxx:458
 TGHtml.cxx:459
 TGHtml.cxx:460
 TGHtml.cxx:461
 TGHtml.cxx:462
 TGHtml.cxx:463
 TGHtml.cxx:464
 TGHtml.cxx:465
 TGHtml.cxx:466
 TGHtml.cxx:467
 TGHtml.cxx:468
 TGHtml.cxx:469
 TGHtml.cxx:470
 TGHtml.cxx:471
 TGHtml.cxx:472
 TGHtml.cxx:473
 TGHtml.cxx:474
 TGHtml.cxx:475
 TGHtml.cxx:476
 TGHtml.cxx:477
 TGHtml.cxx:478
 TGHtml.cxx:479
 TGHtml.cxx:480
 TGHtml.cxx:481
 TGHtml.cxx:482
 TGHtml.cxx:483
 TGHtml.cxx:484
 TGHtml.cxx:485
 TGHtml.cxx:486
 TGHtml.cxx:487
 TGHtml.cxx:488
 TGHtml.cxx:489
 TGHtml.cxx:490
 TGHtml.cxx:491
 TGHtml.cxx:492
 TGHtml.cxx:493
 TGHtml.cxx:494
 TGHtml.cxx:495
 TGHtml.cxx:496
 TGHtml.cxx:497
 TGHtml.cxx:498
 TGHtml.cxx:499
 TGHtml.cxx:500
 TGHtml.cxx:501
 TGHtml.cxx:502
 TGHtml.cxx:503
 TGHtml.cxx:504
 TGHtml.cxx:505
 TGHtml.cxx:506
 TGHtml.cxx:507
 TGHtml.cxx:508
 TGHtml.cxx:509
 TGHtml.cxx:510
 TGHtml.cxx:511
 TGHtml.cxx:512
 TGHtml.cxx:513
 TGHtml.cxx:514
 TGHtml.cxx:515
 TGHtml.cxx:516
 TGHtml.cxx:517
 TGHtml.cxx:518
 TGHtml.cxx:519
 TGHtml.cxx:520
 TGHtml.cxx:521
 TGHtml.cxx:522
 TGHtml.cxx:523
 TGHtml.cxx:524
 TGHtml.cxx:525
 TGHtml.cxx:526
 TGHtml.cxx:527
 TGHtml.cxx:528
 TGHtml.cxx:529
 TGHtml.cxx:530
 TGHtml.cxx:531
 TGHtml.cxx:532
 TGHtml.cxx:533
 TGHtml.cxx:534
 TGHtml.cxx:535
 TGHtml.cxx:536
 TGHtml.cxx:537
 TGHtml.cxx:538
 TGHtml.cxx:539
 TGHtml.cxx:540
 TGHtml.cxx:541
 TGHtml.cxx:542
 TGHtml.cxx:543
 TGHtml.cxx:544
 TGHtml.cxx:545
 TGHtml.cxx:546
 TGHtml.cxx:547
 TGHtml.cxx:548
 TGHtml.cxx:549
 TGHtml.cxx:550
 TGHtml.cxx:551
 TGHtml.cxx:552
 TGHtml.cxx:553
 TGHtml.cxx:554
 TGHtml.cxx:555
 TGHtml.cxx:556
 TGHtml.cxx:557
 TGHtml.cxx:558
 TGHtml.cxx:559
 TGHtml.cxx:560
 TGHtml.cxx:561
 TGHtml.cxx:562
 TGHtml.cxx:563
 TGHtml.cxx:564
 TGHtml.cxx:565
 TGHtml.cxx:566
 TGHtml.cxx:567
 TGHtml.cxx:568
 TGHtml.cxx:569
 TGHtml.cxx:570
 TGHtml.cxx:571
 TGHtml.cxx:572
 TGHtml.cxx:573
 TGHtml.cxx:574
 TGHtml.cxx:575
 TGHtml.cxx:576
 TGHtml.cxx:577
 TGHtml.cxx:578
 TGHtml.cxx:579
 TGHtml.cxx:580
 TGHtml.cxx:581
 TGHtml.cxx:582
 TGHtml.cxx:583
 TGHtml.cxx:584
 TGHtml.cxx:585
 TGHtml.cxx:586
 TGHtml.cxx:587
 TGHtml.cxx:588
 TGHtml.cxx:589
 TGHtml.cxx:590
 TGHtml.cxx:591
 TGHtml.cxx:592
 TGHtml.cxx:593
 TGHtml.cxx:594
 TGHtml.cxx:595
 TGHtml.cxx:596
 TGHtml.cxx:597
 TGHtml.cxx:598
 TGHtml.cxx:599
 TGHtml.cxx:600
 TGHtml.cxx:601
 TGHtml.cxx:602
 TGHtml.cxx:603
 TGHtml.cxx:604
 TGHtml.cxx:605
 TGHtml.cxx:606
 TGHtml.cxx:607
 TGHtml.cxx:608
 TGHtml.cxx:609
 TGHtml.cxx:610
 TGHtml.cxx:611
 TGHtml.cxx:612
 TGHtml.cxx:613
 TGHtml.cxx:614
 TGHtml.cxx:615
 TGHtml.cxx:616
 TGHtml.cxx:617
 TGHtml.cxx:618
 TGHtml.cxx:619
 TGHtml.cxx:620
 TGHtml.cxx:621
 TGHtml.cxx:622
 TGHtml.cxx:623
 TGHtml.cxx:624
 TGHtml.cxx:625
 TGHtml.cxx:626
 TGHtml.cxx:627
 TGHtml.cxx:628
 TGHtml.cxx:629
 TGHtml.cxx:630
 TGHtml.cxx:631
 TGHtml.cxx:632
 TGHtml.cxx:633
 TGHtml.cxx:634
 TGHtml.cxx:635
 TGHtml.cxx:636
 TGHtml.cxx:637
 TGHtml.cxx:638
 TGHtml.cxx:639
 TGHtml.cxx:640
 TGHtml.cxx:641
 TGHtml.cxx:642
 TGHtml.cxx:643
 TGHtml.cxx:644
 TGHtml.cxx:645
 TGHtml.cxx:646
 TGHtml.cxx:647
 TGHtml.cxx:648
 TGHtml.cxx:649
 TGHtml.cxx:650
 TGHtml.cxx:651
 TGHtml.cxx:652
 TGHtml.cxx:653
 TGHtml.cxx:654
 TGHtml.cxx:655
 TGHtml.cxx:656
 TGHtml.cxx:657
 TGHtml.cxx:658
 TGHtml.cxx:659
 TGHtml.cxx:660
 TGHtml.cxx:661
 TGHtml.cxx:662
 TGHtml.cxx:663
 TGHtml.cxx:664
 TGHtml.cxx:665
 TGHtml.cxx:666
 TGHtml.cxx:667
 TGHtml.cxx:668
 TGHtml.cxx:669
 TGHtml.cxx:670
 TGHtml.cxx:671
 TGHtml.cxx:672
 TGHtml.cxx:673
 TGHtml.cxx:674
 TGHtml.cxx:675
 TGHtml.cxx:676
 TGHtml.cxx:677
 TGHtml.cxx:678
 TGHtml.cxx:679
 TGHtml.cxx:680
 TGHtml.cxx:681
 TGHtml.cxx:682
 TGHtml.cxx:683
 TGHtml.cxx:684
 TGHtml.cxx:685
 TGHtml.cxx:686
 TGHtml.cxx:687
 TGHtml.cxx:688
 TGHtml.cxx:689
 TGHtml.cxx:690
 TGHtml.cxx:691
 TGHtml.cxx:692
 TGHtml.cxx:693
 TGHtml.cxx:694
 TGHtml.cxx:695
 TGHtml.cxx:696
 TGHtml.cxx:697
 TGHtml.cxx:698
 TGHtml.cxx:699
 TGHtml.cxx:700
 TGHtml.cxx:701
 TGHtml.cxx:702
 TGHtml.cxx:703
 TGHtml.cxx:704
 TGHtml.cxx:705
 TGHtml.cxx:706
 TGHtml.cxx:707
 TGHtml.cxx:708
 TGHtml.cxx:709
 TGHtml.cxx:710
 TGHtml.cxx:711
 TGHtml.cxx:712
 TGHtml.cxx:713
 TGHtml.cxx:714
 TGHtml.cxx:715
 TGHtml.cxx:716
 TGHtml.cxx:717
 TGHtml.cxx:718
 TGHtml.cxx:719
 TGHtml.cxx:720
 TGHtml.cxx:721
 TGHtml.cxx:722
 TGHtml.cxx:723
 TGHtml.cxx:724
 TGHtml.cxx:725
 TGHtml.cxx:726
 TGHtml.cxx:727
 TGHtml.cxx:728
 TGHtml.cxx:729
 TGHtml.cxx:730
 TGHtml.cxx:731
 TGHtml.cxx:732
 TGHtml.cxx:733
 TGHtml.cxx:734
 TGHtml.cxx:735
 TGHtml.cxx:736
 TGHtml.cxx:737
 TGHtml.cxx:738
 TGHtml.cxx:739
 TGHtml.cxx:740
 TGHtml.cxx:741
 TGHtml.cxx:742
 TGHtml.cxx:743
 TGHtml.cxx:744
 TGHtml.cxx:745
 TGHtml.cxx:746
 TGHtml.cxx:747
 TGHtml.cxx:748
 TGHtml.cxx:749
 TGHtml.cxx:750
 TGHtml.cxx:751
 TGHtml.cxx:752
 TGHtml.cxx:753
 TGHtml.cxx:754
 TGHtml.cxx:755
 TGHtml.cxx:756
 TGHtml.cxx:757
 TGHtml.cxx:758
 TGHtml.cxx:759
 TGHtml.cxx:760
 TGHtml.cxx:761
 TGHtml.cxx:762
 TGHtml.cxx:763
 TGHtml.cxx:764
 TGHtml.cxx:765
 TGHtml.cxx:766
 TGHtml.cxx:767
 TGHtml.cxx:768
 TGHtml.cxx:769
 TGHtml.cxx:770
 TGHtml.cxx:771
 TGHtml.cxx:772
 TGHtml.cxx:773
 TGHtml.cxx:774
 TGHtml.cxx:775
 TGHtml.cxx:776
 TGHtml.cxx:777
 TGHtml.cxx:778
 TGHtml.cxx:779
 TGHtml.cxx:780
 TGHtml.cxx:781
 TGHtml.cxx:782
 TGHtml.cxx:783
 TGHtml.cxx:784
 TGHtml.cxx:785
 TGHtml.cxx:786
 TGHtml.cxx:787
 TGHtml.cxx:788
 TGHtml.cxx:789
 TGHtml.cxx:790
 TGHtml.cxx:791
 TGHtml.cxx:792
 TGHtml.cxx:793
 TGHtml.cxx:794
 TGHtml.cxx:795
 TGHtml.cxx:796
 TGHtml.cxx:797
 TGHtml.cxx:798
 TGHtml.cxx:799
 TGHtml.cxx:800
 TGHtml.cxx:801
 TGHtml.cxx:802
 TGHtml.cxx:803
 TGHtml.cxx:804
 TGHtml.cxx:805
 TGHtml.cxx:806
 TGHtml.cxx:807
 TGHtml.cxx:808
 TGHtml.cxx:809
 TGHtml.cxx:810
 TGHtml.cxx:811
 TGHtml.cxx:812
 TGHtml.cxx:813
 TGHtml.cxx:814
 TGHtml.cxx:815
 TGHtml.cxx:816
 TGHtml.cxx:817
 TGHtml.cxx:818
 TGHtml.cxx:819
 TGHtml.cxx:820
 TGHtml.cxx:821
 TGHtml.cxx:822
 TGHtml.cxx:823
 TGHtml.cxx:824
 TGHtml.cxx:825
 TGHtml.cxx:826
 TGHtml.cxx:827
 TGHtml.cxx:828
 TGHtml.cxx:829
 TGHtml.cxx:830
 TGHtml.cxx:831
 TGHtml.cxx:832
 TGHtml.cxx:833
 TGHtml.cxx:834
 TGHtml.cxx:835
 TGHtml.cxx:836
 TGHtml.cxx:837
 TGHtml.cxx:838
 TGHtml.cxx:839
 TGHtml.cxx:840
 TGHtml.cxx:841
 TGHtml.cxx:842
 TGHtml.cxx:843
 TGHtml.cxx:844
 TGHtml.cxx:845
 TGHtml.cxx:846
 TGHtml.cxx:847
 TGHtml.cxx:848
 TGHtml.cxx:849
 TGHtml.cxx:850
 TGHtml.cxx:851
 TGHtml.cxx:852
 TGHtml.cxx:853
 TGHtml.cxx:854
 TGHtml.cxx:855
 TGHtml.cxx:856
 TGHtml.cxx:857
 TGHtml.cxx:858
 TGHtml.cxx:859
 TGHtml.cxx:860
 TGHtml.cxx:861
 TGHtml.cxx:862
 TGHtml.cxx:863
 TGHtml.cxx:864
 TGHtml.cxx:865
 TGHtml.cxx:866
 TGHtml.cxx:867
 TGHtml.cxx:868
 TGHtml.cxx:869
 TGHtml.cxx:870
 TGHtml.cxx:871
 TGHtml.cxx:872
 TGHtml.cxx:873
 TGHtml.cxx:874
 TGHtml.cxx:875
 TGHtml.cxx:876
 TGHtml.cxx:877
 TGHtml.cxx:878
 TGHtml.cxx:879
 TGHtml.cxx:880
 TGHtml.cxx:881
 TGHtml.cxx:882
 TGHtml.cxx:883
 TGHtml.cxx:884
 TGHtml.cxx:885
 TGHtml.cxx:886
 TGHtml.cxx:887
 TGHtml.cxx:888
 TGHtml.cxx:889
 TGHtml.cxx:890
 TGHtml.cxx:891
 TGHtml.cxx:892
 TGHtml.cxx:893
 TGHtml.cxx:894
 TGHtml.cxx:895
 TGHtml.cxx:896
 TGHtml.cxx:897
 TGHtml.cxx:898
 TGHtml.cxx:899
 TGHtml.cxx:900
 TGHtml.cxx:901
 TGHtml.cxx:902
 TGHtml.cxx:903
 TGHtml.cxx:904
 TGHtml.cxx:905
 TGHtml.cxx:906
 TGHtml.cxx:907
 TGHtml.cxx:908
 TGHtml.cxx:909
 TGHtml.cxx:910
 TGHtml.cxx:911
 TGHtml.cxx:912
 TGHtml.cxx:913
 TGHtml.cxx:914
 TGHtml.cxx:915
 TGHtml.cxx:916
 TGHtml.cxx:917
 TGHtml.cxx:918
 TGHtml.cxx:919
 TGHtml.cxx:920
 TGHtml.cxx:921
 TGHtml.cxx:922
 TGHtml.cxx:923
 TGHtml.cxx:924
 TGHtml.cxx:925
 TGHtml.cxx:926
 TGHtml.cxx:927
 TGHtml.cxx:928
 TGHtml.cxx:929
 TGHtml.cxx:930
 TGHtml.cxx:931
 TGHtml.cxx:932
 TGHtml.cxx:933
 TGHtml.cxx:934
 TGHtml.cxx:935
 TGHtml.cxx:936
 TGHtml.cxx:937
 TGHtml.cxx:938
 TGHtml.cxx:939
 TGHtml.cxx:940
 TGHtml.cxx:941
 TGHtml.cxx:942
 TGHtml.cxx:943
 TGHtml.cxx:944
 TGHtml.cxx:945
 TGHtml.cxx:946
 TGHtml.cxx:947
 TGHtml.cxx:948
 TGHtml.cxx:949
 TGHtml.cxx:950
 TGHtml.cxx:951
 TGHtml.cxx:952
 TGHtml.cxx:953
 TGHtml.cxx:954
 TGHtml.cxx:955
 TGHtml.cxx:956
 TGHtml.cxx:957
 TGHtml.cxx:958
 TGHtml.cxx:959
 TGHtml.cxx:960
 TGHtml.cxx:961
 TGHtml.cxx:962
 TGHtml.cxx:963
 TGHtml.cxx:964
 TGHtml.cxx:965
 TGHtml.cxx:966
 TGHtml.cxx:967
 TGHtml.cxx:968
 TGHtml.cxx:969
 TGHtml.cxx:970
 TGHtml.cxx:971
 TGHtml.cxx:972
 TGHtml.cxx:973
 TGHtml.cxx:974
 TGHtml.cxx:975
 TGHtml.cxx:976
 TGHtml.cxx:977
 TGHtml.cxx:978
 TGHtml.cxx:979
 TGHtml.cxx:980
 TGHtml.cxx:981
 TGHtml.cxx:982
 TGHtml.cxx:983
 TGHtml.cxx:984
 TGHtml.cxx:985
 TGHtml.cxx:986
 TGHtml.cxx:987
 TGHtml.cxx:988
 TGHtml.cxx:989
 TGHtml.cxx:990
 TGHtml.cxx:991
 TGHtml.cxx:992
 TGHtml.cxx:993
 TGHtml.cxx:994
 TGHtml.cxx:995
 TGHtml.cxx:996
 TGHtml.cxx:997
 TGHtml.cxx:998
 TGHtml.cxx:999
 TGHtml.cxx:1000
 TGHtml.cxx:1001
 TGHtml.cxx:1002
 TGHtml.cxx:1003
 TGHtml.cxx:1004
 TGHtml.cxx:1005
 TGHtml.cxx:1006
 TGHtml.cxx:1007
 TGHtml.cxx:1008
 TGHtml.cxx:1009
 TGHtml.cxx:1010
 TGHtml.cxx:1011
 TGHtml.cxx:1012
 TGHtml.cxx:1013
 TGHtml.cxx:1014
 TGHtml.cxx:1015
 TGHtml.cxx:1016
 TGHtml.cxx:1017
 TGHtml.cxx:1018
 TGHtml.cxx:1019
 TGHtml.cxx:1020
 TGHtml.cxx:1021
 TGHtml.cxx:1022
 TGHtml.cxx:1023
 TGHtml.cxx:1024
 TGHtml.cxx:1025
 TGHtml.cxx:1026
 TGHtml.cxx:1027
 TGHtml.cxx:1028
 TGHtml.cxx:1029
 TGHtml.cxx:1030
 TGHtml.cxx:1031
 TGHtml.cxx:1032
 TGHtml.cxx:1033
 TGHtml.cxx:1034
 TGHtml.cxx:1035
 TGHtml.cxx:1036
 TGHtml.cxx:1037
 TGHtml.cxx:1038
 TGHtml.cxx:1039
 TGHtml.cxx:1040
 TGHtml.cxx:1041
 TGHtml.cxx:1042
 TGHtml.cxx:1043
 TGHtml.cxx:1044
 TGHtml.cxx:1045
 TGHtml.cxx:1046
 TGHtml.cxx:1047
 TGHtml.cxx:1048
 TGHtml.cxx:1049
 TGHtml.cxx:1050
 TGHtml.cxx:1051
 TGHtml.cxx:1052
 TGHtml.cxx:1053
 TGHtml.cxx:1054
 TGHtml.cxx:1055
 TGHtml.cxx:1056
 TGHtml.cxx:1057
 TGHtml.cxx:1058
 TGHtml.cxx:1059
 TGHtml.cxx:1060
 TGHtml.cxx:1061
 TGHtml.cxx:1062
 TGHtml.cxx:1063
 TGHtml.cxx:1064
 TGHtml.cxx:1065
 TGHtml.cxx:1066
 TGHtml.cxx:1067
 TGHtml.cxx:1068
 TGHtml.cxx:1069
 TGHtml.cxx:1070
 TGHtml.cxx:1071
 TGHtml.cxx:1072
 TGHtml.cxx:1073
 TGHtml.cxx:1074
 TGHtml.cxx:1075
 TGHtml.cxx:1076
 TGHtml.cxx:1077
 TGHtml.cxx:1078
 TGHtml.cxx:1079
 TGHtml.cxx:1080
 TGHtml.cxx:1081
 TGHtml.cxx:1082
 TGHtml.cxx:1083
 TGHtml.cxx:1084
 TGHtml.cxx:1085
 TGHtml.cxx:1086
 TGHtml.cxx:1087
 TGHtml.cxx:1088
 TGHtml.cxx:1089
 TGHtml.cxx:1090
 TGHtml.cxx:1091
 TGHtml.cxx:1092
 TGHtml.cxx:1093
 TGHtml.cxx:1094
 TGHtml.cxx:1095
 TGHtml.cxx:1096
 TGHtml.cxx:1097
 TGHtml.cxx:1098
 TGHtml.cxx:1099
 TGHtml.cxx:1100
 TGHtml.cxx:1101
 TGHtml.cxx:1102
 TGHtml.cxx:1103
 TGHtml.cxx:1104
 TGHtml.cxx:1105
 TGHtml.cxx:1106
 TGHtml.cxx:1107
 TGHtml.cxx:1108
 TGHtml.cxx:1109
 TGHtml.cxx:1110
 TGHtml.cxx:1111
 TGHtml.cxx:1112
 TGHtml.cxx:1113
 TGHtml.cxx:1114
 TGHtml.cxx:1115
 TGHtml.cxx:1116
 TGHtml.cxx:1117
 TGHtml.cxx:1118
 TGHtml.cxx:1119
 TGHtml.cxx:1120
 TGHtml.cxx:1121
 TGHtml.cxx:1122
 TGHtml.cxx:1123
 TGHtml.cxx:1124
 TGHtml.cxx:1125
 TGHtml.cxx:1126
 TGHtml.cxx:1127
 TGHtml.cxx:1128
 TGHtml.cxx:1129
 TGHtml.cxx:1130
 TGHtml.cxx:1131
 TGHtml.cxx:1132
 TGHtml.cxx:1133
 TGHtml.cxx:1134
 TGHtml.cxx:1135
 TGHtml.cxx:1136
 TGHtml.cxx:1137
 TGHtml.cxx:1138
 TGHtml.cxx:1139
 TGHtml.cxx:1140
 TGHtml.cxx:1141
 TGHtml.cxx:1142
 TGHtml.cxx:1143
 TGHtml.cxx:1144
 TGHtml.cxx:1145
 TGHtml.cxx:1146
 TGHtml.cxx:1147
 TGHtml.cxx:1148
 TGHtml.cxx:1149
 TGHtml.cxx:1150
 TGHtml.cxx:1151
 TGHtml.cxx:1152
 TGHtml.cxx:1153
 TGHtml.cxx:1154
 TGHtml.cxx:1155
 TGHtml.cxx:1156
 TGHtml.cxx:1157
 TGHtml.cxx:1158
 TGHtml.cxx:1159
 TGHtml.cxx:1160
 TGHtml.cxx:1161
 TGHtml.cxx:1162
 TGHtml.cxx:1163
 TGHtml.cxx:1164
 TGHtml.cxx:1165
 TGHtml.cxx:1166
 TGHtml.cxx:1167
 TGHtml.cxx:1168
 TGHtml.cxx:1169
 TGHtml.cxx:1170
 TGHtml.cxx:1171
 TGHtml.cxx:1172
 TGHtml.cxx:1173
 TGHtml.cxx:1174
 TGHtml.cxx:1175
 TGHtml.cxx:1176
 TGHtml.cxx:1177
 TGHtml.cxx:1178
 TGHtml.cxx:1179
 TGHtml.cxx:1180
 TGHtml.cxx:1181
 TGHtml.cxx:1182
 TGHtml.cxx:1183
 TGHtml.cxx:1184
 TGHtml.cxx:1185
 TGHtml.cxx:1186
 TGHtml.cxx:1187
 TGHtml.cxx:1188
 TGHtml.cxx:1189
 TGHtml.cxx:1190
 TGHtml.cxx:1191
 TGHtml.cxx:1192
 TGHtml.cxx:1193
 TGHtml.cxx:1194
 TGHtml.cxx:1195
 TGHtml.cxx:1196
 TGHtml.cxx:1197
 TGHtml.cxx:1198
 TGHtml.cxx:1199
 TGHtml.cxx:1200
 TGHtml.cxx:1201
 TGHtml.cxx:1202
 TGHtml.cxx:1203
 TGHtml.cxx:1204
 TGHtml.cxx:1205
 TGHtml.cxx:1206
 TGHtml.cxx:1207
 TGHtml.cxx:1208
 TGHtml.cxx:1209
 TGHtml.cxx:1210
 TGHtml.cxx:1211
 TGHtml.cxx:1212
 TGHtml.cxx:1213
 TGHtml.cxx:1214
 TGHtml.cxx:1215
 TGHtml.cxx:1216
 TGHtml.cxx:1217
 TGHtml.cxx:1218
 TGHtml.cxx:1219
 TGHtml.cxx:1220
 TGHtml.cxx:1221
 TGHtml.cxx:1222
 TGHtml.cxx:1223
 TGHtml.cxx:1224
 TGHtml.cxx:1225
 TGHtml.cxx:1226
 TGHtml.cxx:1227
 TGHtml.cxx:1228
 TGHtml.cxx:1229
 TGHtml.cxx:1230
 TGHtml.cxx:1231
 TGHtml.cxx:1232
 TGHtml.cxx:1233
 TGHtml.cxx:1234
 TGHtml.cxx:1235
 TGHtml.cxx:1236
 TGHtml.cxx:1237
 TGHtml.cxx:1238
 TGHtml.cxx:1239
 TGHtml.cxx:1240
 TGHtml.cxx:1241
 TGHtml.cxx:1242
 TGHtml.cxx:1243
 TGHtml.cxx:1244
 TGHtml.cxx:1245
 TGHtml.cxx:1246
 TGHtml.cxx:1247
 TGHtml.cxx:1248
 TGHtml.cxx:1249
 TGHtml.cxx:1250
 TGHtml.cxx:1251
 TGHtml.cxx:1252
 TGHtml.cxx:1253
 TGHtml.cxx:1254
 TGHtml.cxx:1255
 TGHtml.cxx:1256
 TGHtml.cxx:1257
 TGHtml.cxx:1258
 TGHtml.cxx:1259
 TGHtml.cxx:1260
 TGHtml.cxx:1261
 TGHtml.cxx:1262
 TGHtml.cxx:1263
 TGHtml.cxx:1264
 TGHtml.cxx:1265
 TGHtml.cxx:1266
 TGHtml.cxx:1267
 TGHtml.cxx:1268
 TGHtml.cxx:1269
 TGHtml.cxx:1270
 TGHtml.cxx:1271
 TGHtml.cxx:1272
 TGHtml.cxx:1273
 TGHtml.cxx:1274
 TGHtml.cxx:1275
 TGHtml.cxx:1276
 TGHtml.cxx:1277
 TGHtml.cxx:1278
 TGHtml.cxx:1279
 TGHtml.cxx:1280
 TGHtml.cxx:1281
 TGHtml.cxx:1282
 TGHtml.cxx:1283
 TGHtml.cxx:1284
 TGHtml.cxx:1285
 TGHtml.cxx:1286
 TGHtml.cxx:1287
 TGHtml.cxx:1288
 TGHtml.cxx:1289
 TGHtml.cxx:1290
 TGHtml.cxx:1291
 TGHtml.cxx:1292
 TGHtml.cxx:1293
 TGHtml.cxx:1294
 TGHtml.cxx:1295
 TGHtml.cxx:1296
 TGHtml.cxx:1297
 TGHtml.cxx:1298
 TGHtml.cxx:1299
 TGHtml.cxx:1300
 TGHtml.cxx:1301
 TGHtml.cxx:1302
 TGHtml.cxx:1303
 TGHtml.cxx:1304
 TGHtml.cxx:1305
 TGHtml.cxx:1306
 TGHtml.cxx:1307
 TGHtml.cxx:1308
 TGHtml.cxx:1309
 TGHtml.cxx:1310
 TGHtml.cxx:1311
 TGHtml.cxx:1312
 TGHtml.cxx:1313
 TGHtml.cxx:1314
 TGHtml.cxx:1315
 TGHtml.cxx:1316
 TGHtml.cxx:1317
 TGHtml.cxx:1318
 TGHtml.cxx:1319
 TGHtml.cxx:1320
 TGHtml.cxx:1321
 TGHtml.cxx:1322
 TGHtml.cxx:1323
 TGHtml.cxx:1324
 TGHtml.cxx:1325
 TGHtml.cxx:1326
 TGHtml.cxx:1327
 TGHtml.cxx:1328
 TGHtml.cxx:1329
 TGHtml.cxx:1330
 TGHtml.cxx:1331
 TGHtml.cxx:1332
 TGHtml.cxx:1333
 TGHtml.cxx:1334
 TGHtml.cxx:1335
 TGHtml.cxx:1336
 TGHtml.cxx:1337
 TGHtml.cxx:1338
 TGHtml.cxx:1339
 TGHtml.cxx:1340
 TGHtml.cxx:1341
 TGHtml.cxx:1342
 TGHtml.cxx:1343
 TGHtml.cxx:1344
 TGHtml.cxx:1345
 TGHtml.cxx:1346
 TGHtml.cxx:1347
 TGHtml.cxx:1348
 TGHtml.cxx:1349
 TGHtml.cxx:1350
 TGHtml.cxx:1351
 TGHtml.cxx:1352
 TGHtml.cxx:1353
 TGHtml.cxx:1354
 TGHtml.cxx:1355
 TGHtml.cxx:1356
 TGHtml.cxx:1357
 TGHtml.cxx:1358
 TGHtml.cxx:1359
 TGHtml.cxx:1360
 TGHtml.cxx:1361
 TGHtml.cxx:1362
 TGHtml.cxx:1363
 TGHtml.cxx:1364
 TGHtml.cxx:1365
 TGHtml.cxx:1366
 TGHtml.cxx:1367
 TGHtml.cxx:1368
 TGHtml.cxx:1369
 TGHtml.cxx:1370
 TGHtml.cxx:1371
 TGHtml.cxx:1372
 TGHtml.cxx:1373
 TGHtml.cxx:1374
 TGHtml.cxx:1375
 TGHtml.cxx:1376
 TGHtml.cxx:1377
 TGHtml.cxx:1378
 TGHtml.cxx:1379
 TGHtml.cxx:1380
 TGHtml.cxx:1381
 TGHtml.cxx:1382
 TGHtml.cxx:1383
 TGHtml.cxx:1384
 TGHtml.cxx:1385
 TGHtml.cxx:1386
 TGHtml.cxx:1387
 TGHtml.cxx:1388
 TGHtml.cxx:1389
 TGHtml.cxx:1390
 TGHtml.cxx:1391
 TGHtml.cxx:1392
 TGHtml.cxx:1393
 TGHtml.cxx:1394
 TGHtml.cxx:1395
 TGHtml.cxx:1396
 TGHtml.cxx:1397
 TGHtml.cxx:1398
 TGHtml.cxx:1399
 TGHtml.cxx:1400
 TGHtml.cxx:1401
 TGHtml.cxx:1402
 TGHtml.cxx:1403
 TGHtml.cxx:1404
 TGHtml.cxx:1405
 TGHtml.cxx:1406
 TGHtml.cxx:1407
 TGHtml.cxx:1408
 TGHtml.cxx:1409
 TGHtml.cxx:1410
 TGHtml.cxx:1411
 TGHtml.cxx:1412
 TGHtml.cxx:1413
 TGHtml.cxx:1414
 TGHtml.cxx:1415
 TGHtml.cxx:1416
 TGHtml.cxx:1417
 TGHtml.cxx:1418
 TGHtml.cxx:1419
 TGHtml.cxx:1420
 TGHtml.cxx:1421
 TGHtml.cxx:1422
 TGHtml.cxx:1423
 TGHtml.cxx:1424
 TGHtml.cxx:1425
 TGHtml.cxx:1426
 TGHtml.cxx:1427
 TGHtml.cxx:1428
 TGHtml.cxx:1429
 TGHtml.cxx:1430
 TGHtml.cxx:1431
 TGHtml.cxx:1432
 TGHtml.cxx:1433
 TGHtml.cxx:1434
 TGHtml.cxx:1435
 TGHtml.cxx:1436
 TGHtml.cxx:1437
 TGHtml.cxx:1438
 TGHtml.cxx:1439
 TGHtml.cxx:1440
 TGHtml.cxx:1441
 TGHtml.cxx:1442
 TGHtml.cxx:1443
 TGHtml.cxx:1444
 TGHtml.cxx:1445
 TGHtml.cxx:1446
 TGHtml.cxx:1447
 TGHtml.cxx:1448
 TGHtml.cxx:1449
 TGHtml.cxx:1450
 TGHtml.cxx:1451
 TGHtml.cxx:1452
 TGHtml.cxx:1453
 TGHtml.cxx:1454
 TGHtml.cxx:1455
 TGHtml.cxx:1456
 TGHtml.cxx:1457
 TGHtml.cxx:1458
 TGHtml.cxx:1459
 TGHtml.cxx:1460
 TGHtml.cxx:1461
 TGHtml.cxx:1462
 TGHtml.cxx:1463
 TGHtml.cxx:1464
 TGHtml.cxx:1465
 TGHtml.cxx:1466
 TGHtml.cxx:1467
 TGHtml.cxx:1468
 TGHtml.cxx:1469
 TGHtml.cxx:1470
 TGHtml.cxx:1471
 TGHtml.cxx:1472
 TGHtml.cxx:1473
 TGHtml.cxx:1474
 TGHtml.cxx:1475
 TGHtml.cxx:1476
 TGHtml.cxx:1477
 TGHtml.cxx:1478
 TGHtml.cxx:1479
 TGHtml.cxx:1480
 TGHtml.cxx:1481
 TGHtml.cxx:1482
 TGHtml.cxx:1483
 TGHtml.cxx:1484
 TGHtml.cxx:1485
 TGHtml.cxx:1486
 TGHtml.cxx:1487
 TGHtml.cxx:1488
 TGHtml.cxx:1489
 TGHtml.cxx:1490
 TGHtml.cxx:1491
 TGHtml.cxx:1492
 TGHtml.cxx:1493
 TGHtml.cxx:1494
 TGHtml.cxx:1495
 TGHtml.cxx:1496
 TGHtml.cxx:1497
 TGHtml.cxx:1498
 TGHtml.cxx:1499
 TGHtml.cxx:1500
 TGHtml.cxx:1501
 TGHtml.cxx:1502
 TGHtml.cxx:1503
 TGHtml.cxx:1504
 TGHtml.cxx:1505
 TGHtml.cxx:1506
 TGHtml.cxx:1507
 TGHtml.cxx:1508
 TGHtml.cxx:1509
 TGHtml.cxx:1510
 TGHtml.cxx:1511
 TGHtml.cxx:1512
 TGHtml.cxx:1513
 TGHtml.cxx:1514
 TGHtml.cxx:1515
 TGHtml.cxx:1516
 TGHtml.cxx:1517
 TGHtml.cxx:1518
 TGHtml.cxx:1519
 TGHtml.cxx:1520
 TGHtml.cxx:1521
 TGHtml.cxx:1522
 TGHtml.cxx:1523
 TGHtml.cxx:1524
 TGHtml.cxx:1525
 TGHtml.cxx:1526
 TGHtml.cxx:1527
 TGHtml.cxx:1528
 TGHtml.cxx:1529
 TGHtml.cxx:1530
 TGHtml.cxx:1531
 TGHtml.cxx:1532
 TGHtml.cxx:1533
 TGHtml.cxx:1534
 TGHtml.cxx:1535
 TGHtml.cxx:1536
 TGHtml.cxx:1537
 TGHtml.cxx:1538
 TGHtml.cxx:1539
 TGHtml.cxx:1540
 TGHtml.cxx:1541
 TGHtml.cxx:1542
 TGHtml.cxx:1543
 TGHtml.cxx:1544
 TGHtml.cxx:1545
 TGHtml.cxx:1546
 TGHtml.cxx:1547
 TGHtml.cxx:1548
 TGHtml.cxx:1549
 TGHtml.cxx:1550
 TGHtml.cxx:1551
 TGHtml.cxx:1552
 TGHtml.cxx:1553
 TGHtml.cxx:1554
 TGHtml.cxx:1555
 TGHtml.cxx:1556
 TGHtml.cxx:1557
 TGHtml.cxx:1558
 TGHtml.cxx:1559
 TGHtml.cxx:1560
 TGHtml.cxx:1561
 TGHtml.cxx:1562
 TGHtml.cxx:1563
 TGHtml.cxx:1564
 TGHtml.cxx:1565
 TGHtml.cxx:1566
 TGHtml.cxx:1567
 TGHtml.cxx:1568
 TGHtml.cxx:1569
 TGHtml.cxx:1570
 TGHtml.cxx:1571
 TGHtml.cxx:1572
 TGHtml.cxx:1573
 TGHtml.cxx:1574
 TGHtml.cxx:1575
 TGHtml.cxx:1576
 TGHtml.cxx:1577
 TGHtml.cxx:1578
 TGHtml.cxx:1579
 TGHtml.cxx:1580
 TGHtml.cxx:1581
 TGHtml.cxx:1582
 TGHtml.cxx:1583
 TGHtml.cxx:1584
 TGHtml.cxx:1585
 TGHtml.cxx:1586
 TGHtml.cxx:1587
 TGHtml.cxx:1588
 TGHtml.cxx:1589
 TGHtml.cxx:1590
 TGHtml.cxx:1591
 TGHtml.cxx:1592
 TGHtml.cxx:1593
 TGHtml.cxx:1594
 TGHtml.cxx:1595
 TGHtml.cxx:1596
 TGHtml.cxx:1597
 TGHtml.cxx:1598
 TGHtml.cxx:1599
 TGHtml.cxx:1600
 TGHtml.cxx:1601
 TGHtml.cxx:1602
 TGHtml.cxx:1603
 TGHtml.cxx:1604
 TGHtml.cxx:1605
 TGHtml.cxx:1606
 TGHtml.cxx:1607
 TGHtml.cxx:1608
 TGHtml.cxx:1609
 TGHtml.cxx:1610
 TGHtml.cxx:1611
 TGHtml.cxx:1612
 TGHtml.cxx:1613
 TGHtml.cxx:1614
 TGHtml.cxx:1615
 TGHtml.cxx:1616
 TGHtml.cxx:1617
 TGHtml.cxx:1618
 TGHtml.cxx:1619
 TGHtml.cxx:1620
 TGHtml.cxx:1621
 TGHtml.cxx:1622
 TGHtml.cxx:1623
 TGHtml.cxx:1624
 TGHtml.cxx:1625
 TGHtml.cxx:1626
 TGHtml.cxx:1627
 TGHtml.cxx:1628
 TGHtml.cxx:1629
 TGHtml.cxx:1630
 TGHtml.cxx:1631
 TGHtml.cxx:1632
 TGHtml.cxx:1633
 TGHtml.cxx:1634
 TGHtml.cxx:1635
 TGHtml.cxx:1636
 TGHtml.cxx:1637
 TGHtml.cxx:1638
 TGHtml.cxx:1639
 TGHtml.cxx:1640
 TGHtml.cxx:1641
 TGHtml.cxx:1642
 TGHtml.cxx:1643
 TGHtml.cxx:1644
 TGHtml.cxx:1645
 TGHtml.cxx:1646
 TGHtml.cxx:1647
 TGHtml.cxx:1648
 TGHtml.cxx:1649
 TGHtml.cxx:1650
 TGHtml.cxx:1651
 TGHtml.cxx:1652
 TGHtml.cxx:1653
 TGHtml.cxx:1654
 TGHtml.cxx:1655
 TGHtml.cxx:1656
 TGHtml.cxx:1657
 TGHtml.cxx:1658
 TGHtml.cxx:1659
 TGHtml.cxx:1660
 TGHtml.cxx:1661
 TGHtml.cxx:1662
 TGHtml.cxx:1663
 TGHtml.cxx:1664
 TGHtml.cxx:1665
 TGHtml.cxx:1666
 TGHtml.cxx:1667
 TGHtml.cxx:1668
 TGHtml.cxx:1669
 TGHtml.cxx:1670
 TGHtml.cxx:1671
 TGHtml.cxx:1672
 TGHtml.cxx:1673
 TGHtml.cxx:1674
 TGHtml.cxx:1675
 TGHtml.cxx:1676
 TGHtml.cxx:1677
 TGHtml.cxx:1678
 TGHtml.cxx:1679
 TGHtml.cxx:1680
 TGHtml.cxx:1681
 TGHtml.cxx:1682
 TGHtml.cxx:1683
 TGHtml.cxx:1684
 TGHtml.cxx:1685
 TGHtml.cxx:1686
 TGHtml.cxx:1687
 TGHtml.cxx:1688
 TGHtml.cxx:1689
 TGHtml.cxx:1690
 TGHtml.cxx:1691
 TGHtml.cxx:1692
 TGHtml.cxx:1693
 TGHtml.cxx:1694
 TGHtml.cxx:1695
 TGHtml.cxx:1696
 TGHtml.cxx:1697
 TGHtml.cxx:1698
 TGHtml.cxx:1699
 TGHtml.cxx:1700
 TGHtml.cxx:1701
 TGHtml.cxx:1702
 TGHtml.cxx:1703
 TGHtml.cxx:1704
 TGHtml.cxx:1705
 TGHtml.cxx:1706
 TGHtml.cxx:1707
 TGHtml.cxx:1708
 TGHtml.cxx:1709
 TGHtml.cxx:1710
 TGHtml.cxx:1711
 TGHtml.cxx:1712
 TGHtml.cxx:1713
 TGHtml.cxx:1714
 TGHtml.cxx:1715
 TGHtml.cxx:1716
 TGHtml.cxx:1717
 TGHtml.cxx:1718
 TGHtml.cxx:1719
 TGHtml.cxx:1720
 TGHtml.cxx:1721
 TGHtml.cxx:1722
 TGHtml.cxx:1723
 TGHtml.cxx:1724
 TGHtml.cxx:1725
 TGHtml.cxx:1726
 TGHtml.cxx:1727
 TGHtml.cxx:1728
 TGHtml.cxx:1729
 TGHtml.cxx:1730
 TGHtml.cxx:1731
 TGHtml.cxx:1732
 TGHtml.cxx:1733
 TGHtml.cxx:1734
 TGHtml.cxx:1735
 TGHtml.cxx:1736
 TGHtml.cxx:1737
 TGHtml.cxx:1738
 TGHtml.cxx:1739
 TGHtml.cxx:1740
 TGHtml.cxx:1741
 TGHtml.cxx:1742
 TGHtml.cxx:1743
 TGHtml.cxx:1744
 TGHtml.cxx:1745
 TGHtml.cxx:1746
 TGHtml.cxx:1747
 TGHtml.cxx:1748
 TGHtml.cxx:1749
 TGHtml.cxx:1750
 TGHtml.cxx:1751
 TGHtml.cxx:1752
 TGHtml.cxx:1753
 TGHtml.cxx:1754
 TGHtml.cxx:1755
 TGHtml.cxx:1756
 TGHtml.cxx:1757
 TGHtml.cxx:1758
 TGHtml.cxx:1759
 TGHtml.cxx:1760
 TGHtml.cxx:1761
 TGHtml.cxx:1762
 TGHtml.cxx:1763
 TGHtml.cxx:1764
 TGHtml.cxx:1765
 TGHtml.cxx:1766
 TGHtml.cxx:1767
 TGHtml.cxx:1768
 TGHtml.cxx:1769
 TGHtml.cxx:1770
 TGHtml.cxx:1771
 TGHtml.cxx:1772
 TGHtml.cxx:1773
 TGHtml.cxx:1774
 TGHtml.cxx:1775
 TGHtml.cxx:1776
 TGHtml.cxx:1777
 TGHtml.cxx:1778
 TGHtml.cxx:1779
 TGHtml.cxx:1780
 TGHtml.cxx:1781
 TGHtml.cxx:1782
 TGHtml.cxx:1783
 TGHtml.cxx:1784
 TGHtml.cxx:1785
 TGHtml.cxx:1786
 TGHtml.cxx:1787
 TGHtml.cxx:1788
 TGHtml.cxx:1789
 TGHtml.cxx:1790
 TGHtml.cxx:1791
 TGHtml.cxx:1792
 TGHtml.cxx:1793
 TGHtml.cxx:1794
 TGHtml.cxx:1795
 TGHtml.cxx:1796
 TGHtml.cxx:1797
 TGHtml.cxx:1798
 TGHtml.cxx:1799
 TGHtml.cxx:1800
 TGHtml.cxx:1801
 TGHtml.cxx:1802
 TGHtml.cxx:1803
 TGHtml.cxx:1804
 TGHtml.cxx:1805
 TGHtml.cxx:1806
 TGHtml.cxx:1807
 TGHtml.cxx:1808
 TGHtml.cxx:1809
 TGHtml.cxx:1810
 TGHtml.cxx:1811
 TGHtml.cxx:1812
 TGHtml.cxx:1813
 TGHtml.cxx:1814
 TGHtml.cxx:1815
 TGHtml.cxx:1816
 TGHtml.cxx:1817
 TGHtml.cxx:1818
 TGHtml.cxx:1819
 TGHtml.cxx:1820
 TGHtml.cxx:1821
 TGHtml.cxx:1822
 TGHtml.cxx:1823
 TGHtml.cxx:1824
 TGHtml.cxx:1825
 TGHtml.cxx:1826
 TGHtml.cxx:1827
 TGHtml.cxx:1828
 TGHtml.cxx:1829
 TGHtml.cxx:1830
 TGHtml.cxx:1831
 TGHtml.cxx:1832
 TGHtml.cxx:1833
 TGHtml.cxx:1834
 TGHtml.cxx:1835
 TGHtml.cxx:1836
 TGHtml.cxx:1837
 TGHtml.cxx:1838
 TGHtml.cxx:1839
 TGHtml.cxx:1840
 TGHtml.cxx:1841
 TGHtml.cxx:1842
 TGHtml.cxx:1843
 TGHtml.cxx:1844
 TGHtml.cxx:1845
 TGHtml.cxx:1846
 TGHtml.cxx:1847
 TGHtml.cxx:1848
 TGHtml.cxx:1849
 TGHtml.cxx:1850
 TGHtml.cxx:1851
 TGHtml.cxx:1852
 TGHtml.cxx:1853
 TGHtml.cxx:1854
 TGHtml.cxx:1855
 TGHtml.cxx:1856
 TGHtml.cxx:1857
 TGHtml.cxx:1858
 TGHtml.cxx:1859
 TGHtml.cxx:1860
 TGHtml.cxx:1861
 TGHtml.cxx:1862
 TGHtml.cxx:1863
 TGHtml.cxx:1864
 TGHtml.cxx:1865
 TGHtml.cxx:1866
 TGHtml.cxx:1867
 TGHtml.cxx:1868
 TGHtml.cxx:1869
 TGHtml.cxx:1870
 TGHtml.cxx:1871
 TGHtml.cxx:1872
 TGHtml.cxx:1873
 TGHtml.cxx:1874
 TGHtml.cxx:1875
 TGHtml.cxx:1876
 TGHtml.cxx:1877
 TGHtml.cxx:1878
 TGHtml.cxx:1879
 TGHtml.cxx:1880
 TGHtml.cxx:1881
 TGHtml.cxx:1882
 TGHtml.cxx:1883
 TGHtml.cxx:1884
 TGHtml.cxx:1885
 TGHtml.cxx:1886
 TGHtml.cxx:1887
 TGHtml.cxx:1888
 TGHtml.cxx:1889
 TGHtml.cxx:1890
 TGHtml.cxx:1891
 TGHtml.cxx:1892
 TGHtml.cxx:1893
 TGHtml.cxx:1894
 TGHtml.cxx:1895
 TGHtml.cxx:1896
 TGHtml.cxx:1897
 TGHtml.cxx:1898
 TGHtml.cxx:1899
 TGHtml.cxx:1900
 TGHtml.cxx:1901
 TGHtml.cxx:1902
 TGHtml.cxx:1903
 TGHtml.cxx:1904
 TGHtml.cxx:1905
 TGHtml.cxx:1906
 TGHtml.cxx:1907
 TGHtml.cxx:1908
 TGHtml.cxx:1909
 TGHtml.cxx:1910
 TGHtml.cxx:1911
 TGHtml.cxx:1912
 TGHtml.cxx:1913
 TGHtml.cxx:1914
 TGHtml.cxx:1915
 TGHtml.cxx:1916
 TGHtml.cxx:1917
 TGHtml.cxx:1918
 TGHtml.cxx:1919
 TGHtml.cxx:1920
 TGHtml.cxx:1921
 TGHtml.cxx:1922
 TGHtml.cxx:1923
 TGHtml.cxx:1924
 TGHtml.cxx:1925
 TGHtml.cxx:1926
 TGHtml.cxx:1927
 TGHtml.cxx:1928
 TGHtml.cxx:1929
 TGHtml.cxx:1930
 TGHtml.cxx:1931
 TGHtml.cxx:1932
 TGHtml.cxx:1933
 TGHtml.cxx:1934
 TGHtml.cxx:1935
 TGHtml.cxx:1936
 TGHtml.cxx:1937
 TGHtml.cxx:1938
 TGHtml.cxx:1939
 TGHtml.cxx:1940
 TGHtml.cxx:1941
 TGHtml.cxx:1942
 TGHtml.cxx:1943
 TGHtml.cxx:1944
 TGHtml.cxx:1945
 TGHtml.cxx:1946
 TGHtml.cxx:1947
 TGHtml.cxx:1948
 TGHtml.cxx:1949
 TGHtml.cxx:1950
 TGHtml.cxx:1951
 TGHtml.cxx:1952
 TGHtml.cxx:1953
 TGHtml.cxx:1954
 TGHtml.cxx:1955
 TGHtml.cxx:1956
 TGHtml.cxx:1957
 TGHtml.cxx:1958
 TGHtml.cxx:1959
 TGHtml.cxx:1960
 TGHtml.cxx:1961
 TGHtml.cxx:1962
 TGHtml.cxx:1963
 TGHtml.cxx:1964
 TGHtml.cxx:1965
 TGHtml.cxx:1966
 TGHtml.cxx:1967
 TGHtml.cxx:1968
 TGHtml.cxx:1969
 TGHtml.cxx:1970
 TGHtml.cxx:1971
 TGHtml.cxx:1972
 TGHtml.cxx:1973
 TGHtml.cxx:1974
 TGHtml.cxx:1975
 TGHtml.cxx:1976
 TGHtml.cxx:1977
 TGHtml.cxx:1978
 TGHtml.cxx:1979
 TGHtml.cxx:1980
 TGHtml.cxx:1981
 TGHtml.cxx:1982
 TGHtml.cxx:1983
 TGHtml.cxx:1984
 TGHtml.cxx:1985
 TGHtml.cxx:1986
 TGHtml.cxx:1987
 TGHtml.cxx:1988
 TGHtml.cxx:1989
 TGHtml.cxx:1990
 TGHtml.cxx:1991
 TGHtml.cxx:1992
 TGHtml.cxx:1993
 TGHtml.cxx:1994
 TGHtml.cxx:1995
 TGHtml.cxx:1996
 TGHtml.cxx:1997
 TGHtml.cxx:1998
 TGHtml.cxx:1999
 TGHtml.cxx:2000
 TGHtml.cxx:2001
 TGHtml.cxx:2002
 TGHtml.cxx:2003
 TGHtml.cxx:2004
 TGHtml.cxx:2005
 TGHtml.cxx:2006
 TGHtml.cxx:2007
 TGHtml.cxx:2008
 TGHtml.cxx:2009
 TGHtml.cxx:2010
 TGHtml.cxx:2011
 TGHtml.cxx:2012
 TGHtml.cxx:2013
 TGHtml.cxx:2014
 TGHtml.cxx:2015
 TGHtml.cxx:2016
 TGHtml.cxx:2017
 TGHtml.cxx:2018
 TGHtml.cxx:2019
 TGHtml.cxx:2020
 TGHtml.cxx:2021
 TGHtml.cxx:2022
 TGHtml.cxx:2023
 TGHtml.cxx:2024
 TGHtml.cxx:2025
 TGHtml.cxx:2026
 TGHtml.cxx:2027
 TGHtml.cxx:2028
 TGHtml.cxx:2029
 TGHtml.cxx:2030
 TGHtml.cxx:2031
 TGHtml.cxx:2032
 TGHtml.cxx:2033
 TGHtml.cxx:2034
 TGHtml.cxx:2035
 TGHtml.cxx:2036
 TGHtml.cxx:2037
 TGHtml.cxx:2038
 TGHtml.cxx:2039
 TGHtml.cxx:2040
 TGHtml.cxx:2041
 TGHtml.cxx:2042
 TGHtml.cxx:2043
 TGHtml.cxx:2044
 TGHtml.cxx:2045
 TGHtml.cxx:2046
 TGHtml.cxx:2047
 TGHtml.cxx:2048
 TGHtml.cxx:2049
 TGHtml.cxx:2050
 TGHtml.cxx:2051
 TGHtml.cxx:2052
 TGHtml.cxx:2053
 TGHtml.cxx:2054
 TGHtml.cxx:2055
 TGHtml.cxx:2056
 TGHtml.cxx:2057
 TGHtml.cxx:2058
 TGHtml.cxx:2059
 TGHtml.cxx:2060
 TGHtml.cxx:2061
 TGHtml.cxx:2062
 TGHtml.cxx:2063
 TGHtml.cxx:2064
 TGHtml.cxx:2065
 TGHtml.cxx:2066
 TGHtml.cxx:2067
 TGHtml.cxx:2068
 TGHtml.cxx:2069
 TGHtml.cxx:2070
 TGHtml.cxx:2071
 TGHtml.cxx:2072
 TGHtml.cxx:2073
 TGHtml.cxx:2074