void CJSONWriter::Val(const CFSVar &Var) { switch (Var.GetType()) { case CFSVar::VAR_EMPTY: NullVal(); break; case CFSVar::VAR_INT: IntVal(Var.GetInt()); break; case CFSVar::VAR_FLOAT: FloatVal(Var.GetFloat()); break; case CFSVar::VAR_BOOL: BoolVal(Var.GetBool()); break; case CFSVar::VAR_STRING: StringVal(Var.GetAString()); break; case CFSVar::VAR_MAP: ObjectStart(); for (INTPTR ip=0; ip<Var.GetSize(); ip++) { CFSAString szKey=Var.GetKey(ip); Key(szKey); Val(Var[szKey]); } ObjectEnd(); break; case CFSVar::VAR_ARRAY: ArrayStart(); for (INTPTR ip=0; ip<Var.GetSize(); ip++) { Val(Var[ip]); } ArrayEnd(); break; } }
StringVector convertStringVectorOutput(CFSVar& data) { CFSVar text = data["text"]; StringVector words; words.reserve(text.GetSize()); for (int idx=0 ; idx<text.GetSize() ; ++idx) { words.push_back(std::string(text[idx].GetAString())); } return words; }
// convert output to wrapper format std::vector<SpellingResults> convertSpellingOutput(CFSArray<CFSVar>& words) { std::vector<SpellingResults> results; results.reserve(words.GetSize()); for (int widx=0 ; widx < words.GetSize() ; ++widx) { CFSVar word = words[widx]; std::string text = std::string(word["text"].GetAString()); CFSVar suggestions = word["suggestions"]; StringVector suggestStrings; suggestStrings.reserve(suggestions.GetSize()); for (int sidx=0 ; sidx < suggestions.GetSize() ; ++sidx) { CFSVar suggestion = suggestions[sidx]; suggestStrings.push_back(std::string(suggestion.GetAString())); } results.push_back(SpellingResults(text, word["spelling"].GetInt(), suggestStrings)); } return results; }
void SubKeys(const CFSAString szExcept, const CFSVar &Data) { for (INTPTR ip=0; ip<Data.GetSize(); ip++) { CFSAString szKey=Data.GetKey(ip); if (szKey==szExcept) continue; m_Writer.Key(szKey); m_Writer.Val(Data[szKey]); } }
// convert vabamorf base library output to WordAnalysis instances, which as easier to wrap. std::vector<WordAnalysis> convertOutput(CFSArray<CFSVar>& words) { std::vector<WordAnalysis> results; results.reserve(words.GetSize()); for (int widx=0 ; widx < words.GetSize() ; ++widx) { CFSVar word = words[widx]; CFSVar analysis = word["analysis"]; AnalysisVector vec; for (int aidx=0 ; aidx < analysis.GetSize() ; ++aidx) { CFSVar a = analysis[aidx]; vec.push_back(Analysis(a["root"].GetAString(), a["ending"].GetAString(), a["clitic"].GetAString(), a["partofspeech"].GetAString(), a["form"].GetAString())); } results.push_back(WordAnalysis(std::string(word["text"].GetAString()), vec)); } return results; }