As defined in [1], format code 0x1e indicates text that is struck
through. Add support for rendering this accordingly.
Extend the stylesheet parser so the format can be defined, and
add to the default stylesheet.
[1] https://modern.ircdocs.horse/formatting.html#strikethrough
ChatLine[bg-color="0f"] { background: #c0c0c0; }
// mIRC formats
ChatLine[bg-color="0f"] { background: #c0c0c0; }
// mIRC formats
-ChatLine[format="bold"] { font-weight: bold; }
-ChatLine[format="italic"] { font-style: italic; }
-ChatLine[format="underline"] { font-style: underline; }
+ChatLine[format="bold"] { font-weight: bold; }
+ChatLine[format="italic"] { font-style: italic; }
+ChatLine[format="underline"] { font-style: underline; }
+ChatLine[format="strikethrough"] { font-style: strikethrough; }
// ChatView message colors
ChatLine#notice { foreground: #916409; }
// ChatView message colors
ChatLine#notice { foreground: #916409; }
fmtType |= FormatType::Italic;
else if (condValue == "underline")
fmtType |= FormatType::Underline;
fmtType |= FormatType::Italic;
else if (condValue == "underline")
fmtType |= FormatType::Underline;
+ else if (condValue == "strikethrough")
+ fmtType |= FormatType::Strikethrough;
else {
qWarning() << Q_FUNC_INFO << tr("Invalid format name: %1").arg(condValue);
return invalid;
else {
qWarning() << Q_FUNC_INFO << tr("Invalid format name: %1").arg(condValue);
return invalid;
void QssParser::parseFont(const QString &value, QTextCharFormat *format)
{
void QssParser::parseFont(const QString &value, QTextCharFormat *format)
{
- static const QRegExp rx("((?:(?:normal|italic|oblique|underline|bold|100|200|300|400|500|600|700|800|900) ){0,2}) ?(\\d+)(pt|px)? \"(.*)\"");
+ static const QRegExp rx("((?:(?:normal|italic|oblique|underline|strikethrough|bold|100|200|300|400|500|600|700|800|900) ){0,2}) ?(\\d+)(pt|px)? \"(.*)\"");
if (!rx.exactMatch(value)) {
qWarning() << Q_FUNC_INFO << tr("Invalid font specification: %1").arg(value);
return;
if (!rx.exactMatch(value)) {
qWarning() << Q_FUNC_INFO << tr("Invalid font specification: %1").arg(value);
return;
format->setFontItalic(true);
else if (prop == "underline")
format->setFontUnderline(true);
format->setFontItalic(true);
else if (prop == "underline")
format->setFontUnderline(true);
+ // Oblique is not a property supported by QTextCharFormat
//else if(prop == "oblique")
// format->setStyle(QFont::StyleOblique);
else if (prop == "bold")
//else if(prop == "oblique")
// format->setStyle(QFont::StyleOblique);
else if (prop == "bold")
format->setFontItalic(true);
else if (value == "underline")
format->setFontUnderline(true);
format->setFontItalic(true);
else if (value == "underline")
format->setFontUnderline(true);
+ else if (value == "strikethrough")
+ format->setFontStrikeOut(true);
+ // Oblique is not a property supported by QTextCharFormat
//else if(value == "oblique")
// format->setStyle(QFont::StyleOblique);
else {
//else if(value == "oblique")
// format->setStyle(QFont::StyleOblique);
else {
// Now initialize the mapping between FormatCodes and FormatTypes...
_formatCodes["%O"] = FormatType::Base;
_formatCodes["%B"] = FormatType::Bold;
// Now initialize the mapping between FormatCodes and FormatTypes...
_formatCodes["%O"] = FormatType::Base;
_formatCodes["%B"] = FormatType::Bold;
- _formatCodes["%S"] = FormatType::Italic;
+ _formatCodes["%I"] = FormatType::Italic;
_formatCodes["%U"] = FormatType::Underline;
_formatCodes["%U"] = FormatType::Underline;
+ _formatCodes["%S"] = FormatType::Strikethrough;
_formatCodes["%DN"] = FormatType::Nick;
_formatCodes["%DH"] = FormatType::Hostmask;
_formatCodes["%DN"] = FormatType::Nick;
_formatCodes["%DH"] = FormatType::Hostmask;
mirc += "%R";
break;
case '\x1d':
mirc += "%R";
break;
case '\x1d':
+ mirc += "%I";
+ break;
+ case '\x1e':
mirc += "%S";
break;
case '\x1f':
mirc += "%S";
break;
case '\x1f':
Bold = 0x00000100,
Italic = 0x00000200,
Underline = 0x00000400,
Bold = 0x00000100,
Italic = 0x00000200,
Underline = 0x00000400,
+ Strikethrough = 0x00000800,
// Individual parts of a message
Timestamp = 0x00001000,
// Individual parts of a message
Timestamp = 0x00001000,