home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / html / m_pre.cpp < prev    next >
C/C++ Source or Header  |  2002-11-09  |  4KB  |  131 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        m_pre.cpp
  3. // Purpose:     wxHtml module for <PRE> ... </PRE> tag (code citation)
  4. // Author:      Vaclav Slavik
  5. // RCS-ID:      $Id: m_pre.cpp,v 1.21.2.3 2002/11/09 00:07:35 VS Exp $
  6. // Copyright:   (c) 1999 Vaclav Slavik
  7. // Licence:     wxWindows Licence
  8. /////////////////////////////////////////////////////////////////////////////
  9.  
  10. #ifdef __GNUG__
  11. #pragma implementation
  12. #endif
  13.  
  14. #include "wx/wxprec.h"
  15.  
  16. #include "wx/defs.h"
  17. #if wxUSE_HTML && wxUSE_STREAMS
  18. #ifdef __BORLANDC__
  19. #pragma hdrstop
  20. #endif
  21.  
  22. #ifndef WXPRECOMP
  23. #endif
  24.  
  25. #include "wx/html/forcelnk.h"
  26. #include "wx/html/m_templ.h"
  27.  
  28. #include "wx/html/htmlcell.h"
  29. #include "wx/tokenzr.h"
  30. #include "wx/encconv.h"
  31.  
  32. FORCE_LINK_ME(m_pre)
  33.  
  34. // replaces '\t', ' ' and '\n' with HTML markup:
  35. static wxString LINKAGEMODE HtmlizeWhitespaces(const wxString& str)
  36. {
  37.     wxString out;
  38.     size_t i = 0, j = 0, len = str.Len();
  39.     for (i = 0; i < len; i++)
  40.     {
  41.         switch (str[i])
  42.         {
  43.             case wxT('<'):
  44.                 while (i < len && str[i] != wxT('>'))
  45.                     out << str[i++];
  46.                 out << wxT('>');
  47.                 break;
  48.             case wxT(' '):
  49.                 out << wxT(" ");
  50.                 break;
  51.             case wxT('\n'):
  52.                 out << wxT("<br>");
  53.                 break;
  54.             case wxT('\t'):
  55.                 for (j = 8 - i%8; j > 0; j--) out << wxT(" ");
  56.                 break;
  57.             default:
  58.                 out << str[i];
  59.                 break;
  60.         }
  61.     }
  62.     return out;
  63. }
  64.  
  65.  
  66. //-----------------------------------------------------------------------------
  67. // The list handler:
  68. //-----------------------------------------------------------------------------
  69.  
  70.  
  71. TAG_HANDLER_BEGIN(PRE, "PRE")
  72.  
  73.     TAG_HANDLER_PROC(tag)
  74.     {
  75.         wxHtmlContainerCell *c;
  76.  
  77.         int fixed = m_WParser->GetFontFixed(),
  78.             italic = m_WParser->GetFontItalic(),
  79.             underlined = m_WParser->GetFontUnderlined(),
  80.             bold = m_WParser->GetFontBold(),
  81.             fsize = m_WParser->GetFontSize();
  82.  
  83.         c = m_WParser->GetContainer();
  84.         m_WParser->SetFontUnderlined(FALSE);
  85.         m_WParser->SetFontBold(FALSE);
  86.         m_WParser->SetFontItalic(FALSE);
  87.         m_WParser->SetFontFixed(TRUE);
  88.         m_WParser->SetFontSize(3);
  89.         c->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
  90.  
  91.         m_WParser->CloseContainer();
  92.         c = m_WParser->OpenContainer();
  93.         c->SetAlignHor(wxHTML_ALIGN_LEFT);
  94.         c->SetIndent(m_WParser->GetCharHeight(), wxHTML_INDENT_TOP);
  95.  
  96.         wxString srcMid =
  97.             m_WParser->GetSource()->Mid(tag.GetBeginPos(),
  98.                                         tag.GetEndPos1() - tag.GetBeginPos());
  99.         // It is safe to temporarily change the source being parsed,
  100.         // provided we restore the state back after parsing
  101.         m_Parser->SetSourceAndSaveState(HtmlizeWhitespaces(srcMid));
  102.         m_Parser->DoParsing();
  103.         m_Parser->RestoreState();
  104.  
  105.         m_WParser->CloseContainer();
  106.         c = m_WParser->OpenContainer();
  107.  
  108.         m_WParser->SetFontUnderlined(underlined);
  109.         m_WParser->SetFontBold(bold);
  110.         m_WParser->SetFontItalic(italic);
  111.         m_WParser->SetFontFixed(fixed);
  112.         m_WParser->SetFontSize(fsize);
  113.         c->InsertCell(new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
  114.  
  115.         return TRUE;
  116.     }
  117.  
  118. TAG_HANDLER_END(PRE)
  119.  
  120.  
  121.  
  122.  
  123.  
  124. TAGS_MODULE_BEGIN(Pre)
  125.  
  126.     TAGS_MODULE_ADD(PRE)
  127.  
  128. TAGS_MODULE_END(Pre)
  129.  
  130. #endif
  131.