Esempio n. 1
0
/**
* サンプル部分を作成する関数
* @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();
}
Esempio n. 2
0
// DMを実際に出力する。検索結果表示やらHOME表示やらに使ってる
void SimpleUI::printDMline(picojson::array &timeline)
{
	using namespace picojson;
	using namespace TwitterJson;
	using namespace TwitterRest1_1;

	// Twitterからの戻りは先が最新なので、逆順に表示
	picojson::array::reverse_iterator it;
	
	for(it=timeline.rbegin();it!=timeline.rend();it++){
		if(! it->is<object>()) continue;
		object obj = it->get<object>();
		printDM(obj);
	}
}
Esempio n. 3
0
/**
* 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 output(picojson::array& ans) {
		for (const auto& v : result) {
			const auto& p = seeds[v.first];
			picojson::object r;
			r["problemId"] = picojson::value((double)gcs[p.first].id);
			r["seed"] = picojson::value((double)p.second);
			r["solution"] = picojson::value(v.second);
			ans.push_back(picojson::value(r));
		}
	}
Esempio n. 5
0
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();
}