void RSimpleHTMLParser::textHandler(void *ctx, const char *s, int len) { //CCLog("[Parser Text]%s", s); CCAssert(m_rCurrentElement, "[CCRich]: must specify a parent element!"); unsigned short* utf16str = cc_utf8_to_utf16(s); size_t utf16size = cc_wcslen(utf16str); if ( utf16size == 0 ) return; for ( size_t i = 0; i < utf16size; i++ ) { REleGlyph* ele = new REleGlyph(utf16str[i]); if ( ele->parse(this) ) { m_rCurrentElement->addChildren(ele); } else { CC_SAFE_DELETE(ele); } } CC_SAFE_DELETE_ARRAY(utf16str); }
void Label::updateContent() { auto utf16String = cc_utf8_to_utf16(_originalUTF8String.c_str()); setCurrentString(utf16String); setOriginalString(utf16String); if (_textSprite) { Node::removeChild(_textSprite,true); _textSprite = nullptr; if (_shadowNode) { Node::removeChild(_shadowNode,true); _shadowNode = nullptr; } } if (_fontAtlas) { alignText(); } else { _fontDefinition._fontFillColor.r = _textColor.r; _fontDefinition._fontFillColor.g = _textColor.g; _fontDefinition._fontFillColor.b = _textColor.b; createSpriteWithFontDefinition(); } _contentDirty = false; }
unsigned short int * Font::getUTF16Text(const char *text, int &outNumLetters) const { unsigned short* utf16String = cc_utf8_to_utf16(text); if(!utf16String) return 0; outNumLetters = cc_wcslen(utf16String); return utf16String; }
void Label::setString(const std::string& text) { if (!_fontAtlas || _commonLineHeight <= 0) return ; unsigned short* utf16String = cc_utf8_to_utf16(text.c_str()); if(!utf16String) return ; _originalUTF8String = text; setCurrentString(utf16String); setOriginalString(utf16String); // align text alignText(); }
jsval c_string_to_jsval(JSContext* cx, const char* v, size_t length /* = -1 */) { if (v == NULL) { return JSVAL_NULL; } jsval ret = JSVAL_NULL; int utf16_size = 0; jschar* strUTF16 = (jschar*)cc_utf8_to_utf16(v, length, &utf16_size); if (strUTF16 && utf16_size > 0) { JSString* str = JS_NewUCStringCopyN(cx, strUTF16, utf16_size); if (str) { ret = STRING_TO_JSVAL(str); } delete[] strUTF16; } return ret; }
bool c_string_to_jsval(JSContext* cx, const char* v, JS::MutableHandleValue ret, size_t length) { if (v == NULL) { return false; } if (length == -1) { length = strlen(v); } JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET if (0 == length) { auto emptyStr = JS_NewStringCopyZ(cx, ""); ret.set(JS::StringValue(emptyStr)); return true; } #if defined(_MSC_VER) && (_MSC_VER <= 1800) // NOTE: Visual Studio 2013 (Platform Toolset v120) is not fully C++11 compatible. // It also doesn't provide support for char16_t and std::u16string. // For more information, please see this article // https://blogs.msdn.microsoft.com/vcblog/2014/11/17/c111417-features-in-vs-2015-preview/ int utf16_size = 0; const jschar* strUTF16 = (jschar*)cc_utf8_to_utf16(v, (int)length, &utf16_size); if (strUTF16 && utf16_size > 0) { JSString* str = JS_NewUCStringCopyN(cx, strUTF16, (size_t)utf16_size); if (str) { ret.set(JS::StringValue(str)); } delete[] strUTF16; } #else std::u16string strUTF16; bool ok = cocos2d::StringUtils::UTF8ToUTF16(std::string(v, length), strUTF16); if (ok && !strUTF16.empty()) { JSString* str = JS_NewUCStringCopyN(cx, reinterpret_cast<const char16_t*>(strUTF16.data()), strUTF16.size()); if (str) { ret.set(JS::StringValue(str)); } } #endif return true; }
bool Label::setText(const char *stringToRender, float lineWidth, TextHAlignment alignment, bool lineBreakWithoutSpaces) { if (!_fontAtlas) return false; // carloX // reset the string resetCurrentString(); _width = lineWidth; _alignment = alignment; _lineBreakWithoutSpaces = lineBreakWithoutSpaces; // release all the sprites moveAllSpritesToCache(); // store locally common line height _commonLineHeight = _fontAtlas->getCommonLineHeight(); if (_commonLineHeight <= 0) return false; int numLetter = 0; unsigned short* utf16String = cc_utf8_to_utf16(stringToRender); if(!utf16String) return false; numLetter = cc_wcslen(utf16String); SpriteBatchNode::initWithTexture(&_fontAtlas->getTexture(0), numLetter); _cascadeColorEnabled = true; // setCurrentString(utf16String); setOriginalString(utf16String); // align text alignText(); // done here return true; }
GlyphDef * FontFreeType::getGlyphDefintionsForText(const char *pText, int &outNumGlyphs, bool UTF16text) { unsigned short* utf16String = 0; if (UTF16text) { utf16String = (unsigned short*) pText; } else { utf16String = cc_utf8_to_utf16(pText); } // if (!utf16String) return 0; int numChar = cc_wcslen(utf16String); if (!numChar) return 0; // allocate the needed Glyphs GlyphDef *pGlyphs = new GlyphDef[numChar]; assert( pGlyphs != NULL ); if (!pGlyphs) return 0; // sore result as CCRect for (int c=0; c<numChar; ++c) { Rect tempRect; if( !getBBOXFotChar(utf16String[c], tempRect) ) { log("Warning: Cannot find definition for glyph: %c in font:%s", utf16String[c], _fontName.c_str()); tempRect.origin.x = 0; tempRect.origin.y = 0; tempRect.size.width = 0; tempRect.size.height = 0; pGlyphs[c].setRect(tempRect); pGlyphs[c].setUTF16Letter(utf16String[c]); pGlyphs[c].setValid(false); pGlyphs[c].setPadding(_letterPadding); } else { pGlyphs[c].setRect(tempRect); pGlyphs[c].setUTF16Letter(utf16String[c]); pGlyphs[c].setPadding(_letterPadding); pGlyphs[c].setValid(true); } } outNumGlyphs = numChar; // free memory if (!UTF16text) delete [] utf16String; // done return pGlyphs; }
void Label::updateContent() { auto utf16String = cc_utf8_to_utf16(_originalUTF8String.c_str()); setCurrentString(utf16String); setOriginalString(utf16String); if (_textSprite) { Node::removeChild(_textSprite,true); _textSprite = nullptr; if (_shadowNode) { Node::removeChild(_shadowNode,true); _shadowNode = nullptr; } } if (_fontAtlas) { alignText(); } else { _fontDefinition._fontName = _systemFont; _fontDefinition._fontSize = _systemFontSize; _fontDefinition._alignment = _hAlignment; _fontDefinition._vertAlignment = _vAlignment; _fontDefinition._dimensions.width = _labelWidth; _fontDefinition._dimensions.height = _labelHeight; _fontDefinition._fontFillColor.r = _textColor.r; _fontDefinition._fontFillColor.g = _textColor.g; _fontDefinition._fontFillColor.b = _textColor.b; _fontDefinition._shadow._shadowEnabled = false; if (_currLabelEffect == LabelEffect::OUTLINE && _outlineSize > 0) { _fontDefinition._stroke._strokeEnabled = true; _fontDefinition._stroke._strokeSize = _outlineSize; _fontDefinition._stroke._strokeColor.r = _effectColor.r; _fontDefinition._stroke._strokeColor.g = _effectColor.g; _fontDefinition._stroke._strokeColor.b = _effectColor.b; } else { _fontDefinition._stroke._strokeEnabled = false; } #if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID) && (CC_TARGET_PLATFORM != CC_PLATFORM_IOS) if (_fontDefinition._stroke._strokeEnabled) { CCLOGERROR("Currently only supported on iOS and Android!"); } _fontDefinition._stroke._strokeEnabled = false; #endif createSpriteWithFontDefinition(); } _contentDirty = false; }