std::iswgraph(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌈 std::iswgraph(3) 🌈

okay so this is the std::iswgraph(3) page from the C++ Standard Libary manual β€” yes, that's literally how the header spells it, and we're moving on πŸ’€. It's the C++ Standard Library's wide-character graph check, and it's giving "tiny function, big locale energy." πŸ’…

πŸ’– NAME πŸ’–

std::iswgraph β€” std::iswgraph (the NAME section said what it said, bestie 🫢).

✨ Synopsis ✨

Defined in header <cwctype>:

int iswgraph( std::wint_t ch );

Checks if the given wide character has a graphical representation, i.e. it is either:

  • a number (0123456789),
  • an uppercase letter (ABCDEFGHIJKLMNOPQRSTUVWXYZ),
  • a lowercase letter (abcdefghijklmnopqrstuvwxyz),
  • a punctuation character (!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~), or
  • any graphical character specific to the current C locale.
🚨 If the value of ch is neither representable as a wchar_t nor equal to the value of the macro WEOF, the behavior is undefined. Like, do not test fate with that one, bestie.

🌸 Parameters 🌸

  • ch β€” wide character.

πŸŽ€ Return value πŸŽ€

Non-zero value if the wide character has a graphical representation character, zero otherwise.

πŸ¦‹ Notes πŸ¦‹

ISO 30112 specifies which Unicode characters are include in the POSIX graph category. (That's the note, periodt.)

πŸ’… Example πŸ’…

// Run this code

#include <clocale>
#include <cwctype>
#include <iostream>

int main()
{
    wchar_t c = L'\u2602'; // the Unicode character Umbrella ('β˜‚')

    std::cout << std::hex << std::showbase << std::boolalpha
              << "in the default locale, iswgraph("
              << static_cast<std::wint_t>(c) << ") = "
              << static_cast<bool>(std::iswgraph(c)) << '\n';

    std::setlocale(LC_ALL, "en_US.utf8");
    std::cout << "in Unicode locale, iswgraph("
              << static_cast<std::wint_t>(c) << ") = "
              << static_cast<bool>(std::iswgraph(c)) << '\n';
}

πŸ“ Output πŸ“

in the default locale, iswgraph(0x2602) = false
in Unicode locale, iswgraph(0x2602) = true

πŸ‘‘ See also πŸ‘‘

  • isgraph(std::locale) β€” checks if a character is classified as graphical by a locale (function template).
  • isgraph β€” checks if a character is a graphical character (function).
  • C documentation for iswgraph.

and because we do not skip the iconic data, here's the whole ASCII values table from the page, preserved in all its chaotic glory 🫢:

               ASCII values            characters    iscntrl  isprint  isspace
       isblank  isgraph  ispunct  isalnum  isalpha  isupper  islower  isdigit
       isxdigit decimal hexadecimal   octal                   iswcntrl iswprint
       iswspace iswblank iswgraph iswpunct iswalnum iswalpha iswupper iswlower
       iswdigit iswxdigit 0–8     \x0–\x8     \0–\10    control codes   β‰ 0
       0        0        0        0        0        0        0        0
       0        0        0
                                     (NUL, etc.)  9       \x9         \11
       tab (\t)        β‰ 0       0        β‰ 0       β‰ 0       0        0        0
       0        0        0        0        0
                                     whitespaces 10–13   \xA–\xD     \12–\15
       (\n, \v, \f,    β‰ 0       0        β‰ 0       0        0        0        0
       0        0        0        0        0
                                     \r) 14–31   \xE–\x1F    \16–\37   control
       codes   β‰ 0       0        0        0        0        0        0        0
       0        0        0        0 32      \x20        \40       space
       0        β‰ 0       β‰ 0       β‰ 0       0        0        0        0
       0        0        0        0 33–47   \x21–\x2F   \41–\57
       !"#$%&'()*+,-./ 0        β‰ 0       0        0        β‰ 0       β‰ 0       0
       0        0        0        0        0 48–57   \x30–\x39   \60–\71
       0123456789      0        β‰ 0       0        0        β‰ 0       0        β‰ 0
       0        0        0        β‰ 0       β‰ 0 58–64   \x3A–\x40   \72–\100
       :;<=>?@         0        β‰ 0       0        0        β‰ 0       β‰ 0       0
       0        0        0        0        0 65–70   \x41–\x46   \101–\106
       ABCDEF          0        β‰ 0       0        0        β‰ 0       0        β‰ 0
       β‰ 0       β‰ 0       0        0        β‰ 0 71–90   \x47–\x5A   \107–\132
       GHIJKLMNOP      0        β‰ 0       0        0        β‰ 0       0        β‰ 0
       β‰ 0       β‰ 0       0        0        0
                                     QRSTUVWXYZ 91–96   \x5B–\x60   \133–\140
       [\]^_`          0        β‰ 0       0        0        β‰ 0       β‰ 0       0
       0        0        0        0        0 97–102  \x61–\x66   \141–\146
       abcdef          0        β‰ 0       0        0        β‰ 0       0        β‰ 0
       β‰ 0       0        β‰ 0       0        β‰ 0 103–122 \x67–\x7A   \147–\172
       ghijklmnop      0        β‰ 0       0        0        β‰ 0       0        β‰ 0
       β‰ 0       0        β‰ 0       0        0
                                     qrstuvwxyz 123–126 \x7B–\x7E   \172–\176
       {|}~            0        β‰ 0       0        0        β‰ 0       β‰ 0       0
       0        0        0        0        0 127     \x7F        \177
       backspace       β‰ 0       0        0        0        0        0        0
       0        0        0        0        0
                                     character (DEL)

mwah πŸ’‹ β€” signing off from http://cppreference.com, stamped 2024.06.10, for std::iswgraph(3). bye bestie! πŸ’–βœ¨

πŸ“¦ where this page comes from