From 87090d8ae7582708d20f3c09fb37d780af860bcd Mon Sep 17 00:00:00 2001 From: tcit Date: Thu, 24 Apr 2014 03:04:02 +0200 Subject: Added epub export function --- inc/3rdparty/libraries/PHPePub/EPub.OPF.php | 1226 +++++++++++++++++++++++++++ 1 file changed, 1226 insertions(+) create mode 100644 inc/3rdparty/libraries/PHPePub/EPub.OPF.php (limited to 'inc/3rdparty/libraries/PHPePub/EPub.OPF.php') diff --git a/inc/3rdparty/libraries/PHPePub/EPub.OPF.php b/inc/3rdparty/libraries/PHPePub/EPub.OPF.php new file mode 100644 index 00000000..803a2108 --- /dev/null +++ b/inc/3rdparty/libraries/PHPePub/EPub.OPF.php @@ -0,0 +1,1226 @@ + + * @copyright 2009-2014 A. Grandt + * @license GNU LGPL, Attribution required for commercial implementations, requested for everything else. + * @version 3.20 + */ +class Opf { + const _VERSION = 3.20; + + /* Core Media types. + * These types are the only guaranteed mime types any ePub reader must understand. + * Any other type muse define a fall back whose fallback chain will end in one of these. + */ + const TYPE_GIF = "image/gif"; + const TYPE_JPEG = "image/jpeg"; + const TYPE_PNG = "image/png"; + const TYPE_SVG = "image/svg+xml"; + const TYPE_XHTML = "application/xhtml+xml"; + const TYPE_DTBOOK = "application/x-dtbook+xml"; + const TYPE_CSS = "text/css"; + const TYPE_XML = "application/xml"; + const TYPE_OEB1_DOC = "text/x-oeb1-document"; // Deprecated + const TYPE_OEB1_CSS = "text/x-oeb1-css"; // Deprecated + const TYPE_NCX = "application/x-dtbncx+xml"; + + private $bookVersion = EPub::BOOK_VERSION_EPUB2; + private $ident = "BookId"; + + public $date = NULL; + public $metadata = NULL; + public $manifest = NULL; + public $spine = NULL; + public $guide = NULL; + + /** + * Class constructor. + * + * @return void + */ + function __construct($ident = "BookId", $bookVersion = EPub::BOOK_VERSION_EPUB2) { + $this->setIdent($ident); + $this->setVersion($bookVersion); + $this->metadata = new Metadata(); + $this->manifest = new Manifest(); + $this->spine = new Spine(); + $this->guide = new Guide(); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->bookVersion, $this->ident, $this->date, $this->metadata, $this->manifest, $this->spine, $this->guide); + } + + /** + * + * Enter description here ... + * + * @param string $ident + */ + function setVersion($bookVersion) { + $this->bookVersion = is_string($bookVersion) ? trim($bookVersion) : EPub::BOOK_VERSION_EPUB2; + } + + function isEPubVersion2() { + return $this->bookVersion === EPub::BOOK_VERSION_EPUB2; + } + + /** + * + * Enter description here ... + * + * @param string $ident + */ + function setIdent($ident = "BookId") { + $this->ident = is_string($ident) ? trim($ident) : "BookId"; + } + + /** + * + * Enter description here ... + * + * @return string + */ + function finalize() { + $opf = "\n" + . "ident . "\" version=\"" . $this->bookVersion . "\">\n"; + + $opf .= $this->metadata->finalize($this->bookVersion, $this->date); + $opf .= $this->manifest->finalize($this->bookVersion); + $opf .= $this->spine->finalize(); + + if ($this->guide->length() > 0) { + $opf .= $this->guide->finalize(); + } + + return $opf . "\n"; + } + + // Convenience functions: + + /** + * + * Enter description here ... + * + * @param string $title + * @param string $language + * @param string $identifier + * @param string $identifierScheme + */ + function initialize($title, $language, $identifier, $identifierScheme) { + $this->metadata->addDublinCore(new DublinCore("title", $title)); + $this->metadata->addDublinCore(new DublinCore("language", $language)); + + $dc = new DublinCore("identifier", $identifier); + $dc->addAttr("id", $this->ident); + $dc->addOpfAttr("scheme", $identifierScheme); + $this->metadata->addDublinCore($dc); + } + + /** + * + * Enter description here ... + * + * @param string $id + * @param string $href + * @param string $mediaType + */ + function addItem($id, $href, $mediaType, $properties = NULL) { + $this->manifest->addItem(new Item($id, $href, $mediaType, $properties)); + } + + /** + * + * Enter description here ... + * + * @param string $idref + * @param bool $linear + */ + function addItemRef($idref, $linear = TRUE) { + $this->spine->addItemref(new Itemref($idref, $linear)); + } + + /** + * + * Enter description here ... + * + * @param string $type + * @param string $title + * @param string $href + */ + function addReference($type, $title, $href) { + $this->guide->addReference(new Reference($type, $title, $href)); + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $value + */ + function addDCMeta($name, $value) { + $this->metadata->addDublinCore(new DublinCore($name, $value)); + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $content + */ + function addMeta($name, $content) { + $this->metadata->addMeta($name, $content); + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $fileAs + * @param string $role Use the MarcCode constants + */ + function addCreator($name, $fileAs = NULL, $role = NULL) { + $dc = new DublinCore(DublinCore::CREATOR, trim($name)); + + if ($fileAs !== NULL) { + $dc->addOpfAttr("file-as", trim($fileAs)); + } + + if ($role !== NULL) { + $dc->addOpfAttr("role", trim($role)); + } + + $this->metadata->addDublinCore($dc); + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $fileAs + * @param string $role Use the MarcCode constants + */ + function addColaborator($name, $fileAs = NULL, $role = NULL) { + $dc = new DublinCore(DublinCore::CONTRIBUTOR, trim($name)); + + if ($fileAs !== NULL) { + $dc->addOpfAttr("file-as", trim($fileAs)); + } + + if ($role !== NULL) { + $dc->addOpfAttr("role", trim($role)); + } + + $this->metadata->addDublinCore($dc); + } +} + +/** + * ePub OPF Metadata structures + */ +class Metadata { + const _VERSION = 3.00; + + private $dc = array(); + private $meta = array(); + + /** + * Class constructor. + * + * @return void + */ + function __construct() { + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->dc, $this->meta); + } + + /** + * + * Enter description here ... + * + * @param DublinCore $dc + */ + function addDublinCore($dc) { + if ($dc != NULL && is_object($dc) && get_class($dc) === "DublinCore") { + $this->dc[] = $dc; + } + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $content + */ + function addMeta($name, $content) { + $name = is_string($name) ? trim($name) : NULL; + if (isset($name)) { + $content = is_string($content) ? trim($content) : NULL; + } + if (isset($content)) { + $this->meta[] = array ($name => $content); + } + } + + /** + * + * @param string $bookVersion + * @param int $date + * @return string + */ + function finalize($bookVersion = EPub::BOOK_VERSION_EPUB2, $date = NULL) { + $metadata = "\t\n"; + } else { + $metadata .= "\t\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"; + if (!isset($date)) { + $date = time(); + } + $metadata .= "\t\t" . gmdate("Y-m-d\TH:i:s\Z", $date) . "\n"; + } + + foreach ($this->dc as $dc) { + $metadata .= $dc->finalize($bookVersion); + } + + foreach ($this->meta as $data) { + list($name, $content) = each($data); + $metadata .= "\t\t\n"; + } + + return $metadata . "\t\n"; + } +} + +/** + * ePub OPF Dublin Core (dc:) Metadata structures + */ +class DublinCore { + const _VERSION = 3.00; + + const CONTRIBUTOR = "contributor"; + const COVERAGE = "coverage"; + const CREATOR = "creator"; + const DATE = "date"; + const DESCRIPTION = "description"; + const FORMAT = "format"; + const IDENTIFIER = "identifier"; + const LANGUAGE = "language"; + const PUBLISHER = "publisher"; + const RELATION = "relation"; + const RIGHTS = "rights"; + const SOURCE = "source"; + const SUBJECT = "subject"; + const TITLE = "title"; + const TYPE = "type"; + + private $dcName = NULL; + private $dcValue = NULL; + private $attr = array(); + private $opfAttr = array(); + + /** + * Class constructor. + * + * @return void + */ + function __construct($name, $value) { + $this->setDc($name, $value); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->dcName, $this->dcValue, $this->attr, $this->opfAttr); + } + + /** + * + * Enter description here ... + * + * @param string $name + * @param string $value + */ + function setDc($name, $value) { + $this->dcName = is_string($name) ? trim($name) : NULL; + if (isset($this->dcName)) { + $this->dcValue = isset($value) ? (string)$value : NULL; + } + if (! isset($this->dcValue)) { + $this->dcName = NULL; + } + } + + /** + * + * Enter description here ... + * + * @param string $attrName + * @param string $attrValue + */ + function addAttr($attrName, $attrValue) { + $attrName = is_string($attrName) ? trim($attrName) : NULL; + if (isset($attrName)) { + $attrValue = is_string($attrValue) ? trim($attrValue) : NULL; + } + if (isset($attrValue)) { + $this->attr[$attrName] = $attrValue; + } + } + + /** + * + * Enter description here ... + * + * @param string $opfAttrName + * @param string $opfAttrValue + */ + function addOpfAttr($opfAttrName, $opfAttrValue) { + $opfAttrName = is_string($opfAttrName) ? trim($opfAttrName) : NULL; + if (isset($opfAttrName)) { + $opfAttrValue = is_string($opfAttrValue) ? trim($opfAttrValue) : NULL; + } + if (isset($opfAttrValue)) { + $this->opfAttr[$opfAttrName] = $opfAttrValue; + } + } + + + /** + * + * @param string $bookVersion + * @return string + */ + function finalize($bookVersion = EPub::BOOK_VERSION_EPUB2) { + $dc = "\t\tdcName; + + if (sizeof($this->attr) > 0) { + while (list($name, $content) = each($this->attr)) { + $dc .= " " . $name . "=\"" . $content . "\""; + } + } + + if ($bookVersion === EPub::BOOK_VERSION_EPUB2 && sizeof($this->opfAttr) > 0) { + while (list($name, $content) = each($this->opfAttr)) { + $dc .= " opf:" . $name . "=\"" . $content . "\""; + } + } + + return $dc . ">" . $this->dcValue . "dcName . ">\n"; + } +} + +/** + * ePub OPF Manifest structure + */ +class Manifest { + const _VERSION = 3.00; + + private $items = array(); + + /** + * Class constructor. + * + * @return void + */ + function __construct() { + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->items); + } + + /** + * + * Enter description here ... + * + * @param Item $item + */ + function addItem($item) { + if ($item != NULL && is_object($item) && get_class($item) === "Item") { + $this->items[] = $item; + } + } + + /** + * + * @param string $bookVersion + * @return string + */ + function finalize($bookVersion = EPub::BOOK_VERSION_EPUB2) { + $manifest = "\n\t\n"; + foreach ($this->items as $item) { + $manifest .= $item->finalize($bookVersion); + } + return $manifest . "\t\n"; + } +} + +/** + * ePub OPF Item structure + */ +class Item { + const _VERSION = 3.00; + + private $id = NULL; + private $href = NULL; + private $mediaType = NULL; + private $properties = NULL; + private $requiredNamespace = NULL; + private $requiredModules = NULL; + private $fallback = NULL; + private $fallbackStyle = NULL; + + /** + * Class constructor. + * + * @return void + */ + function __construct($id, $href, $mediaType, $properties = NULL) { + $this->setId($id); + $this->setHref($href); + $this->setMediaType($mediaType); + $this->setProperties($properties); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->id, $this->href, $this->mediaType); + unset ($this->properties, $this->requiredNamespace, $this->requiredModules, $this->fallback, $this->fallbackStyle); + } + + /** + * + * Enter description here ... + * + * @param string $id + */ + function setId($id) { + $this->id = is_string($id) ? trim($id) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $href + */ + function setHref($href) { + $this->href = is_string($href) ? trim($href) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $mediaType + */ + function setMediaType($mediaType) { + $this->mediaType = is_string($mediaType) ? trim($mediaType) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $properties + */ + function setProperties($properties) { + $this->properties = is_string($properties) ? trim($properties) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $requiredNamespace + */ + function setRequiredNamespace($requiredNamespace) { + $this->requiredNamespace = is_string($requiredNamespace) ? trim($requiredNamespace) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $requiredModules + */ + function setRequiredModules($requiredModules) { + $this->requiredModules = is_string($requiredModules) ? trim($requiredModules) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $fallback + */ + function setfallback($fallback) { + $this->fallback = is_string($fallback) ? trim($fallback) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $fallbackStyle + */ + function setFallbackStyle($fallbackStyle) { + $this->fallbackStyle = is_string($fallbackStyle) ? trim($fallbackStyle) : NULL; + } + + /** + * + * @param string $bookVersion + * @return string + */ + function finalize($bookVersion = EPub::BOOK_VERSION_EPUB2) { + $item = "\t\tid . "\" href=\"" . $this->href . "\" media-type=\"" . $this->mediaType . "\" "; + if ($bookVersion === EPub::BOOK_VERSION_EPUB3 && isset($this->properties)) { + $item .= "properties=\"" . $this->properties . "\" "; + } + if (isset($this->requiredNamespace)) { + $item .= "\n\t\t\trequired-namespace=\"" . $this->requiredNamespace . "\" "; + if (isset($this->requiredModules)) { + $item .= "required-modules=\"" . $this->requiredModules . "\" "; + } + } + if (isset($this->fallback)) { + $item .= "\n\t\t\tfallback=\"" . $this->fallback . "\" "; + } + if (isset($this->fallbackStyle)) { + $item .= "\n\t\t\tfallback-style=\"" . $this->fallbackStyle . "\" "; + } + return $item . "/>\n"; + } +} + +/** + * ePub OPF Spine structure + */ +class Spine { + const _VERSION = 1.00; + + private $itemrefs = array(); + private $toc = NULL; + + /** + * Class constructor. + * + * @return void + */ + function __construct($toc = "ncx") { + $this->setToc($toc); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->itemrefs, $this->toc); + } + + /** + * + * Enter description here ... + * + * @param string $toc + */ + function setToc($toc) { + $this->toc = is_string($toc) ? trim($toc) : NULL; + } + + /** + * + * Enter description here ... + * + * @param Itemref $itemref + */ + function addItemref($itemref) { + if ($itemref != NULL + && is_object($itemref) + && get_class($itemref) === "Itemref" + && !isset($this->itemrefs[$itemref->getIdref()])) { + $this->itemrefs[$itemref->getIdref()] = $itemref; + } + } + + /** + * + * Enter description here ... + * + * @return string + */ + function finalize() { + $spine = "\n\ttoc . "\">\n"; + foreach ($this->itemrefs as $itemref) { + $spine .= $itemref->finalize(); + } + return $spine . "\t\n"; + } +} + +/** + * ePub OPF ItemRef structure + */ +class Itemref { + const _VERSION = 3.00; + + private $idref = NULL; + private $linear = TRUE; + + /** + * Class constructor. + * + * @return void + */ + function __construct($idref, $linear = TRUE) { + $this->setIdref($idref); + $this->setLinear($linear); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->idref, $this->linear); + } + + /** + * + * Enter description here ... + * + * @param string $idref + */ + function setIdref($idref) { + $this->idref = is_string($idref) ? trim($idref) : NULL; + } + + /** + * + * Enter description here ... + * + * @return string $idref + */ + function getIdref() { + return $this->idref; + } + + /** + * + * Enter description here ... + * + * @param bool $linear + */ + function setLinear($linear = TRUE) { + $this->linear = $linear === TRUE; + } + + /** + * + * Enter description here ... + * + * @return string + */ + function finalize() { + $itemref = "\t\tidref . "\""; + if ($this->linear == FALSE) { + return $itemref .= " linear=\"no\" />\n"; + } + return $itemref . " />\n"; + } +} + +/** + * ePub OPF Guide structure + */ +class Guide { + const _VERSION = 3.00; + + private $references = array(); + + /** + * Class constructor. + * + * @return void + */ + function __construct() { + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->references); + } + + /** + * + * Enter description here ... + * + */ + function length() { + return sizeof($this->references); + } + + /** + * + * Enter description here ... + * + * @param Reference $reference + */ + function addReference($reference) { + if ($reference != NULL && is_object($reference) && get_class($reference) === "Reference") { + $this->references[] = $reference; + } + } + + /** + * + * Enter description here ... + * + * @return string + */ + function finalize() { + $ref = ""; + if (sizeof($this->references) > 0) { + $ref = "\n\t\n"; + foreach ($this->references as $reference) { + $ref .= $reference->finalize(); + } + $ref .= "\t\n"; + } + return $ref; + } +} + +/** + * Reference constants + */ +class Reference { + const _VERSION = 1.00; + + /* REFERENCE types are derived from the "Chicago Manual of Style" + */ + + /** Acknowledgements page */ + const ACKNOWLEDGEMENTS = "acknowledgements"; + + /** Bibliography page */ + const BIBLIOGRAPHY = "bibliography"; + + /** Colophon page */ + const COLOPHON = "colophon"; + + /** Copyright page */ + const COPYRIGHT_PAGE = "copyright-page"; + + /** Dedication */ + const DEDICATION = "dedication"; + + /** Epigraph */ + const EPIGRAPH = "epigraph"; + + /** Foreword */ + const FOREWORD = "foreword"; + + /** Glossary page */ + const GLOSSARY = "glossary"; + + /** back-of-book style index */ + const INDEX = "index"; + + /** List of illustrations */ + const LIST_OF_ILLUSTRATIONS = "loi"; + + /** List of tables */ + const LIST_OF_TABLES = "lot"; + + /** Notes page */ + const NOTES = "notes"; + + /** Preface page */ + const PREFACE = "preface"; + + /** Table of contents */ + const TABLE_OF_CONTENTS = "toc"; + + /** Page with possibly title, author, publisher, and other metadata */ + const TITLE_PAGE = "titlepage"; + + /** First page of the book, ie. first page of the first chapter */ + const TEXT = "text"; + + // ****************** + // ePub3 constants + // ****************** + + // Document partitions + /** The publications cover(s), jacket information, etc. This is officially in ePub3, but works for ePub 2 as well */ + const COVER = "cover"; + + /** Preliminary material to the content body, such as tables of contents, dedications, etc. */ + const FRONTMATTER = "frontmatter"; + + /** The main (body) content of a document. */ + const BODYMATTER = "bodymatter"; + + /** Ancillary material occurring after the document body, such as indices, appendices, etc. */ + const BACKMATTER = "backmatter"; + + + private $type = NULL; + private $title = NULL; + private $href = NULL; + + /** + * Class constructor. + * + * @param string $type + * @param string $title + * @param string $href + */ + function __construct($type, $title, $href) { + $this->setType($type); + $this->setTitle($title); + $this->setHref($href); + } + + /** + * Class destructor + * + * @return void + */ + function __destruct() { + unset ($this->type, $this->title, $this->href); + } + + /** + * + * Enter description here ... + * + * @param string $type + */ + function setType($type) { + $this->type = is_string($type) ? trim($type) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $title + */ + function setTitle($title) { + $this->title = is_string($title) ? trim($title) : NULL; + } + + /** + * + * Enter description here ... + * + * @param string $href + */ + function setHref($href) { + $this->href = is_string($href) ? trim($href) : NULL; + } + + /** + * + * Enter description here ... + * + * @return string + */ + function finalize() { + return "\t\ttype . "\" title=\"" . $this->title . "\" href=\"" . $this->href . "\" />\n"; + } +} + +/** + * Common Marc codes. + * Ref: http://www.loc.gov/marc/relators/ + */ +class MarcCode { + const _VERSION = 3.00; + + /** + * Adapter + * + * Use for a person who + * 1) reworks a musical composition, usually for a different medium, or + * 2) rewrites novels or stories for motion pictures or other audiovisual medium. + */ + const ADAPTER = "adp"; + + /** + * Annotator + * + * Use for a person who writes manuscript annotations on a printed item. + */ + const ANNOTATOR = "ann"; + + /** + * Arranger + * + * Use for a person who transcribes a musical composition, usually for a different + * medium from that of the original; in an arrangement the musical substance remains + * essentially unchanged. + */ + const ARRANGER = "arr"; + + /** + * Artist + * + * Use for a person (e.g., a painter) who conceives, and perhaps also implements, + * an original graphic design or work of art, if specific codes (e.g., [egr], + * [etr]) are not desired. For book illustrators, prefer Illustrator [ill]. + */ + const ARTIST = "art"; + + /** + * Associated name + * + * Use as a general relator for a name associated with or found in an item or + * collection, or which cannot be determined to be that of a Former owner [fmo] + * or other designated relator indicative of provenance. + */ + const ASSOCIATED_NAME = "asn"; + + /** + * Author + * + * Use for a person or corporate body chiefly responsible for the intellectual + * or artistic content of a work. This term may also be used when more than one + * person or body bears such responsibility. + */ + const AUTHOR = "aut"; + + /** + * Author in quotations or text extracts + * + * Use for a person whose work is largely quoted or extracted in a works to which + * he or she did not contribute directly. Such quotations are found particularly + * in exhibition catalogs, collections of photographs, etc. + */ + const AUTHOR_IN_QUOTES = "aqt"; + + /** + * Author of afterword, colophon, etc. + * + * Use for a person or corporate body responsible for an afterword, postface, + * colophon, etc. but who is not the chief author of a work. + */ + const AUTHOR_OF_AFTERWORD = "aft"; + + /** + * Author of introduction, etc. + * + * Use for a person or corporate body responsible for an introduction, preface, + * foreword, or other critical matter, but who is not the chief author. + */ + const AUTHOR_OF_INTRO = "aui"; + + /** + * Bibliographic antecedent + * + * Use for the author responsible for a work upon which the work represented by + * the catalog record is based. This can be appropriate for adaptations, sequels, + * continuations, indexes, etc. + */ + const BIB_ANTECEDENT = "ant"; + + /** + * Book producer + * + * Use for the person or firm responsible for the production of books and other + * print media, if specific codes (e.g., [bkd], [egr], [tyd], [prt]) are not desired. + */ + const BOOK_PRODUCER = "bkp"; + + /** + * Collaborator + * + * Use for a person or corporate body that takes a limited part in the elaboration + * of a work of another author or that brings complements (e.g., appendices, notes) + * to the work of another author. + */ + const COLABORATOR = "clb"; + + /** + * Commentator + * + * Use for a person who provides interpretation, analysis, or a discussion of the + * subject matter on a recording, motion picture, or other audiovisual medium. + * Compiler [com] Use for a person who produces a work or publication by selecting + * and putting together material from the works of various persons or bodies. + */ + const COMMENTATOR = "cmm"; + + /** + * Designer + * + * Use for a person or organization responsible for design if specific codes (e.g., + * [bkd], [tyd]) are not desired. + */ + const DESIGNER = "dsr"; + + /** + * Editor + * + * Use for a person who prepares for publication a work not primarily his/her own, + * such as by elucidating text, adding introductory or other critical matter, or + * technically directing an editorial staff. + */ + const EDITORT = "edt"; + + /** + * Illustrator + * + * Use for the person who conceives, and perhaps also implements, a design or + * illustration, usually to accompany a written text. + */ + const ILLUSTRATOR = "ill"; + + /** + * Lyricist + * + * Use for the writer of the text of a song. + */ + const LYRICIST = "lyr"; + + /** + * Metadata contact + * + * Use for the person or organization primarily responsible for compiling and + * maintaining the original description of a metadata set (e.g., geospatial + * metadata set). + */ + const METADATA_CONTACT = "mdc"; + + /** + * Musician + * + * Use for the person who performs music or contributes to the musical content + * of a work when it is not possible or desirable to identify the function more + * precisely. + */ + const MUSICIAN = "mus"; + + /** + * Narrator + * + * Use for the speaker who relates the particulars of an act, occurrence, or + * course of events. + */ + const NARRATOR = "nrt"; + + /** + * Other + * + * Use for relator codes from other lists which have no equivalent in the MARC + * list or for terms which have not been assigned a code. + */ + const OTHER = "oth"; + + /** + * Photographer + * + * Use for the person or organization responsible for taking photographs, whether + * they are used in their original form or as reproductions. + */ + const PHOTOGRAPHER = "pht"; + + /** + * Printer + * + * Use for the person or organization who prints texts, whether from type or plates. + */ + const PRINTER = "prt"; + + /** + * Redactor + * + * Use for a person who writes or develops the framework for an item without + * being intellectually responsible for its content. + */ + const REDACTOR = "red"; + + /** + * Reviewer + * + * Use for a person or corporate body responsible for the review of book, motion + * picture, performance, etc. + */ + const REVIEWER = "rev"; + + /** + * Sponsor + * + * Use for the person or agency that issued a contract, or under whose auspices + * a work has been written, printed, published, etc. + */ + const SPONSOR = "spn"; + + /** + * Thesis advisor + * + * Use for the person under whose supervision a degree candidate develops and + * presents a thesis, memoir, or text of a dissertation. + */ + const THESIS_ADVISOR = "ths"; + + /** + * Transcriber + * + * Use for a person who prepares a handwritten or typewritten copy from original + * material, including from dictated or orally recorded material. + */ + const TRANSCRIBER = "trc"; + + /** + * Translator + * + * Use for a person who renders a text from one language into another, or from + * an older form of a language into the modern form. + */ + const TRANSLATOR = "trl"; +} +?> -- cgit v1.2.3