diff options
Diffstat (limited to 'support/texlab/crates/bibutils_sys/src/marc_auth.c')
-rw-r--r-- | support/texlab/crates/bibutils_sys/src/marc_auth.c | 458 |
1 files changed, 458 insertions, 0 deletions
diff --git a/support/texlab/crates/bibutils_sys/src/marc_auth.c b/support/texlab/crates/bibutils_sys/src/marc_auth.c new file mode 100644 index 0000000000..4ef2899b78 --- /dev/null +++ b/support/texlab/crates/bibutils_sys/src/marc_auth.c @@ -0,0 +1,458 @@ +/* + * marc_auth.c + * + * Copyright (c) Chris Putnam 2004-2019 + * + * Source code released under the GPL version 2 + * + */ +#include "marc_auth.h" +#include <string.h> +#include "msvc_fix.h" + +static const char *marc_genre[] = { + "abstract or summary", + "art original", + "art reproduction", + "article", + "atlas", + "autobiography", + "bibliography", + "biography", + "book", + "calendar", + "catalog", + "chart", + "comic or graphic novel", + "comic strip", + "conference publication", + "database", + "dictionary", + "diorama", + "directory", + "discography", + "drama", + "encyclopedia", + "essay", + "festschrift", + "fiction", + "filmography", + "filmstrip", + "finding aid", + "flash card", + "folktale", + "font", + "game", + "government publication", + "graphic", + "globe", + "handbook", + "history", + "humor, satire", + "hymnal", + "index", + "instruction", + "interview", + "issue", + "journal", + "kit", + "language instruction", + "law report or digest", + "legal article", + "legal case and case notes", + "legislation", + "letter", + "loose-leaf", + "map", + "memoir", + "microscope slide", + "model", + "motion picture", + "multivolume monograph", + "newspaper", + "novel", + "numeric data", + "offprint", + "online system or service", + "patent", + "periodical", + "picture", + "poetry", + "programmed text", + "realia", + "rehearsal", + "remote sensing image", + "reporting", + "review", + "series", + "short story", + "slide", + "sound", + "speech", + "standard or specification", + "statistics", + "survey of literature", + "technical drawing", + "technical report", + "thesis", + "toy", + "transparency", + "treaty", + "videorecording", + "web site", + "yearbook", +}; +static const int nmarc_genre = sizeof( marc_genre ) / sizeof( const char* ); + +static const char *marc_resource[] = { + "cartographic", + "kit", + "mixed material", + "moving image", + "notated music", + "software, multimedia", + "sound recording", + "sound recording - musical", + "sound recording - nonmusical", + "still image", + "text", + "three dimensional object" +}; +static const int nmarc_resource = sizeof( marc_resource ) / sizeof( const char* ); + + +/* www.loc.gov/marc/relators/relacode.html */ + +typedef struct marc_trans { + char *abbreviation; + char *internal_name; +} marc_trans; + +static const marc_trans relators[] = { + { "abr", "ABRIDGER" }, /* Abridger */ + { "acp", "ART_COPYIST" }, /* Art copyist */ + { "act", "ACTOR" }, /* Actor */ + { "adi", "ART_DIRECTOR" }, /* Art director */ + { "adp", "ADAPTER" }, /* Adapter */ + { "aft", "AUTHOR" }, /* Author of afterword, colophon, etc. */ + { "anl", "ANALYST" }, /* Analyst */ + { "anm", "ANIMATOR" }, /* Animator */ + { "ann", "ANNOTATOR" }, /* Annotator */ + { "ant", "BIBLIOGRAPHIC_ANTECENDENT" }, /* Bibliographic antecedent */ + { "ape", "APPELLEE" }, /* Appellee */ + { "apl", "APPELLANT" }, /* Appellant */ + { "app", "APPLICANT" }, /* Applicant */ + { "aqt", "AUTHOR" }, /* Author in quotations or text abstracts */ + { "arc", "ARCHITECT" }, /* Architect */ + { "ard", "ARTISTIC_DIRECTOR" }, /* Artistic director */ + { "arr", "ARRANGER" }, /* Arranger */ + { "art", "ARTIST" }, /* Artist */ + { "asg", "ASSIGNEE" }, /* Assignee */ + { "asn", "ASSOCIATED_NAME" }, /* Associated name */ + { "ato", "AUTOGRAPHER" }, /* Autographer */ + { "att", "ATTRIBUTED_NAME" }, /* Attributed name */ + { "auc", "AUCTIONEER" }, /* Auctioneer */ + { "aud", "AUTHOR" }, /* Author of dialog */ + { "aui", "AUTHOR" }, /* Author of introduction, etc. */ + { "aus", "AUTHOR" }, /* Screenwriter */ + { "aut", "AUTHOR" }, /* Author */ + { "author", "AUTHOR" }, + { "bdd", "BINDING_DESIGNER" }, /* Binding designer */ + { "bjd", "BOOKJACKET_DESIGNER" }, /* Bookjacket designer */ + { "bkd", "BOOK_DESIGNER" }, /* Book designer */ + { "bkp", "BOOK_PRODUCER" }, /* Book producer */ + { "blw", "AUTHOR" }, /* Blurb writer */ + { "bnd", "BINDER" }, /* Binder */ + { "bpd", "BOOKPLATE_DESIGNER" }, /* Bookplate designer */ + { "brd", "BROADCASTER" }, /* Broadcaster */ + { "brl", "BRAILLE_EMBOSSER" }, /* Braille embosser */ + { "bsl", "BOOKSELLER" }, /* Bookseller */ + { "cas", "CASTER" }, /* Caster */ + { "ccp", "CONCEPTOR" }, /* Conceptor */ + { "chr", "CHOREOGRAPHER" }, /* Choreographer */ + { "clb", "COLLABORATOR" }, /* Collaborator */ + { "cli", "CLIENT" }, /* Client */ + { "cll", "CALLIGRAPHER" }, /* Calligrapher */ + { "clr", "COLORIST" }, /* Colorist */ + { "clt", "COLLOTYPER" }, /* Collotyper */ + { "cmm", "COMMENTATOR" }, /* Commentator */ + { "cmp", "COMPOSER" }, /* Composer */ + { "cmt", "COMPOSITOR" }, /* Compositor */ + { "cnd", "CONDUCTOR" }, /* Conductor */ + { "cng", "CINEMATOGRAPHER" }, /* Cinematographer */ + { "cns", "CENSOR" }, /* Censor */ + { "coe", "CONTESTANT-APPELLEE" }, /* Contestant-appellee */ + { "col", "COLLECTOR" }, /* Collector */ + { "com", "COMPILER" }, /* Compiler */ + { "con", "CONSERVATOR" }, /* Conservator */ + { "cor", "COLLECTION_REGISTRAR" }, /* Collection registrar */ + { "cos", "CONTESTANT" }, /* Contestant */ + { "cot", "CONTESTANT-APPELLANT" }, /* Contestant-appellant */ + { "cou", "COURT_GOVERNED" }, /* Court governed */ + { "cov", "COVER_DESIGNER" }, /* Cover designer */ + { "cpc", "COPYRIGHT_CLAIMANT" }, /* Copyright claimant */ + { "cpe", "COMPLAINANT-APPELLEE" }, /* Complainant-appellee */ + { "cph", "COPYRIGHT_HOLDER" }, /* Copyright holder */ + { "cpl", "COMPLAINANT" }, /* Complainant */ + { "cpt", "COMPLAINANT-APPELLANT" }, /* Complainant-appellant */ + { "cre", "AUTHOR" }, /* Creator */ + { "creator", "AUTHOR" }, + { "crp", "CORRESPONDENT" }, /* Correspondent */ + { "crr", "CORRECTOR" }, /* Corrector */ + { "crt", "COURT_REPORTER" }, /* Court reporter */ + { "csl", "CONSULTANT" }, /* Consultant */ + { "csp", "CONSULTANT_TO_A_PROJECT" }, /* Consultant to a project */ + { "cst", "COSTUME_DESIGNER" }, /* Costume designer */ + { "ctb", "CONTRIBUTOR" }, /* Contributor */ + { "cte", "CONTESTEE-APPELLEE" }, /* Contestee-appellee */ + { "ctg", "CARTOGRAPHER" }, /* Cartographer */ + { "ctr", "CONTRACTOR" }, /* Contractor */ + { "cts", "CONTESTEE" }, /* Contestee */ + { "ctt", "CONTESTEE-APPELLANT" }, /* Contestee-appellant */ + { "cur", "CURATOR" }, /* Curator */ + { "cwt", "COMMENTATOR_FOR_WRITTEN_TEXT" }, /* Commentator for written text */ + { "dbp", "DISTRIBUTION_PLACE" }, /* Distribution place */ + { "degree grantor", "DEGREEGRANTOR" }, + { "dfd", "DEFENDANT" }, /* Defendant */ + { "dfe", "DEFENDANT-APPELLEE" }, /* Defendant-appellee */ + { "dft", "DEFENDANT-APPELLANT" }, /* Defendant-appellant */ + { "dgg", "DEGREEGRANTOR" }, /* Degree granting institution */ + { "dgs", "DEGREE_SUPERVISOR" }, /* Degree supervisor */ + { "dis", "DISSERTANT" }, /* Dissertant */ + { "dln", "DELINEATOR" }, /* Delineator */ + { "dnc", "DANCER" }, /* Dancer */ + { "dnr", "DONOR" }, /* Donor */ + { "dpc", "DEPICTED" }, /* Depicted */ + { "dpt", "DEPOSITOR" }, /* Depositor */ + { "drm", "DRAFTSMAN" }, /* Draftsman */ + { "drt", "DIRECTOR" }, /* Director */ + { "dsr", "DESIGNER" }, /* Designer */ + { "dst", "DISTRIBUTOR" }, /* Distributor */ + { "dtc", "DATA_CONTRIBUTOR" }, /* Data contributor */ + { "dte", "DEDICATEE" }, /* Dedicatee */ + { "dtm", "DATA_MANAGER" }, /* Data manager */ + { "dto", "DEDICATOR" }, /* Dedicator */ + { "dub", "AUTHOR" }, /* Dubious author */ + { "edc", "EDITOR" }, /* Editor of compilation */ + { "edm", "EDITOR" }, /* Editor of moving image work */ + { "edt", "EDITOR" }, /* Editor */ + { "egr", "ENGRAVER" }, /* Engraver */ + { "elg", "ELECTRICIAN" }, /* Electrician */ + { "elt", "ELECTROTYPER" }, /* Electrotyper */ + { "eng", "ENGINEER" }, /* Engineer */ + { "enj", "ENACTING_JURISICTION" }, /* Enacting jurisdiction */ + { "etr", "ETCHER" }, /* Etcher */ + { "evp", "EVENT_PLACE" }, /* Event place */ + { "exp", "EXPERT" }, /* Expert */ + { "fac", "FACSIMILIST" }, /* Facsimilist */ + { "fds", "FILM_DISTRIBUTOR" }, /* Film distributor */ + { "fld", "FIELD_DIRECTOR" }, /* Field director */ + { "flm", "FILM_EDITOR" }, /* Film editor */ + { "fmd", "FILM_DIRECTOR" }, /* Film director */ + { "fmk", "FILMMAKER" }, /* Filmmaker */ + { "fmo", "FORMER_OWNER" }, /* Former owner */ + { "fmp", "FILM_PRODUCER" }, /* Film producer */ + { "fnd", "FUNDER" }, /* Funder */ + { "fpy", "FIRST_PARTY" }, /* First party */ + { "frg", "FORGER" }, /* Forger */ + { "gis", "GEOGRAPHIC_INFORMATON_SPECIALIST" }, /* Geographic information specialist */ + { "grt", "GRAPHIC_TECHNICIAN" }, /* Graphic technician */ + { "his", "HOST_INSTITUTION" }, /* Host institution */ + { "hnr", "HONOREE" }, /* Honoree */ + { "hst", "HOST" }, /* Host */ + { "ill", "ILLUSTRATOR" }, /* Illustrator */ + { "ilu", "ILLUMINATOR" }, /* Illuminator */ + { "ins", "INSCRIBER" }, /* Inscriber */ + { "inv", "INVENTOR" }, /* Inventor */ + { "isb", "ISSUING_BODY" }, /* Issuing body */ + { "itr", "INSTRUMENTALIST" }, /* Instrumentalist */ + { "ive", "INTERVIEWEE" }, /* Interviewee */ + { "ivr", "INTERVIEWER" }, /* Interviewer */ + { "jud", "JUDGE" }, /* Judge */ + { "jug", "JURISDICTION_GOVERNED" }, /* Jurisdiction governed */ + { "lbr", "LABORATORY" }, /* Laboratory */ + { "lbt", "LIBRETTIST" }, /* Librettist */ + { "ldr", "LABORATORY_DIRECTORY" }, /* Laboratory director */ + { "led", "LEAD" }, /* Lead */ + { "lee", "LIBELEE-APPELLEE" }, /* Libelee-appellee */ + { "lel", "LIBELEE" }, /* Libelee */ + { "len", "LENDER" }, /* Lender */ + { "let", "LIBELEE-APPELLANT" }, /* Libelee-appellant */ + { "lgd", "LIGHTING_DESIGNER" }, /* Lighting designer */ + { "lie", "LIBELANT-APPELLEE" }, /* Libelant-appellee */ + { "lil", "LIBELANT" }, /* Libelant */ + { "lit", "LIBELANT-APPELLANT" }, /* Libelant-appellant */ + { "lsa", "LANDSCAPE_ARCHITECT" }, /* Landscape architect */ + { "lse", "LICENSEE" }, /* Licensee */ + { "lso", "LICENSOR" }, /* Licensor */ + { "ltg", "LITHOGRAPHER" }, /* Lithographer */ + { "lyr", "LYRICIST" }, /* Lyricist */ + { "mcp", "MUSIC_COPYIST" }, /* Music copyist */ + { "mdc", "METADATA_CONTACT" }, /* Metadata contact */ + { "med", "MEDIUM" }, /* Medium */ + { "mfp", "MANUFACTURE_PLACE" }, /* Manufacture place */ + { "mfr", "MANUFACTURER" }, /* Manufacturer */ + { "mod", "MODERATOR" }, /* Moderator */ + { "mon", "THESIS_EXAMINER" }, /* Monitor */ + { "mrb", "MARBLER" }, /* Marbler */ + { "mrk", "EDITOR" }, /* Markup editor */ + { "msd", "MUSICAL_DIRECTOR" }, /* Musical director */ + { "mte", "METAL-ENGRAVER" }, /* Metal-engraver */ + { "mtk", "MINUTE_TAKER" }, /* Minute taker */ + { "mus", "MUSICIAN" }, /* Musician */ + { "nrt", "NARRATOR" }, /* Narrator */ + { "opn", "THESIS_OPPONENT" }, /* Opponent */ + { "org", "ORIGINATOR" }, /* Originator */ + { "organizer of meeting", "ORGANIZER" }, + { "orm", "ORGANIZER" }, /* Organizer */ + { "osp", "ONSCREEN_PRESENTER" }, /* Onscreen presenter */ + { "oth", "THESIS_OTHER" }, /* Other */ + { "own", "OWNER" }, /* Owner */ + { "pan", "PANELIST" }, /* Panelist */ + { "pat", "PATRON" }, /* Patron */ + { "patent holder", "ASSIGNEE" }, + { "pbd", "PUBLISHING_DIRECTOR" }, /* Publishing director */ + { "pbl", "PUBLISHER" }, /* Publisher */ + { "pdr", "PROJECT_DIRECTOR" }, /* Project director */ + { "pfr", "PROOFREADER" }, /* Proofreader */ + { "pht", "PHOTOGRAPHER" }, /* Photographer */ + { "plt", "PLATEMAKER" }, /* Platemaker */ + { "pma", "PERMITTING_AGENCY" }, /* Permitting agency */ + { "pmn", "PRODUCTION_MANAGER" }, /* Production manager */ + { "pop", "PRINTER_OF_PLATES" }, /* Printer of plates */ + { "ppm", "PAPERMAKER" }, /* Papermaker */ + { "ppt", "PUPPETEER" }, /* Puppeteer */ + { "pra", "PRAESES" }, /* Praeses */ + { "prc", "PROCESS_CONTRACT" }, /* Process contact */ + { "prd", "PRODUCTION_PERSONNEL" }, /* Production personnel */ + { "pre", "PRESENTER" }, /* Presenter */ + { "prf", "PERFORMER" }, /* Performer */ + { "prg", "AUTHOR" }, /* Programmer */ + { "prm", "PRINTMAKER" }, /* Printmaker */ + { "prn", "PRODUCTION_COMPANY" }, /* Production company */ + { "pro", "PRODUCER" }, /* Producer */ + { "prp", "PRODUCTION_PLACE" }, /* Production place */ + { "prs", "PRODUCTION_DESIGNER" }, /* Production designer */ + { "prt", "PRINTER" }, /* Printer */ + { "prv", "PROVIDER" }, /* Provider */ + { "pta", "PATENT_APPLICANT" }, /* Patent applicant */ + { "pte", "PLAINTIFF-APPELLEE" }, /* Plaintiff-appellee */ + { "ptf", "PLAINTIFF" }, /* Plaintiff */ + { "pth", "ASSIGNEE" }, /* Patent holder */ + { "ptt", "PLAINTIFF-APPELLANT" }, /* Plaintiff-appellant */ + { "pup", "PUBLICATION_PLACE" }, /* Publication place */ + { "rbr", "RUBRICATOR" }, /* Rubricator */ + { "rcd", "RECORDIST" }, /* Recordist */ + { "rce", "RECORDING_ENGINEER" }, /* Recording engineer */ + { "rcp", "ADDRESSEE" }, /* Addressee */ + { "rdd", "RADIO_DIRECTOR" }, /* Radio director */ + { "red", "REDAKTOR" }, /* Redaktor */ + { "ren", "RENDERER" }, /* Renderer */ + { "res", "RESEARCHER" }, /* Researcher */ + { "rev", "REVIEWER" }, /* Reviewer */ + { "rpc", "RADIO_PRODUCER" }, /* Radio producer */ + { "rps", "REPOSITORY" }, /* Repository */ + { "rpt", "REPORTER" }, /* Reporter */ + { "rpy", "RESPONSIBLE_PARTY" }, /* Responsible party */ + { "rse", "RESPONDENT-APPELLEE" }, /* Respondent-appellee */ + { "rsg", "RESTAGER" }, /* Restager */ + { "rsp", "RESPONDENT" }, /* Respondent */ + { "rsr", "RESTORATIONIST" }, /* Restorationist */ + { "rst", "RESPONDENT-APPELLANT" }, /* Respondent-appellant */ + { "rth", "RESEARCH_TEAM_HEAD" }, /* Research team head */ + { "rtm", "RESEARCH_TEAM_MEMBER" }, /* Research team member */ + { "sad", "SCIENTIFIC_ADVISOR" }, /* Scientific advisor */ + { "sce", "SCENARIST" }, /* Scenarist */ + { "scl", "SCULPTOR" }, /* Sculptor */ + { "scr", "SCRIBE" }, /* Scribe */ + { "sds", "SOUND_DESIGNER" }, /* Sound designer */ + { "sec", "SECRETARY" }, /* Secretary */ + { "sgd", "STAGE_DIRECTOR" }, /* Stage director */ + { "sgn", "SIGNER" }, /* Signer */ + { "sht", "SUPPORTING_HOST" }, /* Supporting host */ + { "sll", "SELLER" }, /* Seller */ + { "sng", "SINGER" }, /* Singer */ + { "spk", "SPEAKER" }, /* Speaker */ + { "spn", "SPONSOR" }, /* Sponsor */ + { "spy", "SECOND_PARTY" }, /* Second party */ + { "srv", "SURVEYOR" }, /* Surveyor */ + { "std", "SET_DESIGNER" }, /* Set designer */ + { "stg", "SETTING" }, /* Setting */ + { "stl", "STORYTELLER" }, /* Storyteller */ + { "stm", "STAGE_MANAGER" }, /* Stage manager */ + { "stn", "STANDARDS_BODY" }, /* Standards body */ + { "str", "STEREOTYPER" }, /* Stereotyper */ + { "tcd", "TECHNICAL_DIRECTOR" }, /* Technical director */ + { "tch", "TEACHER" }, /* Teacher */ + { "ths", "THESIS_ADVISOR" }, /* Thesis advisor */ + { "tld", "TELEVISION_DIRECTOR" }, /* Television director */ + { "tlp", "TELEVISION_PRODUCER" }, /* Television producer */ + { "trc", "TRANSCRIBER" }, /* Transcriber */ + { "trl", "TRANSLATOR" }, /* Translator */ + { "tyd", "TYPE_DIRECTOR" }, /* Type designer */ + { "tyg", "TYPOGRAPHER" }, /* Typographer */ + { "uvp", "UNIVERSITY_PLACE" }, /* University place */ + { "vac", "VOICE_ACTOR" }, /* Voice actor */ + { "vdg", "VIDEOGRAPHER" }, /* Videographer */ + { "voc", "VOCALIST" }, /* Vocalist */ + { "wac", "AUTHOR" }, /* Writer of added commentary */ + { "wal", "AUTHOR" }, /* Writer of added lyrics */ + { "wam", "AUTHOR" }, /* Writer of accompanying material */ + { "wat", "AUTHOR" }, /* Writer of added text */ + { "wdc", "WOODCUTTER" }, /* Woodcutter */ + { "wde", "WOOD_ENGRAVER" }, /* Wood engraver */ + { "win", "AUTHOR" }, /* Writer of introduction */ + { "wit", "WITNESS" }, /* Witness */ + { "wpr", "AUTHOR" }, /* Writer of preface */ + { "wst", "AUTHOR" }, /* Writer of supplementary textual content */ +}; + +static const int nrealtors = sizeof( relators ) / sizeof( relators[0] ); + +char * +marc_convertrole( const char *query ) +{ + int i; + + for ( i=0; i<nrealtors; ++i ) { + if ( !strcasecmp( query, relators[i].abbreviation ) ) + return relators[i].internal_name; + } + return NULL; +} + +static int +position_in_list( const char *list[], int nlist, const char *query ) +{ + int i; + for ( i=0; i<nlist; ++i ) { + if ( !strcasecmp( query, list[i] ) ) return i; + } + return -1; +} + +int +marc_findgenre( const char *query ) +{ + return position_in_list( marc_genre, nmarc_genre, query ); +} + +int +is_marc_genre( const char *query ) +{ + if ( marc_findgenre( query ) != -1 ) return 1; + else return 0; +} + +int +marc_findresource( const char *query ) +{ + return position_in_list( marc_resource, nmarc_resource, query ); +} + +int +is_marc_resource( const char *query ) +{ + if ( marc_findresource( query ) != -1 ) return 1; + else return 0; +} |