enhanced proxying to handle protocol upgrade.

enhanced qse_mbsword() and its family to accept an extra delimiter
This commit is contained in:
2014-10-08 14:07:55 +00:00
parent 8a32cbc4f1
commit 1df4e0bc9f
10 changed files with 310 additions and 187 deletions

View File

@ -21,32 +21,34 @@
#include <qse/cmn/str.h>
#include <qse/cmn/chr.h>
const qse_mchar_t* qse_mbsword (
const qse_mchar_t* str, const qse_mchar_t* word)
#define IS_MDELIM(x,delim) (QSE_ISMSPACE(x) || (x) == delim)
#define IS_WDELIM(x,delim) (QSE_ISWSPACE(x) || (x) == delim)
const qse_mchar_t* qse_mbsword (const qse_mchar_t* str, const qse_mchar_t* word, qse_mchar_t extra_delim)
{
/* find a full word in a string */
const qse_mchar_t* ptr = str;
if (extra_delim == QSE_MT('\0')) extra_delim = QSE_MT(' ');
do
{
const qse_mchar_t* s;
while (QSE_ISMSPACE(*ptr)) ptr++;
while (IS_MDELIM(*ptr,extra_delim)) ptr++;
if (*ptr == QSE_MT('\0')) return QSE_NULL;
s = ptr;
while (*ptr != QSE_MT('\0') && !QSE_ISMSPACE(*ptr)) ptr++;
while (*ptr != QSE_MT('\0') && !IS_MDELIM(*ptr,extra_delim)) ptr++;
if (qse_mbsxcmp (s, ptr-s, word) == 0) return s;
if (qse_mbsxcmp (s, ptr - s, word) == 0) return s;
}
while (*ptr != QSE_MT('\0'));
return QSE_NULL;
}
const qse_mchar_t* qse_mbsxword (
const qse_mchar_t* str, qse_size_t len, const qse_mchar_t* word)
const qse_mchar_t* qse_mbsxword (const qse_mchar_t* str, qse_size_t len, const qse_mchar_t* word, qse_mchar_t extra_delim)
{
/* find a full word in a string */
@ -54,93 +56,93 @@ const qse_mchar_t* qse_mbsxword (
const qse_mchar_t* end = str + len;
const qse_mchar_t* s;
if (extra_delim == QSE_MT('\0')) extra_delim = QSE_MT(' ');
do
{
while (ptr < end && QSE_ISMSPACE(*ptr)) ptr++;
while (ptr < end && IS_MDELIM(*ptr,extra_delim)) ptr++;
if (ptr >= end) return QSE_NULL;
s = ptr;
while (ptr < end && !QSE_ISMSPACE(*ptr)) ptr++;
while (ptr < end && !IS_MDELIM(*ptr,extra_delim)) ptr++;
if (qse_mbsxcmp (s, ptr-s, word) == 0) return s;
if (qse_mbsxcmp (s, ptr - s, word) == 0) return s;
}
while (ptr < end);
return QSE_NULL;
}
const qse_mchar_t* qse_mbscaseword (
const qse_mchar_t* str, const qse_mchar_t* word)
const qse_mchar_t* qse_mbscaseword (const qse_mchar_t* str, const qse_mchar_t* word, qse_mchar_t extra_delim)
{
/* find a full word in a string */
const qse_mchar_t* ptr = str;
if (extra_delim == QSE_MT('\0')) extra_delim = QSE_MT(' ');
do
{
const qse_mchar_t* s;
while (QSE_ISMSPACE(*ptr)) ptr++;
while (IS_MDELIM(*ptr,extra_delim)) ptr++;
if (*ptr == QSE_MT('\0')) return QSE_NULL;
s = ptr;
while (*ptr != QSE_MT('\0') && !QSE_ISMSPACE(*ptr)) ptr++;
while (*ptr != QSE_MT('\0') && !IS_MDELIM(*ptr,extra_delim)) ptr++;
if (qse_mbsxcasecmp (s, ptr-s, word) == 0) return s;
if (qse_mbsxcasecmp (s, ptr - s, word) == 0) return s;
}
while (*ptr != QSE_MT('\0'));
return QSE_NULL;
}
const qse_mchar_t* qse_mbsxcaseword (
const qse_mchar_t* str, qse_size_t len, const qse_mchar_t* word)
const qse_mchar_t* qse_mbsxcaseword (const qse_mchar_t* str, qse_size_t len, const qse_mchar_t* word, qse_mchar_t extra_delim)
{
const qse_mchar_t* ptr = str;
const qse_mchar_t* end = str + len;
const qse_mchar_t* s;
if (extra_delim == QSE_MT('\0')) extra_delim = QSE_MT(' ');
do
{
while (ptr < end && QSE_ISMSPACE(*ptr)) ptr++;
while (ptr < end && IS_MDELIM(*ptr,extra_delim)) ptr++;
if (ptr >= end) return QSE_NULL;
s = ptr;
while (ptr < end && !QSE_ISMSPACE(*ptr)) ptr++;
while (ptr < end && !IS_MDELIM(*ptr,extra_delim)) ptr++;
if (qse_mbsxcasecmp (s, ptr-s, word) == 0) return s;
if (qse_mbsxcasecmp (s, ptr - s, word) == 0) return s;
}
while (ptr < end);
return QSE_NULL;
}
const qse_wchar_t* qse_wcsword (
const qse_wchar_t* str, const qse_wchar_t* word)
const qse_wchar_t* qse_wcsword (const qse_wchar_t* str, const qse_wchar_t* word, qse_wchar_t extra_delim)
{
/* find a full word in a string */
const qse_wchar_t* ptr = str;
if (extra_delim == QSE_WT('\0')) extra_delim = QSE_WT(' ');
do
{
const qse_wchar_t* s;
while (QSE_ISWSPACE(*ptr)) ptr++;
while (IS_WDELIM(*ptr,extra_delim)) ptr++;
if (*ptr == QSE_WT('\0')) return QSE_NULL;
s = ptr;
while (*ptr != QSE_WT('\0') && !QSE_ISWSPACE(*ptr)) ptr++;
while (*ptr != QSE_WT('\0') && !IS_WDELIM(*ptr,extra_delim)) ptr++;
if (qse_wcsxcmp (s, ptr-s, word) == 0) return s;
if (qse_wcsxcmp (s, ptr - s, word) == 0) return s;
}
while (*ptr != QSE_WT('\0'));
return QSE_NULL;
}
const qse_wchar_t* qse_wcsxword (
const qse_wchar_t* str, qse_size_t len, const qse_wchar_t* word)
const qse_wchar_t* qse_wcsxword (const qse_wchar_t* str, qse_size_t len, const qse_wchar_t* word, qse_wchar_t extra_delim)
{
/* find a full word in a string */
@ -148,61 +150,62 @@ const qse_wchar_t* qse_wcsxword (
const qse_wchar_t* end = str + len;
const qse_wchar_t* s;
if (extra_delim == QSE_WT('\0')) extra_delim = QSE_WT(' ');
do
{
while (ptr < end && QSE_ISWSPACE(*ptr)) ptr++;
while (ptr < end && IS_WDELIM(*ptr,extra_delim)) ptr++;
if (ptr >= end) return QSE_NULL;
s = ptr;
while (ptr < end && !QSE_ISWSPACE(*ptr)) ptr++;
while (ptr < end && !IS_WDELIM(*ptr,extra_delim)) ptr++;
if (qse_wcsxcmp (s, ptr-s, word) == 0) return s;
if (qse_wcsxcmp (s, ptr - s, word) == 0) return s;
}
while (ptr < end);
return QSE_NULL;
}
const qse_wchar_t* qse_wcscaseword (
const qse_wchar_t* str, const qse_wchar_t* word)
const qse_wchar_t* qse_wcscaseword (const qse_wchar_t* str, const qse_wchar_t* word, qse_wchar_t extra_delim)
{
/* find a full word in a string */
const qse_wchar_t* ptr = str;
if (extra_delim == QSE_WT('\0')) extra_delim = QSE_WT(' ');
do
{
const qse_wchar_t* s;
while (QSE_ISWSPACE(*ptr)) ptr++;
while (IS_WDELIM(*ptr,extra_delim)) ptr++;
if (*ptr == QSE_WT('\0')) return QSE_NULL;
s = ptr;
while (*ptr != QSE_WT('\0') && !QSE_ISWSPACE(*ptr)) ptr++;
while (*ptr != QSE_WT('\0') && !IS_WDELIM(*ptr,extra_delim)) ptr++;
if (qse_wcsxcasecmp (s, ptr-s, word) == 0) return s;
if (qse_wcsxcasecmp (s, ptr - s, word) == 0) return s;
}
while (*ptr != QSE_WT('\0'));
return QSE_NULL;
}
const qse_wchar_t* qse_wcsxcaseword (
const qse_wchar_t* str, qse_size_t len, const qse_wchar_t* word)
const qse_wchar_t* qse_wcsxcaseword (const qse_wchar_t* str, qse_size_t len, const qse_wchar_t* word, qse_wchar_t extra_delim)
{
const qse_wchar_t* ptr = str;
const qse_wchar_t* end = str + len;
const qse_wchar_t* s;
if (extra_delim == QSE_WT('\0')) extra_delim = QSE_WT(' ');
do
{
while (ptr < end && QSE_ISWSPACE(*ptr)) ptr++;
while (ptr < end && IS_WDELIM(*ptr,extra_delim)) ptr++;
if (ptr >= end) return QSE_NULL;
s = ptr;
while (ptr < end && !QSE_ISWSPACE(*ptr)) ptr++;
while (ptr < end && !IS_WDELIM(*ptr,extra_delim)) ptr++;
if (qse_wcsxcasecmp (s, ptr-s, word) == 0) return s;
if (qse_wcsxcasecmp (s, ptr - s, word) == 0) return s;
}
while (ptr < end);