string.h
author rubidium
Mon, 28 May 2007 22:11:42 +0000
branch0.5
changeset 5504 520481b11c2c
parent 5470 9fce095970bb
permissions -rw-r--r--
(svn r9968) [0.5] -Backport from trunk (r9966):
- Fix: bridges and tunnels were not always removed on bankruptcy, thus leaving tunnels/bridges with an invalid owner that would crash the game when clicking with the query tool on them.
2186
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1317
diff changeset
     1
/* $Id$ */
461a2aff3486 (svn r2701) Insert Id tags into all source files
tron
parents: 1317
diff changeset
     2
1317
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
     3
#ifndef STRING_H
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
     4
#define STRING_H
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
     5
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
     6
#include "macros.h"
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
     7
1317
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
     8
/*
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
     9
 * dst: destination buffer
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    10
 * src: string to copy/concatenate
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    11
 * size: size of the destination buffer
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    12
 * usage: ttd_strlcpy(dst, src, lengthof(dst));
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    13
 */
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    14
void ttd_strlcat(char *dst, const char *src, size_t size);
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    15
void ttd_strlcpy(char *dst, const char *src, size_t size);
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    16
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    17
/*
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    18
 * dst: destination buffer
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    19
 * src: string to copy
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    20
 * last: pointer to the last element in the dst array
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    21
 *       if NULL no boundary check is performed
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    22
 * returns a pointer to the terminating \0 in the destination buffer
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    23
 * usage: strecpy(dst, src, lastof(dst));
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    24
 */
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    25
char* strecat(char* dst, const char* src, const char* last);
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    26
char* strecpy(char* dst, const char* src, const char* last);
f382f1b439c7 (svn r1821) Move generic string handling functions to string.[ch] and introduce stre{cpy,cat}, see string.h for their semantics
tron
parents:
diff changeset
    27
2234
d44294cfea36 (svn r2754) Move str_fmt into string.[ch]
tron
parents: 2186
diff changeset
    28
char* CDECL str_fmt(const char* str, ...);
d44294cfea36 (svn r2754) Move str_fmt into string.[ch]
tron
parents: 2186
diff changeset
    29
2775
d3ed38a97250 (svn r3322) - Fix: Network window crash when it receives invalid information for example from the integrated nightly, so validate the network-input when it is received
Darkvater
parents: 2436
diff changeset
    30
/** Scans the string for valid characters and if it finds invalid ones,
d3ed38a97250 (svn r3322) - Fix: Network window crash when it receives invalid information for example from the integrated nightly, so validate the network-input when it is received
Darkvater
parents: 2436
diff changeset
    31
 * replaces them with a question mark '?' */
d3ed38a97250 (svn r3322) - Fix: Network window crash when it receives invalid information for example from the integrated nightly, so validate the network-input when it is received
Darkvater
parents: 2436
diff changeset
    32
void str_validate(char *str);
d3ed38a97250 (svn r3322) - Fix: Network window crash when it receives invalid information for example from the integrated nightly, so validate the network-input when it is received
Darkvater
parents: 2436
diff changeset
    33
5101
797a070e5b22 (svn r7172) -Fix [r6931]: The console showed '?' characters instead of colours. Now strip all
Darkvater
parents: 4300
diff changeset
    34
/** Scans the string for colour codes and strips them */
797a070e5b22 (svn r7172) -Fix [r6931]: The console showed '?' characters instead of colours. Now strip all
Darkvater
parents: 4300
diff changeset
    35
void str_strip_colours(char *str);
797a070e5b22 (svn r7172) -Fix [r6931]: The console showed '?' characters instead of colours. Now strip all
Darkvater
parents: 4300
diff changeset
    36
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    37
/**
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    38
 * Valid filter types for IsValidChar.
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    39
 */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    40
typedef enum CharSetFilter {
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    41
	CS_ALPHANUMERAL,      //! Both numeric and alphabetic and spaces and stuff
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    42
	CS_NUMERAL,           //! Only numeric ones
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    43
	CS_ALPHA,             //! Only alphabetic values
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    44
} CharSetFilter;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    45
5164
a4fb0ede4ce5 (svn r7271) -Codechange: Revert the strtolower part of r7199 as it can actually become broken due to
Darkvater
parents: 5108
diff changeset
    46
/** Convert the given string to lowercase, only works with ASCII! */
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    47
void strtolower(char *str);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    48
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    49
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    50
/** Get the length of a string, within a limited buffer */
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    51
static inline int ttd_strnlen(const char *str, int maxlen)
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    52
{
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    53
	const char *t;
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    54
	for (t = str; *t != '\0' && t - str < maxlen; t++);
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    55
	return t - str;
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    56
}
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    57
5416
87d5e006851b (svn r8180) -Backport from trunk (r8093, r8094, r8105, r8106, (r8107), r8111, r8165):
Darkvater
parents: 5317
diff changeset
    58
/** Convert the md5sum number to a 'hexadecimal' string, return next pos in buffer */
87d5e006851b (svn r8180) -Backport from trunk (r8093, r8094, r8105, r8106, (r8107), r8111, r8165):
Darkvater
parents: 5317
diff changeset
    59
char *md5sumToString(char *buf, const char *last, const uint8 md5sum[16]);
5317
e235a3a573e3 (svn r7475) -Fix (r7348): sanity check NewGRF action 8 strings for null terminator
peter1138
parents: 5164
diff changeset
    60
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    61
typedef uint32 WChar;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    62
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    63
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    64
 * Only allow certain keys. You can define the filter to be used. This makes
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    65
 *  sure no invalid keys can get into an editbox, like BELL.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    66
 * @param key character to be checked
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    67
 * @param afilter the filter to use
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    68
 * @return true or false depending if the character is printable/valid or not
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    69
 */
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    70
bool IsValidChar(WChar key, CharSetFilter afilter);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents: 4299
diff changeset
    71
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    72
size_t Utf8Decode(WChar *c, const char *s);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    73
size_t Utf8Encode(char *buf, WChar c);
5470
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
    74
size_t Utf8TrimString(char *s, size_t maxlen);
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    75
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    76
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    77
static inline WChar Utf8Consume(const char **s)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    78
{
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    79
	WChar c;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    80
	*s += Utf8Decode(&c, *s);
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    81
	return c;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    82
}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    83
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    84
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    85
/** Return the length of a UTF-8 encoded character.
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    86
 * @param c Unicode character.
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    87
 * @return Length of UTF-8 encoding for character.
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    88
 */
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    89
static inline size_t Utf8CharLen(WChar c)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    90
{
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    91
	if (c < 0x80)       return 1;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    92
	if (c < 0x800)      return 2;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    93
	if (c < 0x10000)    return 3;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    94
	if (c < 0x110000)   return 4;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    95
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    96
	/* Invalid valid, we encode as a '?' */
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    97
	return 1;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    98
}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
    99
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   100
5470
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   101
/**
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   102
 * Return the length of an UTF-8 encoded value based on a single char. This
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   103
 * char should be the first byte of the UTF-8 encoding. If not, or encoding
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   104
 * is invalid, return value is 0
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   105
 */
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   106
static inline size_t Utf8EncodedCharLen(char c)
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   107
{
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   108
	if (GB(c, 3, 5) == 0x1E) return 4;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   109
	if (GB(c, 4, 4) == 0x0E) return 3;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   110
	if (GB(c, 5, 3) == 0x06) return 2;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   111
	if (GB(c, 7, 1) == 0x00) return 1;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   112
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   113
	/* Invalid UTF8 start encoding */
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   114
	return 0;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   115
}
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   116
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   117
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   118
/* Check if the given character is part of a UTF8 sequence */
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   119
static inline bool IsUtf8Part(char c)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   120
{
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   121
	return GB(c, 6, 2) == 2;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   122
}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   123
5470
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   124
/**
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   125
 * Retrieve the previous UNICODE character in an UTF-8 encoded string.
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   126
 * @param s char pointer pointing to (the first char of) the next character
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   127
 * @returns a pointer in 's' to the previous UNICODE character's first byte
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   128
 * @note The function should not be used to determine the length of the previous
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   129
 * encoded char because it might be an invalid/corrupt start-sequence
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   130
 */
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   131
static inline char *Utf8PrevChar(const char *s)
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   132
{
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   133
	const char *ret = s;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   134
	while (IsUtf8Part(*--ret));
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   135
	return (char*)ret;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   136
}
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   137
5108
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   138
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   139
static inline bool IsPrintable(WChar c)
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   140
{
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   141
	if (c < 0x20)   return false;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   142
	if (c < 0xE000) return true;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   143
	if (c < 0xE200) return false;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   144
	return true;
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   145
}
dc67d70b5a45 (svn r7182) -Feature: Merge utf8 branch. This brings us support for Unicode/UTF-8 and the option for fonts rendered by FreeType. Language changes to come.
peter1138
parents: 5101
diff changeset
   146
5470
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   147
/**
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   148
 * Check whether UNICODE character is whitespace or not
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   149
 * @param c UNICODE character to check
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   150
 * @return a boolean value whether 'c' is a whitespace character or not
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   151
 * @see http://www.fileformat.info/info/unicode/category/Zs/list.htm
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   152
 */
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   153
static inline bool IsWhitespace(WChar c)
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   154
{
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   155
	return
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   156
	  c == 0x0020 /* SPACE */ ||
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   157
	  c == 0x00A0 /* NO-BREAK SPACE */ ||
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   158
	  c == 0x3000 /* IDEOGRAPHIC SPACE */
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   159
	;
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   160
}
9fce095970bb (svn r9354) [0.5] -Backport from trunk (r8975, r9003, r9011, r9012):
glx
parents: 5416
diff changeset
   161
4200
a45420ba0c23 (svn r5684) - Codechange: create an strtolower() function that uses tolower() on a whole string and apply it in the places this was used.
Darkvater
parents: 2775
diff changeset
   162
2436
177cb6a8339f (svn r2962) - const correctness for all Get* functions and most Draw* functions that don't change their pointer parameters
Darkvater
parents: 2234
diff changeset
   163
#endif /* STRING_H */