static int risin_linkedfile( fields *bibin, newstr *intag, newstr *invalue, int level, param *pm, char *outtag, fields *bibout ) { int fstatus, n; char *p; /* if URL is file:///path/to/xyz.pdf, only store "///path/to/xyz.pdf" */ n = is_uri_file_scheme( invalue->data ); if ( n ) { /* skip past "file:" and store only actual path */ p = invalue->data + n; fstatus = fields_add( bibout, outtag, p, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* if URL is http:, ftp:, etc. store as a URL */ n = is_uri_remote_scheme( invalue->data ); if ( n!=-1 ) { fstatus = fields_add( bibout, "URL", invalue->data, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; } /* badly formed, RIS wants URI, but store value anyway */ fstatus = fields_add( bibout, outtag, invalue->data, level ); if ( fstatus==FIELDS_OK ) return BIBL_OK; else return BIBL_ERR_MEMERR; }
/* many fields have been abused to embed URLs, DOIs, etc. */ int is_embedded_link( char *s ) { if ( is_uri_remote_scheme( s ) != -1 ) return 1; if ( is_reference_database( s ) != -1 ) return 1; if ( is_doi( s ) !=-1 ) return 1; return 0; }