m_Parser->SetFonts(normal_face, fixed_face, sizes);
// fonts changed => contents invalid, so reload the page:
- SetPage(wxT("<html><body></body></html>"));
+ SetPage(wxT("<html><body></body></html>"));
if (!op.IsEmpty()) LoadPage(op);
}
wxString newsrc(source);
// pass HTML through registered processors:
- if (m_Processors || m_SharedProcessors)
+ if (m_Processors || m_GlobalProcessors)
{
- wxHtmlProcessorList::Node *nodeL, *nodeS;
- int prL, prS;
+ wxHtmlProcessorList::Node *nodeL, *nodeG;
+ int prL, prG;
nodeL = (m_Processors) ? m_Processors->GetFirst() : NULL;
- nodeS = (m_SharedProcessors) ? m_SharedProcessors->GetFirst() : NULL;
-
- while (nodeL || nodeS)
+ nodeG = (m_GlobalProcessors) ? m_GlobalProcessors->GetFirst() : NULL;
+
+ // VS: there are two lists, global and local, both of them sorted by
+ // priority. Since we have to go through _both_ lists with
+ // decreasing priority, we "merge-sort" the lists on-line by
+ // processing that one of the two heads that has higher priority
+ // in every iteration
+ while (nodeL || nodeG)
{
prL = (nodeL) ? nodeL->GetData()->GetPriority() : -1;
- prS = (nodeS) ? nodeS->GetData()->GetPriority() : -1;
- if (prL > prS)
+ prG = (nodeG) ? nodeG->GetData()->GetPriority() : -1;
+ if (prL > prG)
{
- newsrc = nodeL->GetData()->Process(newsrc);
+ if (nodeL->GetData()->IsEnabled())
+ newsrc = nodeL->GetData()->Process(newsrc);
nodeL = nodeL->GetNext();
}
- else // prL <= prS
+ else // prL <= prG
{
- newsrc = nodeS->GetData()->Process(newsrc);
- nodeS = nodeS->GetNext();
+ if (nodeG->GetData()->IsEnabled())
+ newsrc = nodeG->GetData()->Process(newsrc);
+ nodeG = nodeG->GetNext();
}
}
}
m_Cell->SetIndent(m_Borders, wxHTML_INDENT_ALL, wxHTML_UNITS_PIXELS);
m_Cell->SetAlignHor(wxHTML_ALIGN_CENTER);
CreateLayout();
- if (m_tmpCanDrawLocks == 0)
+ if (m_tmpCanDrawLocks == 0)
Refresh();
return TRUE;
}
wxYield(); Refresh(FALSE);
m_tmpCanDrawLocks++;
- if (m_HistoryOn && (m_HistoryPos != -1)) // store scroll position into history item
+ if (m_HistoryOn && (m_HistoryPos != -1))
{
+ // store scroll position into history item:
int x, y;
ViewStart(&x, &y);
(*m_History)[m_HistoryPos].SetPos(y);
}
- if (location[0] == wxT('#')) // local anchor
+ if (location[0] == wxT('#'))
{
+ // local anchor:
wxString anch = location.Mid(1) /*1 to end*/;
m_tmpCanDrawLocks--;
rt_val = ScrollToAnchor(anch);
m_Borders = cfg->Read(wxT("wxHtmlWindow/Borders"), m_Borders);
p_fff = cfg->Read(wxT("wxHtmlWindow/FontFaceFixed"), m_Parser->m_FontFaceFixed);
p_ffn = cfg->Read(wxT("wxHtmlWindow/FontFaceNormal"), m_Parser->m_FontFaceNormal);
- for (int i = 0; i < 7; i++)
+ for (int i = 0; i < 7; i++)
{
tmp.Printf(wxT("wxHtmlWindow/FontsSize%i"), i);
p_fontsizes[i] = cfg->Read(tmp, m_Parser->m_FontsSizes[i]);
cfg->Write(wxT("wxHtmlWindow/Borders"), (long) m_Borders);
cfg->Write(wxT("wxHtmlWindow/FontFaceFixed"), m_Parser->m_FontFaceFixed);
cfg->Write(wxT("wxHtmlWindow/FontFaceNormal"), m_Parser->m_FontFaceNormal);
- for (int i = 0; i < 7; i++)
+ for (int i = 0; i < 7; i++)
{
tmp.Printf(wxT("wxHtmlWindow/FontsSize%i"), i);
cfg->Write(tmp, (long) m_Parser->m_FontsSizes[i]);
m_Processors->DeleteContents(TRUE);
}
wxHtmlProcessorList::Node *node;
-
+
for (node = m_Processors->GetFirst(); node; node = node->GetNext())
{
- if (processor->GetPriority() > node->GetData()->GetPriority())
+ if (processor->GetPriority() > node->GetData()->GetPriority())
{
m_Processors->Insert(node, processor);
- break;
+ return;
}
}
+ m_Processors->Append(processor);
}
-/*static */ void wxHtmlWindow::AddSharedProcessor(wxHtmlProcessor *processor)
+/*static */ void wxHtmlWindow::AddGlobalProcessor(wxHtmlProcessor *processor)
{
- if (!m_SharedProcessors)
+ if (!m_GlobalProcessors)
{
- m_SharedProcessors = new wxHtmlProcessorList;
- m_SharedProcessors->DeleteContents(TRUE);
+ m_GlobalProcessors = new wxHtmlProcessorList;
+ m_GlobalProcessors->DeleteContents(TRUE);
}
wxHtmlProcessorList::Node *node;
- for (node = m_SharedProcessors->GetFirst(); node; node = node->GetNext())
+ for (node = m_GlobalProcessors->GetFirst(); node; node = node->GetNext())
{
- if (processor->GetPriority() > node->GetData()->GetPriority())
+ if (processor->GetPriority() > node->GetData()->GetPriority())
{
- m_SharedProcessors->Insert(node, processor);
- break;
+ m_GlobalProcessors->Insert(node, processor);
+ return;
}
}
+ m_GlobalProcessors->Append(processor);
}
wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL;
wxCursor *wxHtmlWindow::s_cur_hand = NULL;
wxCursor *wxHtmlWindow::s_cur_arrow = NULL;
-wxHtmlProcessorList *wxHtmlWindow::m_SharedProcessors = NULL;
+wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL;
void wxHtmlWindow::CleanUpStatics()
{
m_DefaultFilter = NULL;
m_Filters.DeleteContents(TRUE);
m_Filters.Clear();
-
- delete m_SharedProcessors;
- m_SharedProcessors = NULL;
-
+ delete m_GlobalProcessors;
+ m_GlobalProcessors = NULL;
delete s_cur_hand;
delete s_cur_arrow;
}
}
-
+IMPLEMENT_ABSTRACT_CLASS(wxHtmlProcessor,wxObject)
IMPLEMENT_DYNAMIC_CLASS(wxHtmlWindow,wxScrolledWindow)