use of ezvcard.io.CannotParseException in project ez-vcard by mangstadt.
the class GeoScribe method _parseHtml.
@Override
protected Geo _parseHtml(HCardElement element, ParseContext context) {
String latitudeStr = element.firstValue("latitude");
if (latitudeStr == null) {
throw new CannotParseException(7);
}
Double latitude;
try {
latitude = Double.parseDouble(latitudeStr);
} catch (NumberFormatException e) {
throw new CannotParseException(8, latitudeStr);
}
String longitudeStr = element.firstValue("longitude");
if (longitudeStr == null) {
throw new CannotParseException(9);
}
Double longitude;
try {
longitude = Double.parseDouble(longitudeStr);
} catch (NumberFormatException e) {
throw new CannotParseException(10, longitudeStr);
}
return new Geo(latitude, longitude);
}
use of ezvcard.io.CannotParseException in project ez-vcard by mangstadt.
the class SoundScribe method _parseHtml.
@Override
protected Sound _parseHtml(HCardElement element, ParseContext context) {
String elementName = element.tagName();
if (!"audio".equals(elementName) && !"source".equals(elementName)) {
return super._parseHtml(element, context);
}
if ("audio".equals(elementName)) {
// parse its child "<source>" element
org.jsoup.nodes.Element source = element.getElement().getElementsByTag("source").first();
if (source == null) {
throw new CannotParseException(16);
}
element = new HCardElement(source);
}
String src = element.absUrl("src");
if (src.length() == 0) {
throw new CannotParseException(17);
}
String type = element.attr("type");
SoundType mediaType = (type.length() == 0) ? null : _mediaTypeFromMediaTypeParameter(type);
try {
DataUri uri = DataUri.parse(src);
mediaType = _mediaTypeFromMediaTypeParameter(uri.getContentType());
return new Sound(uri.getData(), mediaType);
} catch (IllegalArgumentException e) {
// not a data URI
if (mediaType == null) {
String extension = getFileExtension(src);
mediaType = (extension == null) ? null : _mediaTypeFromFileExtension(extension);
}
return new Sound(src, mediaType);
}
}
use of ezvcard.io.CannotParseException in project ez-vcard by mangstadt.
the class ImagePropertyScribe method _parseHtml.
@Override
protected T _parseHtml(HCardElement element, ParseContext context) {
String elementName = element.tagName();
if (!"img".equals(elementName)) {
return super._parseHtml(element, context);
}
String src = element.absUrl("src");
if (src.length() == 0) {
throw new CannotParseException(13);
}
try {
DataUri uri = DataUri.parse(src);
ImageType mediaType = _mediaTypeFromMediaTypeParameter(uri.getContentType());
return _newInstance(uri.getData(), mediaType);
} catch (IllegalArgumentException e) {
// not a data URI
String extension = getFileExtension(src);
ImageType mediaType = (extension == null) ? null : _mediaTypeFromFileExtension(extension);
return _newInstance(src, mediaType);
}
}
use of ezvcard.io.CannotParseException in project ez-vcard by mangstadt.
the class HCardParser method visit.
private void visit(Element element) {
boolean visitChildren = true;
Set<String> classNames = element.classNames();
for (String className : classNames) {
className = className.toLowerCase();
// give special treatment to certain URLs
if (urlPropertyName.equals(className)) {
String href = element.attr("href");
if (href.length() > 0) {
if (!classNames.contains(emailName) && href.matches("(?i)mailto:.*")) {
className = emailName;
} else if (!classNames.contains(telName) && href.matches("(?i)tel:.*")) {
className = telName;
} else {
// try parsing as IMPP
VCardPropertyScribe<? extends VCardProperty> scribe = index.getPropertyScribe(Impp.class);
context.getWarnings().clear();
context.setPropertyName(scribe.getPropertyName());
try {
VCardProperty property = scribe.parseHtml(new HCardElement(element), context);
vcard.addProperty(property);
warnings.addAll(context.getWarnings());
continue;
} catch (SkipMeException e) {
// URL is not an instant messenger URL
} catch (CannotParseException e) {
// URL is not an instant messenger URL
}
}
}
}
// hCard uses a different name for the CATEGORIES property
if ("category".equals(className)) {
className = categoriesName;
}
VCardPropertyScribe<? extends VCardProperty> scribe = index.getPropertyScribe(className);
if (scribe == null) {
// if no scribe is found, and the class name doesn't start with "x-", then it must be an arbitrary CSS class that has nothing to do with vCard
if (!className.startsWith("x-")) {
continue;
}
scribe = new RawPropertyScribe(className);
}
context.getWarnings().clear();
context.setPropertyName(scribe.getPropertyName());
VCardProperty property;
try {
property = scribe.parseHtml(new HCardElement(element), context);
warnings.addAll(context.getWarnings());
// LABELs must be treated specially so they can be matched up with their ADRs
if (property instanceof Label) {
labels.add((Label) property);
continue;
}
// add all NICKNAMEs to the same type object
if (property instanceof Nickname) {
Nickname nn = (Nickname) property;
if (nickname == null) {
nickname = nn;
vcard.addProperty(nickname);
} else {
nickname.getValues().addAll(nn.getValues());
}
continue;
}
// add all CATEGORIES to the same type object
if (property instanceof Categories) {
Categories c = (Categories) property;
if (categories == null) {
categories = c;
vcard.addProperty(categories);
} else {
categories.getValues().addAll(c.getValues());
}
continue;
}
} catch (SkipMeException e) {
// @formatter:off
warnings.add(new ParseWarning.Builder(context).message(22, e.getMessage()).build());
// @formatter:on
continue;
} catch (CannotParseException e) {
// @formatter:off
warnings.add(new ParseWarning.Builder(context).message(e).build());
// @formatter:on
property = new RawProperty(className, element.outerHtml());
} catch (EmbeddedVCardException e) {
if (isChildOf(element, embeddedVCards)) {
// prevents multiple-nested embedded elements from overwriting each other
continue;
}
property = e.getProperty();
embeddedVCards.add(element);
HCardParser embeddedReader = new HCardParser(element, pageUrl);
try {
VCard embeddedVCard = embeddedReader.readNext();
e.injectVCard(embeddedVCard);
} finally {
warnings.addAll(embeddedReader.getWarnings());
IOUtils.closeQuietly(embeddedReader);
}
visitChildren = false;
}
vcard.addProperty(property);
}
if (visitChildren) {
for (Element child : element.children()) {
visit(child);
}
}
}
use of ezvcard.io.CannotParseException in project ez-vcard by mangstadt.
the class BinaryPropertyScribe method _parseHtml.
@Override
protected T _parseHtml(HCardElement element, ParseContext context) {
String elementName = element.tagName();
if (!"object".equals(elementName)) {
throw new CannotParseException(1, elementName);
}
String data = element.absUrl("data");
if (data.length() == 0) {
throw new CannotParseException(2);
}
try {
DataUri uri = DataUri.parse(data);
U mediaType = _mediaTypeFromMediaTypeParameter(uri.getContentType());
return _newInstance(uri.getData(), mediaType);
} catch (IllegalArgumentException e) {
// not a data URI
U mediaType = null;
String type = element.attr("type");
if (type.length() > 0) {
mediaType = _mediaTypeFromMediaTypeParameter(type);
} else {
String extension = getFileExtension(data);
mediaType = (extension == null) ? null : _mediaTypeFromFileExtension(extension);
}
return _newInstance(data, mediaType);
}
}
Aggregations