Select Git revision
wmml_to_html
wmml_to_html 8.83 KiB
#!/usr/local/bin/pike
import Stdio;
import spider;
import Array;
mapping(int:mapping) links=([]);
string p1(string data);
/* Note: destructive ! */
string *srt(string *foo)
{
sort(map(foo,lower_case),foo);
return foo;
}
string quote_param(string s)
{
string ret="";
while(sscanf(s,"%[-a-zA-Z0-9/()*,.]%c%s",string a, int c,s)==3)
ret+=sprintf("%s%%02x",a,c);
return ret+s;
}
string unquote_param(string s)
{
string *tmp=s/"%";
for(int e=1;e<sizeof(tmp);e++)
if(sscanf(tmp[e],"%2x%s",int x, string rest))
tmp[e]=sprintf("%c%s",x,rest);
return tmp*"";
}
string code_params(mapping s)
{
string ret="";
foreach(indices(s), string data)
ret+=" "+data+"="+quote_param(s[data]);
return ret;
}
/* Index handling */
void _add_to(mapping foo, string bar, string full)
{
mapping m;
if(!bar)
{
if(foo[0])
{
foo[0]|=({full});
}else{
foo[0]=({full});
}
return;
}
sscanf(bar,"%s.%s",bar,string rest);
if(!(m=foo[bar])) m=foo[bar]=([]);
_add_to(m, rest,full);
}
void add_to(string bar, string full)
{
sscanf(lower_case(unquote_param(bar)),"%*[_ ]%c",int c);
mapping m;
if(!(m=links[c])) m=links[c]=([]);
_add_to(m, bar, full);