1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
use core:io;
use util:serialize;
/**
* Custom protocol to represent "md" links.
*/
class MdProtocol : extends Protocol, serializable {
// Create.
init() {
init {}
}
// Output.
void toS(StrBuf to) : override {
to << "md:/";
}
}
/**
* Parse a MD link.
*/
Url parseMdUrl(Str input) {
Bool absolute = false;
Bool first = true;
Str[] parts;
var pos = input.begin;
while (pos != input.end) {
var next = input.find('/', pos);
Str part = input.cut(pos, next);
if (first & part.empty)
absolute = true;
else if (part.any)
parts << part;
pos = next + 1;
first = false;
}
if (absolute)
return Url(MdProtocol(), parts);
else
return Url(parts);
}
|