X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/69941f05864fa8b37856ccc1338124bfac756a2b..79f585d90388128f9d245f7c92d3013b98b9ed14:/src/html/m_fonts.cpp diff --git a/src/html/m_fonts.cpp b/src/html/m_fonts.cpp index 2919a029b4..161cbd450c 100644 --- a/src/html/m_fonts.cpp +++ b/src/html/m_fonts.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mod_fonts.cpp +// Name: m_fonts.cpp // Purpose: wxHtml module for fonts & colors of fonts // Author: Vaclav Slavik // RCS-ID: $Id$ @@ -11,7 +11,7 @@ #pragma implementation #endif -#include +#include "wx/wxprec.h" #include "wx/defs.h" #if wxUSE_HTML @@ -21,49 +21,80 @@ #endif #ifndef WXPRECOMP -#include +#include "wx/wx.h" #endif #include "wx/html/forcelnk.h" #include "wx/html/m_templ.h" +#include "wx/fontenum.h" +#include "wx/tokenzr.h" -FORCE_LINK_ME(mod_fonts) +FORCE_LINK_ME(m_fonts) TAG_HANDLER_BEGIN(FONT, "FONT") + TAG_HANDLER_VARS + wxSortedArrayString m_Faces; + TAG_HANDLER_PROC(tag) { wxColour oldclr = m_WParser -> GetActualColor(); int oldsize = m_WParser -> GetFontSize(); + wxString oldface = m_WParser -> GetFontFace(); - if (tag.HasParam("COLOR")) { - unsigned long tmp = 0; + if (tag.HasParam(wxT("COLOR"))) { + unsigned long tmp = 0; wxColour clr; - if (tag.ScanParam("COLOR", "#%lX", &tmp) == 1) { + if (tag.ScanParam(wxT("COLOR"), wxT("#%lX"), &tmp) == 1) { clr = wxColour((tmp & 0xFF0000) >> 16 , (tmp & 0x00FF00) >> 8, (tmp & 0x0000FF)); m_WParser -> SetActualColor(clr); m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(clr)); - } + } } - if (tag.HasParam("SIZE")) { - long tmp = 0; - if (tag.ScanParam("SIZE", "%li", &tmp) == 1) { - m_WParser -> SetFontSize(oldsize+tmp); + if (tag.HasParam(wxT("SIZE"))) { + long tmp = 0; + wxChar c = tag.GetParam(wxT("SIZE"))[(unsigned int) 0]; + if (tag.ScanParam(wxT("SIZE"), wxT("%li"), &tmp) == 1) { + if (c == '+' || c == '-') + m_WParser -> SetFontSize(oldsize+tmp); + else + m_WParser -> SetFontSize(tmp); m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); - } + } + } + + if (tag.HasParam(wxT("FACE"))) { + if (m_Faces.GetCount() == 0) { + wxFontEnumerator enu; + enu.EnumerateFacenames(); + m_Faces = *enu.GetFacenames(); + } + wxStringTokenizer tk(tag.GetParam(wxT("FACE")), ","); + int index; + + while (tk.HasMoreTokens()) + if ((index = m_Faces.Index(tk.GetNextToken())) != wxNOT_FOUND) { + m_WParser -> SetFontFace(m_Faces[index]); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + break; + } } ParseInner(tag); - if (oldclr != m_WParser -> GetActualColor()) { - m_WParser -> SetActualColor(oldclr); - m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(oldclr)); - } + if (oldface != m_WParser -> GetFontFace()) { + m_WParser -> SetFontFace(oldface); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + } if (oldsize != m_WParser -> GetFontSize()) { m_WParser -> SetFontSize(oldsize); m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + } + if (oldclr != m_WParser -> GetActualColor()) { + m_WParser -> SetActualColor(oldclr); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlColourCell(oldclr)); } return TRUE; } @@ -71,36 +102,86 @@ TAG_HANDLER_BEGIN(FONT, "FONT") TAG_HANDLER_END(FONT) -TAG_HANDLER_BEGIN(FACES, "U,I,B,TT") +TAG_HANDLER_BEGIN(FACES_U, "U,STRIKE") TAG_HANDLER_PROC(tag) { - int fixed = m_WParser -> GetFontFixed(), - italic = m_WParser -> GetFontItalic(), - underlined = m_WParser -> GetFontUnderlined(), - bold = m_WParser -> GetFontBold(); - - if (tag.GetName() == "U") - m_WParser -> SetFontUnderlined(TRUE); - else if (tag.GetName() == "B") - m_WParser -> SetFontBold(TRUE); - else if (tag.GetName() == "I") - m_WParser -> SetFontItalic(TRUE); - else - m_WParser -> SetFontFixed(TRUE); + int underlined = m_WParser -> GetFontUnderlined(); + + m_WParser -> SetFontUnderlined(TRUE); m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); ParseInner(tag); m_WParser -> SetFontUnderlined(underlined); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + return TRUE; + } + +TAG_HANDLER_END(FACES_U) + + + + +TAG_HANDLER_BEGIN(FACES_B, "B,STRONG") + + TAG_HANDLER_PROC(tag) + { + int bold = m_WParser -> GetFontBold(); + + m_WParser -> SetFontBold(TRUE); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + + ParseInner(tag); + m_WParser -> SetFontBold(bold); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + return TRUE; + } + +TAG_HANDLER_END(FACES_B) + + + + +TAG_HANDLER_BEGIN(FACES_I, "I,EM,CITE,ADDRESS") + + TAG_HANDLER_PROC(tag) + { + int italic = m_WParser -> GetFontItalic(); + + m_WParser -> SetFontItalic(TRUE); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + + ParseInner(tag); + m_WParser -> SetFontItalic(italic); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + return TRUE; + } + +TAG_HANDLER_END(FACES_I) + + + + +TAG_HANDLER_BEGIN(FACES_TT, "TT,CODE,KBD,SAMP") + + TAG_HANDLER_PROC(tag) + { + int fixed = m_WParser -> GetFontFixed(); + + m_WParser -> SetFontFixed(TRUE); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + + ParseInner(tag); + m_WParser -> SetFontFixed(fixed); m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); return TRUE; } -TAG_HANDLER_END(FACES) +TAG_HANDLER_END(FACES_TT) @@ -125,21 +206,21 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6") m_WParser -> SetFontUnderlined(FALSE); m_WParser -> SetFontFixed(FALSE); - if (tag.GetName() == "H1") - m_WParser -> SetFontSize(+4); - else if (tag.GetName() == "H2") - m_WParser -> SetFontSize(+3); - else if (tag.GetName() == "H3") - m_WParser -> SetFontSize(+2); - else if (tag.GetName() == "H4") { - m_WParser -> SetFontSize(+2); + if (tag.GetName() == wxT("H1")) + m_WParser -> SetFontSize(7); + else if (tag.GetName() == wxT("H2")) + m_WParser -> SetFontSize(6); + else if (tag.GetName() == wxT("H3")) + m_WParser -> SetFontSize(5); + else if (tag.GetName() == wxT("H4")) { + m_WParser -> SetFontSize(5); m_WParser -> SetFontItalic(TRUE); m_WParser -> SetFontBold(FALSE); } - else if (tag.GetName() == "H5") - m_WParser -> SetFontSize(+1); - else if (tag.GetName() == "H6") { - m_WParser -> SetFontSize(+1); + else if (tag.GetName() == wxT("H5")) + m_WParser -> SetFontSize(4); + else if (tag.GetName() == wxT("H6")) { + m_WParser -> SetFontSize(4); m_WParser -> SetFontItalic(TRUE); m_WParser -> SetFontBold(FALSE); } @@ -154,7 +235,7 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6") c -> SetAlign(tag); c -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); - c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP); + c -> SetIndent(m_WParser -> GetCharHeight(), wxHTML_INDENT_TOP); m_WParser -> SetAlign(c -> GetAlignHor()); ParseInner(tag); @@ -170,7 +251,7 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6") m_WParser -> CloseContainer(); m_WParser -> OpenContainer(); c = m_WParser -> GetContainer(); - c -> SetIndent(m_WParser -> GetCharHeight(), HTML_INDENT_TOP); + c -> SetIndent(m_WParser -> GetCharHeight(), wxHTML_INDENT_TOP); return TRUE; } @@ -178,13 +259,37 @@ TAG_HANDLER_BEGIN(Hx, "H1,H2,H3,H4,H5,H6") TAG_HANDLER_END(Hx) +TAG_HANDLER_BEGIN(BIGSMALL, "BIG,SMALL") + + TAG_HANDLER_PROC(tag) + { + int oldsize = m_WParser -> GetFontSize(); + int sz = (tag.GetName() == wxT("BIG")) ? +1 : -1; + + m_WParser -> SetFontSize(sz); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + + ParseInner(tag); + + m_WParser -> SetFontSize(oldsize); + m_WParser -> GetContainer() -> InsertCell(new wxHtmlFontCell(m_WParser -> CreateCurrentFont())); + return TRUE; + } + +TAG_HANDLER_END(BIGSMALL) + + TAGS_MODULE_BEGIN(Fonts) TAGS_MODULE_ADD(FONT) - TAGS_MODULE_ADD(FACES) + TAGS_MODULE_ADD(FACES_U) + TAGS_MODULE_ADD(FACES_I) + TAGS_MODULE_ADD(FACES_B) + TAGS_MODULE_ADD(FACES_TT) TAGS_MODULE_ADD(Hx) + TAGS_MODULE_ADD(BIGSMALL) TAGS_MODULE_END(Fonts)