int endin_processf( fields *endin, char *p, char *filename, long nref ) { newstr tag, data; int n; newstrs_init( &tag, &data, NULL ); while ( *p ) { if ( endin_istag( p ) ) { p = process_endline( &tag, &data, p ); /* no empty fields allowed */ if ( data.len ) { fields_add( endin, tag.data, data.data, 0 ); } } else { p = process_endline2( &tag, &data, p ); /* endnote puts %K only on 1st line of keywords */ n = fields_num( endin ); if ( n>0 && data.len ) { if ( !strncmp( endin->tag[n-1].data, "%K", 2 ) ) { fields_add( endin, "%K", data.data, 0 ); } else { newstr_addchar( &(endin->data[n-1]), ' ' ); newstr_strcat( &(endin->data[n-1]), data.data ); } } } newstrs_empty( &tag, &data, NULL ); } newstrs_free( &tag, &data, NULL ); return 1; }
/* process_cite() * */ static int process_cite( fields *bibin, char *p, char *filename, long nref ) { int fstatus, status = BIBL_OK; newstr tag, data; newstrs_init( &tag, &data, NULL ); p = process_bibtextype( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "INTERNAL_TYPE", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } p = process_bibtexid( p, &data ); if ( data.len ) { fstatus = fields_add( bibin, "REFNUM", data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } while ( *p ) { p = process_bibtexline( p, &tag, &data, 1, bibin ); if ( p==NULL ) { status = BIBL_ERR_MEMERR; goto out; } /* no anonymous or empty fields allowed */ if ( tag.len && data.len ) { fstatus = fields_add( bibin, tag.data, data.data, 0 ); if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; } } newstrs_empty( &tag, &data, NULL ); } out: newstrs_free( &tag, &data, NULL ); return status; }
static int risin_processf( fields *risin, char *p, char *filename, long nref, param *pm ) { newstr tag, data; int status, n; newstrs_init( &tag, &data, NULL ); while ( *p ) { if ( risin_istag( p ) ) p = process_line( &tag, &data, p ); /* no anonymous fields allowed */ if ( tag.len ) { status = fields_add( risin, tag.data, data.data, 0 ); if ( status!=FIELDS_OK ) return 0; } else { p = process_line2( &tag, &data, p ); n = fields_num( risin ); if ( data.len && n>0 ) { newstr *od; od = fields_value( risin, n-1, FIELDS_STRP ); newstr_addchar( od, ' ' ); newstr_strcat( od, data.data ); } } newstrs_empty( &tag, &data, NULL ); } newstrs_free( &tag, &data, NULL ); return 1; }