Skip to content

Instantly share code, notes, and snippets.

@Midiman
Forked from shakesoda/foo.cpp
Created May 29, 2013 08:45
Show Gist options
  • Save Midiman/5668865 to your computer and use it in GitHub Desktop.
Save Midiman/5668865 to your computer and use it in GitHub Desktop.
void pretty_print_extensions(std::vector<std::string> &extensions)
{
// derived from the extension pretty printing from StepMania.
using namespace std;
sort( extensions.begin(), extensions.end() );
size_t next = 0;
while( next < extensions.size() )
{
size_t last = next;
string type;
for( size_t i = next; i<extensions.size(); ++i )
{
vector<string> segments;
split(extensions[i], '_', segments);
string this_type;
if (segments.size() > 2)
this_type = join("_", segments.begin(), segments.begin()+2);
if (i > next && this_type != type)
break;
type = this_type;
last = i;
}
if (next == last)
{
printf( " %s\n", extensions[next].c_str() );
++next;
continue;
}
string sList = ssprintf( " %s: ", type.c_str() );
while( next <= last )
{
vector<string> segments;
split( extensions[next], '_', segments );
string ext_short = join( "_", segments.begin()+2, segments.end() );
sList += ext_short;
if (next < last)
sList += ", ";
if (next == last || sList.size() + extensions[next+1].size() > 78)
{
printf( "%s\n", sList.c_str() );
sList = " ";
}
++next;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment