var jd = new Person.parse("John Doe <john.doe@example.com> (http://example.com/~jdoe)")
assert jd.name == "John Doe"
assert jd.email == "john.doe@example.com"
assert jd.page == "http://example.com/~jdoe"
Emails and page are optional.
var jd2 = new Person.parse("John Doe")
assert jd2.name == "John Doe"
assert jd2.email == null
assert jd2.page == null
# Crete a new person from its standard textual representation.
#
# ~~~
# var jd = new Person.parse("John Doe <john.doe@example.com> (http://example.com/~jdoe)")
# assert jd.name == "John Doe"
# assert jd.email == "john.doe@example.com"
# assert jd.page == "http://example.com/~jdoe"
# ~~~
#
# Emails and page are optional.
#
# ~~~
# var jd2 = new Person.parse("John Doe")
# assert jd2.name == "John Doe"
# assert jd2.email == null
# assert jd2.page == null
# ~~~
init parse(person: String)
do
var name = person
var email = null
var page = null
# Regular expressions are broken, need to investigate.
# So split manually.
#
#var re = "([^<(]*?)(<([^>]*?)>)?(\\((.*)\\))?".to_re
#var m = (person+" ").search(re)
#print "{person}: `{m or else "?"}` `{m[1] or else "?"}` `{m[3] or else "?"}` `{m[5] or else "?"}`"
do
var sp1 = person.split_once_on("<")
if sp1.length < 2 then
break
end
var sp2 = sp1.last.split_once_on(">")
if sp2.length < 2 then
break
end
name = sp1.first.trim
email = sp2.first.trim
var sp3 = sp2.last.split_once_on("(")
if sp3.length < 2 then
break
end
var sp4 = sp3.last.split_once_on(")")
if sp4.length < 2 then
break
end
page = sp4.first.trim
end
init(name, email, page)
end
src/catalog/catalog.nit:191,2--242,4