1/* Look at first character in UTF-16 string. 2 Copyright (C) 1999-2000, 2002, 2006-2007, 2009-2010 Free Software 3 Foundation, Inc. 4 Written by Bruno Haible <bruno@clisp.org>, 2002. 5 6 This program is free software: you can redistribute it and/or modify it 7 under the terms of the GNU Lesser General Public License as published 8 by the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Lesser General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19#include <config.h> 20 21/* Specification. */ 22#include "unistr.h" 23 24int 25u16_strmbtouc (ucs4_t *puc, const uint16_t *s) 26{ 27 /* Keep in sync with unistr.h and utf16-ucs4.c. */ 28 uint16_t c = *s; 29 30 if (c < 0xd800 || c >= 0xe000) 31 { 32 *puc = c; 33 return (c != 0 ? 1 : 0); 34 } 35#if CONFIG_UNICODE_SAFETY 36 if (c < 0xdc00) 37#endif 38 { 39#if CONFIG_UNICODE_SAFETY 40 if (s[1] >= 0xdc00 && s[1] < 0xe000) 41#else 42 if (s[1] != 0) 43#endif 44 { 45 *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); 46 return 2; 47 } 48 } 49 /* invalid or incomplete multibyte character */ 50 return -1; 51} 52