void VLocalizationTransUnitHandler::CheckPlatformTag( const VString& inTags, bool inIncludeIfTag, bool *ioExcluded) { VectorOfVString tags; inTags.GetSubStrings( ' ', tags, false /*inReturnEmptyStrings*/, true /*inTrimSpaces*/); // same tags as in VContextualMenu::_AddDefaultTags bool mac = std::find( tags.begin(), tags.end(), CVSTR("mac")) != tags.end(); bool win = std::find( tags.begin(), tags.end(), CVSTR("win")) != tags.end(); bool lin = std::find( tags.begin(), tags.end(), CVSTR("linux")) != tags.end(); if (mac || win || lin) { bool ok; #if VERSIONMAC ok = mac; #elif VERSIONWIN ok = win; #elif VERSION_LINUX ok = lin; #endif if (inIncludeIfTag && !ok) *ioExcluded = true; else if (!inIncludeIfTag && ok) *ioExcluded = true; } }
VError VJSONWriter::StringifyArray( const VJSONArray *inArray, VString& outString) { VError err = VE_OK; if (inArray == NULL) { outString = VJSONValue::sUndefinedString; } else if (inArray->IsEmpty()) { outString = "[]"; } else { IncrementLevel(); VectorOfVString array; size_t count = inArray->GetCount(); try { array.resize( count); } catch(...) { err = vThrowError( VE_MEMORY_FULL); } VectorOfVString::iterator j = array.begin(); for( size_t i = 0 ; (i < count) && (err == VE_OK) ; ++i, ++j) { err = StringifyValue( (*inArray)[i], *j); InsertIndentString( *j); } DecrementLevel(); if (err == VE_OK) { array.front().Insert( '[', 1); AppendIndentString( array.back()); array.back().AppendUniChar( ']'); err = outString.Join( array, ',') ? VE_OK : vThrowError( VE_STRING_ALLOC_FAILED); } } return err; }
VError VJSONArray::GetString( VString& outString) const { VError err = VE_OK; if (fVector.empty()) { outString.Clear(); } else { VectorOfVString array; array.resize( fVector.size()); VectorOfVString::iterator j = array.begin(); for( VectorType::const_iterator i = fVector.begin() ; (i != fVector.end()) && (err == VE_OK) ; ++i, ++j) { err = i->GetString( *j); } err = outString.Join( array, ',') ? VE_OK : vThrowError( VE_STRING_ALLOC_FAILED); } return err; }
void VJSLanguageSyntaxTester::_Tokenize( XBOX::VJSParms_callStaticFunction &ioParams, void * ) { // We are expecting 2 JavaScript parameters: // - source code to tokenize // - extension of the fake file VString sourceCode, extension; if (ioParams.CountParams() == 2) { if (!ioParams.GetStringParam( 1, sourceCode )) return; if (!ioParams.GetStringParam( 2, extension )) return; } else return; CLanguageSyntaxComponent *languageSyntax = (CLanguageSyntaxComponent *)VComponentManager::RetainComponent( (CType)CLanguageSyntaxComponent::Component_Type ); if (languageSyntax) { ISyntaxInterface *syntaxEngine = languageSyntax->GetSyntaxByExtension( extension ); if (syntaxEngine) { VectorOfVString tokens; syntaxEngine->GetTokensForTesting(sourceCode, tokens); VJSArray result( ioParams.GetContextRef() ); VJSValue jsval(ioParams.GetContextRef()); for (VectorOfVString::const_iterator it = tokens.begin(); it != tokens.end(); ++it) { jsval.SetString(*it); result.PushValue(jsval); } ioParams.ReturnValue(result); } languageSyntax->Release(); } }
VError VJSONWriter::StringifyObject( const VJSONObject *inObject, VString& outString) { if (inObject == NULL) { outString = VJSONValue::sUndefinedString; return VE_OK; } if (std::find( fStack.begin(), fStack.end(), inObject) != fStack.end()) { return vThrowError( VE_JSON_STRINGIFY_CIRCULAR); } VError err = VE_OK; fStack.push_back( inObject); if (!inObject->DoStringify( outString, *this, &err)) { if (inObject->fMap.empty()) { outString = "{}"; } else { IncrementLevel(); VectorOfVString array; array.resize( inObject->fMap.size()); VectorOfVString::iterator j = array.begin(); for( VJSONPropertyConstIterator i( inObject) ; i.IsValid() && (err == VE_OK) ; ++i, ++j) { err = i.GetName().GetJSONString( *j, GetOptions()); if (err == VE_OK) { InsertIndentString( *j); VString value; err = StringifyValue( i.GetValue(), value); if (err == VE_OK) { j->AppendUniChar( ':'); j->AppendString( value); } } } DecrementLevel(); if (err == VE_OK) { array.front().Insert( '{', 1); AppendIndentString( array.back()); array.back().AppendUniChar( '}'); err = outString.Join( array, ',') ? VE_OK : vThrowError( VE_STRING_ALLOC_FAILED); } } } fStack.pop_back(); return err; }