瀏覽代碼

LibC: Declare wide character type functions in wctype.h

Declares all wide character handling functions in wctype.h. All calls
are forwarded to the corresponding character handling function in
ctype.h.

These functions are declared, but not implemented:
- iswctype
- wctype
- towctrans
- wctrans

This should also resolve a build issue with the 'sed' port getting
confused with iswprint being declared twice. Seems like it expected
more functions from wctype.h and then had a backup strategy of adding
its own wctype.h.
Kenneth Myhra 4 年之前
父節點
當前提交
7a4f59f638
共有 2 個文件被更改,包括 102 次插入8 次删除
  1. 80 6
      Userland/Libraries/LibC/wctype.cpp
  2. 22 2
      Userland/Libraries/LibC/wctype.h

+ 80 - 6
Userland/Libraries/LibC/wctype.cpp

@@ -4,27 +4,101 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
-#include <AK/Format.h>
-#include <assert.h>
 #include <wctype.h>
 
 extern "C" {
 
+int iswalnum(wint_t wc)
+{
+    return __inline_isalnum(wc);
+}
+
+int iswalpha(wint_t wc)
+{
+    return __inline_isalpha(wc);
+}
+
+int iswcntrl(wint_t wc)
+{
+    return __inline_iscntrl(wc);
+}
+
+int iswdigit(wint_t wc)
+{
+    return __inline_isdigit(wc);
+}
+
+int iswxdigit(wint_t wc)
+{
+    return __inline_isxdigit(wc);
+}
+
+int iswspace(wint_t wc)
+{
+    return __inline_isspace(wc);
+}
+
+int iswpunct(wint_t wc)
+{
+    return __inline_ispunct(wc);
+}
+
+int iswprint(wint_t wc)
+{
+    return __inline_isprint(wc);
+}
+
+int iswgraph(wint_t wc)
+{
+    return __inline_isgraph(wc);
+}
+
+int iswlower(wint_t wc)
+{
+    return __inline_islower(wc);
+}
+
+int iswupper(wint_t wc)
+{
+    return __inline_isupper(wc);
+}
+
+int iswblank(wint_t wc)
+{
+    return __inline_isblank(wc);
+}
+
+int iswctype(wint_t, wctype_t)
+{
+    dbgln("FIXME: Implement iswctype()");
+    TODO();
+}
+
 wctype_t wctype(const char*)
 {
     dbgln("FIXME: Implement wctype()");
     TODO();
 }
 
-int iswctype(wint_t, wctype_t)
+wint_t towlower(wint_t wc)
 {
-    dbgln("FIXME: Implement iswctype()");
+    return __inline_tolower(wc);
+}
+
+wint_t towupper(wint_t wc)
+{
+    return __inline_toupper(wc);
+}
+
+wint_t towctrans(wint_t, wctrans_t)
+{
+    dbgln("FIXME: Implement towctrans()");
     TODO();
 }
 
-int iswprint(wint_t)
+wctrans_t wctrans(const char*)
 {
-    dbgln("FIXME: Implement iswprint()");
+    dbgln("FIXME: Implement wctrans()");
     TODO();
 }
 }

+ 22 - 2
Userland/Libraries/LibC/wctype.h

@@ -6,12 +6,32 @@
 
 #pragma once
 
+#include <AK/Format.h>
+#include <assert.h>
+#include <ctype.h>
 #include <wchar.h>
 
 __BEGIN_DECLS
 
-wctype_t wctype(const char* name);
-int iswctype(wint_t wc, wctype_t desc);
+typedef const int* wctrans_t;
+
+int iswalnum(wint_t wc);
+int iswalpha(wint_t wc);
+int iswcntrl(wint_t wc);
+int iswdigit(wint_t wc);
+int iswxdigit(wint_t wc);
+int iswspace(wint_t wc);
+int iswpunct(wint_t wc);
 int iswprint(wint_t wc);
+int iswgraph(wint_t wc);
+int iswlower(wint_t wc);
+int iswupper(wint_t wc);
+int iswblank(wint_t wc);
+int iswctype(wint_t, wctype_t);
+wctype_t wctype(const char*);
+wint_t towlower(wint_t wc);
+wint_t towupper(wint_t wc);
+wint_t towctrans(wint_t, wctrans_t);
+wctrans_t wctrans(const char*);
 
 __END_DECLS