3c952d6b2b
[SVN r65002]
81 lines
2.4 KiB
C++
81 lines
2.4 KiB
C++
// Copyright Frank Mori Hess 2009.
|
|
//
|
|
// Quick hack to extract code snippets from example programs, so
|
|
// they can be included into boostbook.
|
|
//
|
|
// Use, modification and
|
|
// distribution is subject to the Boost Software License, Version
|
|
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <stdexcept>
|
|
|
|
int main(int argc, const char *argv[])
|
|
{
|
|
if(argc < 3)
|
|
{
|
|
std::cerr << "Too few arguments: need output directory and input file name(s).\n";
|
|
return -1;
|
|
}
|
|
static const std::string output_directory = argv[1];
|
|
static const int num_files = argc - 2;
|
|
int i;
|
|
for(i = 0; i < num_files; ++i)
|
|
{
|
|
const std::string file_name = argv[2 + i];
|
|
std::cout << "opening file: " << file_name << std::endl;
|
|
std::ifstream infile(file_name.c_str());
|
|
bool inside_snippet = false;
|
|
std::ofstream snippet_out_file;
|
|
while(infile.good())
|
|
{
|
|
std::string line;
|
|
getline(infile, line);
|
|
if(infile.bad()) break;
|
|
if(inside_snippet)
|
|
{
|
|
size_t snippet_end_pos = line.find("//]");
|
|
if(snippet_end_pos == std::string::npos)
|
|
{
|
|
snippet_out_file << line << "\n";
|
|
}else
|
|
{
|
|
snippet_out_file << "]]></code>";
|
|
inside_snippet = false;
|
|
std::cout << "done.\n";
|
|
continue;
|
|
}
|
|
}else
|
|
{
|
|
size_t snippet_start_pos = line.find("//[");
|
|
if(snippet_start_pos == std::string::npos)
|
|
{
|
|
continue;
|
|
}else
|
|
{
|
|
inside_snippet = true;
|
|
std::string snippet_name = line.substr(snippet_start_pos + 3);
|
|
std::istringstream snippet_stream(snippet_name);
|
|
snippet_stream >> snippet_name;
|
|
if(snippet_name == "")
|
|
{
|
|
throw std::runtime_error("failed to obtain snippet name");
|
|
}
|
|
snippet_out_file.close();
|
|
snippet_out_file.clear();
|
|
snippet_out_file.open(std::string(output_directory + "/" + snippet_name + ".xml").c_str());
|
|
snippet_out_file << "<!-- Code snippet \"" << snippet_name <<
|
|
"\" extracted from \"" << file_name << "\" by snippet_extractor.\n" <<
|
|
"--><code><![CDATA[";
|
|
std::cout << "processing snippet \"" << snippet_name << "\"... ";
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|