Add italic text support (#527)
This commit is contained in:
@@ -215,6 +215,7 @@
|
|||||||
## - 9 - end of current color
|
## - 9 - end of current color
|
||||||
## - b - bold text
|
## - b - bold text
|
||||||
## - u - underline text
|
## - u - underline text
|
||||||
|
## - i - italic text
|
||||||
## - r - reverse colors
|
## - r - reverse colors
|
||||||
## - a - use alternative character set
|
## - a - use alternative character set
|
||||||
##
|
##
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ void verifyFormats(const NC::FormattedColor::Formats &formats)
|
|||||||
if (fmt == NC::Format::NoBold
|
if (fmt == NC::Format::NoBold
|
||||||
|| fmt == NC::Format::NoUnderline
|
|| fmt == NC::Format::NoUnderline
|
||||||
|| fmt == NC::Format::NoReverse
|
|| fmt == NC::Format::NoReverse
|
||||||
|| fmt == NC::Format::NoAltCharset)
|
|| fmt == NC::Format::NoAltCharset
|
||||||
|
|| fmt == NC::Format::NoItalic)
|
||||||
throw std::logic_error("FormattedColor can't hold disabling formats");
|
throw std::logic_error("FormattedColor can't hold disabling formats");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,6 +72,9 @@ std::istream &NC::operator>>(std::istream &is, NC::FormattedColor &fc)
|
|||||||
case 'a':
|
case 'a':
|
||||||
formats.push_back(NC::Format::AltCharset);
|
formats.push_back(NC::Format::AltCharset);
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
formats.push_back(NC::Format::Italic);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
is.setstate(std::ios::failbit);
|
is.setstate(std::ios::failbit);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -346,6 +346,10 @@ NC::Format reverseFormat(NC::Format fmt)
|
|||||||
return NC::Format::NoAltCharset;
|
return NC::Format::NoAltCharset;
|
||||||
case NC::Format::NoAltCharset:
|
case NC::Format::NoAltCharset:
|
||||||
return NC::Format::AltCharset;
|
return NC::Format::AltCharset;
|
||||||
|
case NC::Format::Italic:
|
||||||
|
return NC::Format::NoItalic;
|
||||||
|
case NC::Format::NoItalic:
|
||||||
|
return NC::Format::Italic;
|
||||||
}
|
}
|
||||||
// Unreachable, silence GCC.
|
// Unreachable, silence GCC.
|
||||||
return fmt;
|
return fmt;
|
||||||
@@ -494,7 +498,8 @@ Window::Window(size_t startx, size_t starty, size_t width, size_t height,
|
|||||||
m_bold_counter(0),
|
m_bold_counter(0),
|
||||||
m_underline_counter(0),
|
m_underline_counter(0),
|
||||||
m_reverse_counter(0),
|
m_reverse_counter(0),
|
||||||
m_alt_charset_counter(0)
|
m_alt_charset_counter(0),
|
||||||
|
m_italic_counter(0)
|
||||||
{
|
{
|
||||||
if (m_start_x > size_t(COLS)
|
if (m_start_x > size_t(COLS)
|
||||||
|| m_start_y > size_t(LINES)
|
|| m_start_y > size_t(LINES)
|
||||||
@@ -542,6 +547,7 @@ Window::Window(const Window &rhs)
|
|||||||
, m_underline_counter(rhs.m_underline_counter)
|
, m_underline_counter(rhs.m_underline_counter)
|
||||||
, m_reverse_counter(rhs.m_reverse_counter)
|
, m_reverse_counter(rhs.m_reverse_counter)
|
||||||
, m_alt_charset_counter(rhs.m_alt_charset_counter)
|
, m_alt_charset_counter(rhs.m_alt_charset_counter)
|
||||||
|
, m_italic_counter(rhs.m_italic_counter)
|
||||||
{
|
{
|
||||||
setColor(m_color);
|
setColor(m_color);
|
||||||
}
|
}
|
||||||
@@ -566,6 +572,7 @@ Window::Window(Window &&rhs)
|
|||||||
, m_underline_counter(rhs.m_underline_counter)
|
, m_underline_counter(rhs.m_underline_counter)
|
||||||
, m_reverse_counter(rhs.m_reverse_counter)
|
, m_reverse_counter(rhs.m_reverse_counter)
|
||||||
, m_alt_charset_counter(rhs.m_alt_charset_counter)
|
, m_alt_charset_counter(rhs.m_alt_charset_counter)
|
||||||
|
, m_italic_counter(rhs.m_italic_counter)
|
||||||
{
|
{
|
||||||
rhs.m_window = nullptr;
|
rhs.m_window = nullptr;
|
||||||
}
|
}
|
||||||
@@ -591,6 +598,7 @@ Window &Window::operator=(Window rhs)
|
|||||||
std::swap(m_underline_counter, rhs.m_underline_counter);
|
std::swap(m_underline_counter, rhs.m_underline_counter);
|
||||||
std::swap(m_reverse_counter, rhs.m_reverse_counter);
|
std::swap(m_reverse_counter, rhs.m_reverse_counter);
|
||||||
std::swap(m_alt_charset_counter, rhs.m_alt_charset_counter);
|
std::swap(m_alt_charset_counter, rhs.m_alt_charset_counter);
|
||||||
|
std::swap(m_italic_counter, rhs.m_italic_counter);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -780,6 +788,11 @@ void Window::altCharset(bool altcharset_state) const
|
|||||||
(altcharset_state ? wattron : wattroff)(m_window, A_ALTCHARSET);
|
(altcharset_state ? wattron : wattroff)(m_window, A_ALTCHARSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::italic(bool italic_state) const
|
||||||
|
{
|
||||||
|
(italic_state ? wattron : wattroff)(m_window, A_ITALIC);
|
||||||
|
}
|
||||||
|
|
||||||
void Window::setTimeout(int timeout)
|
void Window::setTimeout(int timeout)
|
||||||
{
|
{
|
||||||
m_window_timeout = timeout;
|
m_window_timeout = timeout;
|
||||||
@@ -1413,6 +1426,12 @@ Window &Window::operator<<(Format format)
|
|||||||
case Format::NoAltCharset:
|
case Format::NoAltCharset:
|
||||||
decrease_flag(*this, m_alt_charset_counter, &Window::altCharset);
|
decrease_flag(*this, m_alt_charset_counter, &Window::altCharset);
|
||||||
break;
|
break;
|
||||||
|
case Format::Italic:
|
||||||
|
increase_flag(*this, m_italic_counter, &Window::italic);
|
||||||
|
break;
|
||||||
|
case Format::NoItalic:
|
||||||
|
decrease_flag(*this, m_italic_counter, &Window::italic);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,8 @@ enum class Format {
|
|||||||
Bold, NoBold,
|
Bold, NoBold,
|
||||||
Underline, NoUnderline,
|
Underline, NoUnderline,
|
||||||
Reverse, NoReverse,
|
Reverse, NoReverse,
|
||||||
AltCharset, NoAltCharset
|
AltCharset, NoAltCharset,
|
||||||
|
Italic, NoItalic
|
||||||
};
|
};
|
||||||
|
|
||||||
NC::Format reverseFormat(NC::Format fmt);
|
NC::Format reverseFormat(NC::Format fmt);
|
||||||
@@ -531,6 +532,11 @@ private:
|
|||||||
/// @param altcharset_state state of altcharset attribute
|
/// @param altcharset_state state of altcharset attribute
|
||||||
///
|
///
|
||||||
void altCharset(bool altcharset_state) const;
|
void altCharset(bool altcharset_state) const;
|
||||||
|
|
||||||
|
/// Sets state of italic attribute (internal use only)
|
||||||
|
/// @param italic_state state of italic attribute
|
||||||
|
///
|
||||||
|
void italic(bool italic_state) const;
|
||||||
|
|
||||||
/// pointer to helper function used by getString()
|
/// pointer to helper function used by getString()
|
||||||
/// @see getString()
|
/// @see getString()
|
||||||
@@ -562,6 +568,7 @@ private:
|
|||||||
int m_underline_counter;
|
int m_underline_counter;
|
||||||
int m_reverse_counter;
|
int m_reverse_counter;
|
||||||
int m_alt_charset_counter;
|
int m_alt_charset_counter;
|
||||||
|
int m_italic_counter;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,6 +192,8 @@ expressions<CharT> parseBracket(const string<CharT> &s,
|
|||||||
result.push_back(NC::Format::AltCharset);
|
result.push_back(NC::Format::AltCharset);
|
||||||
else if (flags & Format::Flags::Format && *it == 'r')
|
else if (flags & Format::Flags::Format && *it == 'r')
|
||||||
result.push_back(NC::Format::Reverse);
|
result.push_back(NC::Format::Reverse);
|
||||||
|
else if (flags & Format::Flags::Format && *it == 'i')
|
||||||
|
result.push_back(NC::Format::Italic);
|
||||||
else if (flags & Format::Flags::Format && *it == '/')
|
else if (flags & Format::Flags::Format && *it == '/')
|
||||||
{
|
{
|
||||||
++it;
|
++it;
|
||||||
@@ -204,6 +206,8 @@ expressions<CharT> parseBracket(const string<CharT> &s,
|
|||||||
result.push_back(NC::Format::NoAltCharset);
|
result.push_back(NC::Format::NoAltCharset);
|
||||||
else if (*it == 'r')
|
else if (*it == 'r')
|
||||||
result.push_back(NC::Format::NoReverse);
|
result.push_back(NC::Format::NoReverse);
|
||||||
|
else if (*it == 'i')
|
||||||
|
result.push_back(NC::Format::NoItalic);
|
||||||
else
|
else
|
||||||
throwError(s, it, invalidCharacter(*it));
|
throwError(s, it, invalidCharacter(*it));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user