102 auto legal_ascii = [](
const uint value) {
103 const uint start_ascii_subset{ 32 };
104 const uint end_ascii_subset{ 126 };
106 return value >= start_ascii_subset && value <= end_ascii_subset;
110 bool inAlphaNum{
false};
111 bool has_non_alnum_content{
false };
116 for (
const auto &c : str) {
117 char16_t u = c.unicode();
119 has_non_alnum_content =
true;
120 if (u >=
'A' && u <=
'Z')
122 if ((u >=
'a' && u <=
'z') || (u >=
'0' && u <=
'9')) {
123 result += QLatin1Char(u);
125 }
else if (u ==
'-') {
127 if (result.endsWith(
' '))
130 result += QLatin1Char(u);
132 }
else if (inAlphaNum || (!result.endsWith(
' ') && !result.endsWith(
'-'))) {
135 result += QLatin1Char(
' ');
143 result = result.trimmed();
144 result.replace(QLatin1Char(
' '), QLatin1Char(
'-'));
146 if (has_non_alnum_content) {
147 auto title_hash = QString::fromLocal8Bit(
148 QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5).toHex());
149 title_hash.truncate(8);
150 if (!result.isEmpty())
151 result.append(QLatin1Char(
'-'));
152 result.append(title_hash);
Pure string helpers with no dependencies on QDoc driver types.
QString protect(const QString &string)
QString asAsciiPrintable(const QString &name)
Returns an ASCII-printable representation of str, preserving alphanumeric (alnum) characters ([a-zA-Z...
QString separator(qsizetype wordPosition, qsizetype numberOfWords)
QString comma(qsizetype wordPosition, qsizetype numberOfWords)