Skip to content

Instantly share code, notes, and snippets.

@dnadlinger
Created June 23, 2011 11:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dnadlinger/1042363 to your computer and use it in GitHub Desktop.
Save dnadlinger/1042363 to your computer and use it in GitHub Desktop.
import std.stdio;
import core.demangle;
void main()
{
foreach (line; stdin.byLine())
{
size_t beginIdx, endIdx;
enum State { searching_, searchingD, searchingEnd, done }
State state;
foreach (i, char c; line)
{
switch (state)
{
case State.searching_:
if (c == '_')
{
beginIdx = i;
state = State.searchingD;
}
break;
case State.searchingD:
if (c == 'D')
state = State.searchingEnd;
else if (c != '_')
state = State.searching_;
break;
case State.searchingEnd:
if (c == ' ' || c == '"' || c == '\'')
{
endIdx = i;
state = State.done;
}
break;
}
if (state == State.done)
break;
}
if (endIdx > beginIdx)
writeln(line[0..beginIdx], demangle(line[beginIdx..endIdx]),
line[endIdx..$]);
else
writeln(line);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment