[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] libc: wctype-Makros in Funktionen umgeschrieben



* libc: wctype-Makros in Funktionen umgeschrieben, da configure das so
        erwartet.
+ libc: Ein paar wctype-Makros ergaenzt

Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
---
 src/include/wctype.h             |  121 ++++++++++++++++++++++++---
 src/modules/lib/stdlibc/wctype.c |  172 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 281 insertions(+), 12 deletions(-)
 create mode 100644 src/modules/lib/stdlibc/wctype.c

diff --git a/src/include/wctype.h b/src/include/wctype.h
index 8f21b94..f273a71 100644
--- a/src/include/wctype.h
+++ b/src/include/wctype.h
@@ -29,18 +29,115 @@
 #ifndef _WCTYPE_H_
 #define _WCTYPE_H_
 
-#define iswupper(c) ((c) >= L'A' && (c) <= L'Z')
-#define iswlower(c) ((c) >= L'a' && (c) <= L'z')
-
-static inline wint_t towlower(wint_t c)
-{
-    return iswupper(c) ? c + (L'a' - L'A') : c;
-}
-
-static inline wint_t towupper(wint_t c)
-{
-    return iswlower(c) ? c - (L'a' - L'A') : c;
-}
+#include <wchar.h>
+
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein grosses alphabetisches
+ * Zeichen handelt.
+ * @see iswlower
+ * @see iswalpha
+ * @see towupper
+ * @see towlower
+ * @see isupper
+ */
+int iswupper(wint_t wc);
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein kleines alphabetisches
+ * Zeichen handelt.
+ * @see iswupper
+ * @see iswalpha
+ * @see towlower
+ * @see towupper
+ * @see islower
+ */
+int iswlower(wint_t wc);
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein alphabetisches Zeichen
+ * handelt.
+ * @see iswalnum
+ * @see isalpha
+ */
+int iswalpha(wint_t wc);
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um eine Ziffer handelt.
+ * @see iswalnum
+ * @see isdigit
+ */
+int iswdigit(wint_t wc);
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein alphabetisches Zeichen
+ * oder eine Ziffer handelt.
+ * @see iswalpha
+ * @see iswdigit
+ * @see isalnum
+ */
+int iswalnum(wint_t wc);
+
+/**
+ * Testen ob es sich bei einem Breiten Zeichen um ein Leerzeichen oder ein
+ * Zeilenende handelt.
+ * @see iswblank
+ * @see isblank
+ */
+int iswspace(wint_t wc);
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein Leerzeichen
+ * handelt(einfaches Leerzeichen oder Tab).
+ * @see iswspace
+ * @see isblank
+ */
+int iswblank(wint_t wc);
+
+/**
+ * TODO: Kann man das irgendwie sinnvoll erklaeren, was da alles
+ *       dazugehoert? ;-) Mit Unicode sind das naemlich nicht nur
+ *       Punktuationszeichen sondern auch andere Sonderzeichen.
+ * @see ispunct
+ */
+int iswpunct(wint_t wc);
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein druckbares Zeichen
+ * handelt. Das sind alle Zeichen, die keine Kontrollzeichen(iswcntrl) sind.
+ * @see iswcntrl
+ * @see isprint
+ */
+int iswprint(wint_t wc);
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein Kontrollzeichen(z.B \n, \t
+ * oder \b) handelt. Diese Zeichen wuerden bei einem iswprint-Aufruf 0
+ * zurueckgeben.
+ * @see iswprint
+ * @see iscntrl
+ */
+int iswcntrl(wint_t wc);
+
+
+/**
+ * Breites Zeichen in einen Grossbuchstaben umwandeln, falls es sich um einen
+ * Kleinbuchstaben handelt. Sonst wird das Zeichen unveraendert zurueckgegeben.
+ * @see iswupper
+ * @see towlower
+ * @see tolower
+ */
+wint_t towupper(wint_t wc);
+
+/**
+ * Breites Zeichen in einen Kleinbuchstaben umwandeln, falls es sich um einen
+ * Grossbuchstaben umwandeln. Sonst wird das Zeichen unveraendert
+ * zurueckgegeben.
+ * @see iswlower
+ * @see towupper
+ * @see tolower
+ */
+wint_t towlower(wint_t wc);
 
 #endif /* ndef WCTYPE_H */
 
diff --git a/src/modules/lib/stdlibc/wctype.c b/src/modules/lib/stdlibc/wctype.c
new file mode 100644
index 0000000..b3c174c
--- /dev/null
+++ b/src/modules/lib/stdlibc/wctype.c
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2009 The tyndur Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the tyndur Project
+ * by Antoine Kaufmann.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <wctype.h>
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein grosses alphabetisches
+ * Zeichen handelt.
+ * @see iswlower
+ * @see iswalpha
+ * @see towupper
+ * @see towlower
+ * @see isupper
+ */
+int iswupper(wint_t wc)
+{
+    return (wc >= L'A' && wc <= L'Z');
+}
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein kleines alphabetisches
+ * Zeichen handelt.
+ * @see iswupper
+ * @see iswalpha
+ * @see towlower
+ * @see towupper
+ * @see islower
+ */
+int iswlower(wint_t wc)
+{
+    return (wc >= L'a' && wc <= L'z');
+}
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein alphabetisches Zeichen
+ * handelt.
+ * @see iswalnum
+ * @see isalpha
+ */
+int iswalpha(wint_t wc)
+{
+    return ((wc >= L'a' && wc <= L'z') || (wc >= L'A' && wc <= L'Z'));
+}
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um eine Ziffer handelt.
+ * @see iswalnum
+ * @see isdigit
+ */
+int iswdigit(wint_t wc)
+{
+    return (wc >= L'0' && wc <= L'9');
+}
+
+/**
+ * Testet ob es sich bei einem breiten Zeichen um ein alphabetisches Zeichen
+ * oder eine Ziffer handelt.
+ * @see iswalpha
+ * @see iswdigit
+ * @see isalnum
+ */
+int iswalnum(wint_t wc)
+{
+    return (iswdigit(wc) || iswalpha(wc));
+}
+
+/**
+ * Testen ob es sich bei einem Breiten Zeichen um ein Leerzeichen oder ein
+ * Zeilenende handelt.
+ * @see iswblank
+ * @see isblank
+ */
+int iswspace(wint_t wc)
+{
+    return (wc == L' ' || wc == L'\n' || wc == L'\r' || wc == L'\t');
+}
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein Leerzeichen
+ * handelt(einfaches Leerzeichen oder Tab).
+ * @see iswspace
+ * @see isblank
+ */
+int iswblank(wint_t wc)
+{
+    return (wc == L' ' || wc == L'\t');
+}
+
+/**
+ * TODO: Kann man das irgendwie sinnvoll erklaeren, was da alles
+ *       dazugehoert? ;-) Mit Unicode sind das naemlich nicht nur
+ *       Punktuationszeichen sondern auch andere Sonderzeichen.
+ * @see ispunct
+ */
+int iswpunct(wint_t wc)
+{
+    return iswprint(wc) && !iswspace(wc) && !iswalnum(wc);
+}
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein druckbares Zeichen
+ * handelt. Das sind alle Zeichen, die keine Kontrollzeichen(iswcntrl) sind.
+ * @see iswcntrl
+ * @see isprint
+ */
+int iswprint(wint_t wc)
+{
+    return (wc >= (wint_t) 0x20);
+}
+
+/**
+ * Testen ob es sich bei einem breiten Zeichen um ein Kontrollzeichen(z.B \n, \t
+ * oder \b) handelt. Diese Zeichen wuerden bei einem iswprint-Aufruf 0
+ * zurueckgeben.
+ * @see iswprint
+ * @see iscntrl
+ */
+int iswcntrl(wint_t wc)
+{
+    return (wc < (wint_t) 0x20);
+}
+
+/**
+ * Breites Zeichen in einen Grossbuchstaben umwandeln, falls es sich um einen
+ * Kleinbuchstaben handelt. Sonst wird das Zeichen unveraendert zurueckgegeben.
+ * @see iswupper
+ * @see towlower
+ * @see tolower
+ */
+wint_t towupper(wint_t wc)
+{
+    return iswlower(wc) ? wc - (L'a' - L'A') : wc;
+}
+
+/**
+ * Breites Zeichen in einen Kleinbuchstaben umwandeln, falls es sich um einen
+ * Grossbuchstaben umwandeln. Sonst wird das Zeichen unveraendert
+ * zurueckgegeben.
+ * @see iswlower
+ * @see towupper
+ * @see tolower
+ */
+wint_t towlower(wint_t wc)
+{
+    return iswupper(wc) ? wc + (L'a' - L'A') : wc;
+}
+
-- 
1.6.0.6