/** * サンプル部分を作成する関数 * @param[in] samples サンプル部分が格納されたpicojsonオブジェクト * @return サンプル部分のhtml文字列 */ std::string genSamples(picojson::array samples) { int sCounter = 1; //サンプルの個数 std::stringstream ssm; for (auto j = samples.begin(); j != samples.end(); j++, sCounter++) { picojson::object& sampleObj = j->get<picojson::object>(); std::ifstream iifs(sampleObj["sampleIn"].get<std::string>()); std::ifstream iofs(sampleObj["sampleOut"].get<std::string>()); // ファイルが開けなかった場合*2 if (iifs.fail()) { std::cerr << std::string("cannot open " + sampleObj["sampleIn"].get<std::string>()) << std::endl; exit(2); } if (iofs.fail()) { std::cerr << std::string("cannot open " + sampleObj["sampleOut"].get<std::string>()) << std::endl; exit(2); } // 2つのイテレータに入出力それぞれのファイル内容を読み込ませる std::istreambuf_iterator<char> iIt(iifs), oIt(iofs); std::istreambuf_iterator<char> ilast, olast; std::string iStr(iIt, ilast), oStr(oIt, olast); // 読み込んだサンプル内容をhtmlとして整形していく // sample input ssm << "\t\t<h4>Sample Input " << sCounter << "</h4>" << std::endl; ssm << "\t\t<pre class=\"sample\">" << std::endl; ssm << iStr << "</pre>" << std::endl; // sample output ssm << "\t\t<h4>Sample Output " << sCounter << "</h4>" << std::endl; ssm << "\t\t<pre class=\"sample\">" << std::endl; ssm << oStr << "</pre>" << std::endl; // 画像が定義されていたら if (sampleObj["image"].is<std::string>()) { std::string fileName = sampleObj["image"].get<std::string>(); ssm << "\t\t<div class=\"image\"><img src=\"./" << fileName << "\"></div>" << std::endl; } //説明文が定義されていたら if (sampleObj["string"].is<std::string>()) { ssm << "\t\t<p class=\"sentence\">" << std::endl << "\t\t\t" << sampleObj["string"].get<std::string>() << std::endl << "\t\t</p>" << std::endl; } } return ssm.str(); }
/** * statementやinputなどの節を作成する * @param[in] section セクション部分が格納されたpicojson配列 * @param[in] id "input"か"output"か指定(htmlの見た目制御用)(現在は使用していない) * @param[in] class_ "sentence"か"sample"かを指定(htmlの見た目制御用) * @return 節のhtml文字列 */ std::string genSection(picojson::array section, std::string id, std::string class_) { std::stringstream ssm; // process all array's emlement for (auto j = section.begin(); j != section.end(); j++) { if (j->is<std::string>()) { // sentense ssm << "\t\t<p class=\"sentence\">" << std::endl << "\t\t\t" << j->get<std::string>() << std::endl << "\t\t</p>" << std::endl; } else if (j->is<picojson::array>()) { // array std::stringstream sample; for (auto k = j->get<picojson::array>().begin(); k != j->get<picojson::array>().end(); k++) { sample << k->get<std::string>() << "<br>"; } ssm << "\t\t<div class=\"" << class_ << "\">" << std::endl; ssm << sample.str() << "</div>" << std::endl; } else if (j->is<picojson::object>()) { // Image or Code picojson::object& obj = j->get<picojson::object>(); bool flag = true; if (obj["image"].is<std::string>()) { // if the object is image std::string imgName = obj["image"].get<std::string>(); ssm << "\t\t<div class=\"image\"><img src=\"./" << imgName << "\"></div>" << std::endl; flag = false; } if (obj["code"].is<std::string>()) { // if the object is code std::string filename = obj["code"].get<std::string>(); ssm << genCodeBlock(filename) << std::endl; flag = false; } if (flag) { picojson::object::iterator unknown = obj.begin(); std::cout << unknown->first << " is a unknown property" << std::endl; } } } return ssm.str(); }
void SimpleUI::printList(picojson::array &lists) { using namespace picojson; using namespace TwitterJson; using namespace TwitterRest1_1; string tmstr,textstr; picojson::array::iterator it; for(it=lists.begin();it!=lists.end();it++){ object obj = it->get<object>(); term.Puts( obj["slug"].to_str() + " " + obj["member_count"].to_str() + "users [" + obj["mode"].to_str() + "]" , setting["COLOR_LISTNAME"].get<string>()); term.Puts(obj["description"].to_str(),setting["COLOR_LISTDETAIL"].get<string>()); } term.Reset(); }