示例#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();
}
示例#2
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();
}
示例#3
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();
}