Changed: Refactor DL

This commit is contained in:
Nimetu 2016-01-06 00:11:17 +02:00
parent 39cfbc2a7c
commit cd60a50e8f
2 changed files with 43 additions and 34 deletions

View file

@ -439,13 +439,17 @@ namespace NLGUI
} }
// DL list // DL list
std::vector<bool> _DL; class HTMLDListElement {
inline bool getDL() const public:
{ HTMLDListElement()
if (_DL.empty()) : DT(false), DD(false)
return false; { }
return _DL.back();
} public:
bool DT;
bool DD;
};
std::vector<HTMLDListElement> _DL;
// OL and UL // OL and UL
class HTMLOListElement { class HTMLOListElement {
@ -473,7 +477,6 @@ namespace NLGUI
// IL mode // IL mode
bool _LI; bool _LI;
bool _DT;
// Current text color // Current text color
std::vector<NLMISC::CRGBA> _TextColor; std::vector<NLMISC::CRGBA> _TextColor;

View file

@ -1930,7 +1930,7 @@ namespace NLGUI
else else
_UL.push_back(HTMLOListElement(1, "square")); _UL.push_back(HTMLOListElement(1, "square"));
// if LI is already present // if LI is already present
_LI = _UL.size() > 1 || getDL(); _LI = _UL.size() > 1 || _DL.size() > 1;
_Indent += ULIndent; _Indent += ULIndent;
endParagraph(); endParagraph();
break; break;
@ -1991,17 +1991,17 @@ namespace NLGUI
_IgnoreText = true; _IgnoreText = true;
break; break;
case HTML_DL: case HTML_DL:
_DL.push_back(true); _DL.push_back(HTMLDListElement());
_LI = _DL.size() > 1 || !_UL.empty(); _LI = _DL.size() > 1 || !_UL.empty();
endParagraph(); endParagraph();
break; break;
case HTML_DT: case HTML_DT:
if (getDL()) if (!_DL.empty())
{ {
// see if this is the first <dt>, closing tag not required // see if this is the first <dt>, closing tag not required
if (!_DT) if (!_DL.back().DT)
{ {
_DT = true; _DL.back().DT = true;
_FontWeight.push_back(FONT_WEIGHT_BOLD); _FontWeight.push_back(FONT_WEIGHT_BOLD);
} }
@ -2017,16 +2017,21 @@ namespace NLGUI
} }
break; break;
case HTML_DD: case HTML_DD:
if (getDL()) if (!_DL.empty())
{ {
// if there was no closing tag for <dt>, then remove <dt> style // if there was no closing tag for <dt>, then remove <dt> style
if (_DT) if (_DL.back().DT)
{ {
_DT = false; _DL.back().DT = false;
popIfNotEmpty (_FontWeight); popIfNotEmpty (_FontWeight);
} }
_Indent += ULIndent; if (!_DL.back().DD)
{
_Indent += ULIndent;
_DL.back().DD = true;
}
if (!_LI) if (!_LI)
{ {
_LI = true; _LI = true;
@ -2050,7 +2055,7 @@ namespace NLGUI
_UL.push_back(HTMLOListElement(start, type)); _UL.push_back(HTMLOListElement(start, type));
// if LI is already present // if LI is already present
_LI = _UL.size() > 1 || getDL(); _LI = _UL.size() > 1 || _DL.size() > 1;
_Indent += ULIndent; _Indent += ULIndent;
endParagraph(); endParagraph();
} }
@ -2237,41 +2242,44 @@ namespace NLGUI
} }
break; break;
case HTML_DL: case HTML_DL:
if (getDL()) if (!_DL.empty())
{ {
endParagraph(); endParagraph();
if (getDL())
// unclosed DT
if (_DL.back().DT)
{
popIfNotEmpty (_FontWeight);
}
// unclosed DD
if (_DL.back().DD)
{ {
if (_Indent > ULIndent) if (_Indent > ULIndent)
_Indent = _Indent - ULIndent; _Indent = _Indent - ULIndent;
else else
_Indent = 0; _Indent = 0;
} }
popIfNotEmpty (_DL); popIfNotEmpty (_DL);
if (_DT) {
_DT = false;
popIfNotEmpty (_FontWeight);
}
} }
break; break;
case HTML_DT: case HTML_DT:
if (getDL()) if (!_DL.empty())
{ {
if (_DT) _DL.back().DT = false;
{ popIfNotEmpty (_FontWeight);
_DT = false;
popIfNotEmpty (_FontWeight);
}
} }
break; break;
case HTML_DD: case HTML_DD:
// style not changed if (!_DL.empty())
if (getDL())
{ {
if (_Indent > ULIndent) if (_Indent > ULIndent)
_Indent = _Indent - ULIndent; _Indent = _Indent - ULIndent;
else else
_Indent = 0; _Indent = 0;
_DL.back().DD = false;
} }
break; break;
case HTML_SPAN: case HTML_SPAN:
@ -2383,7 +2391,6 @@ namespace NLGUI
_CurrentViewImage = NULL; _CurrentViewImage = NULL;
_Indent = 0; _Indent = 0;
_LI = false; _LI = false;
_DT = false;
_SelectOption = false; _SelectOption = false;
_GroupListAdaptor = NULL; _GroupListAdaptor = NULL;
_UrlFragment.clear(); _UrlFragment.clear();
@ -4062,7 +4069,6 @@ namespace NLGUI
_FontStrikeThrough.clear(); _FontStrikeThrough.clear();
_Indent = 0; _Indent = 0;
_LI = false; _LI = false;
_DT = false;
_UL.clear(); _UL.clear();
_DL.clear(); _DL.clear();
_A.clear(); _A.clear();