All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.citation.Chicago Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.citation;

import java.net.MalformedURLException;
import java.net.URL;

import com.hfg.css.CSS;
import com.hfg.exception.ProgrammingException;
import com.hfg.html.HTMLTag;
import com.hfg.html.Span;
import com.hfg.util.StringBuilderPlus;
import com.hfg.util.StringUtil;
import com.hfg.util.collection.CollectionUtil;
import com.hfg.xml.msofficexml.docx.Docx;
import com.hfg.xml.msofficexml.docx.wordprocessingml.WmlParagraph;


//------------------------------------------------------------------------------
/**
 Chicago Manual of Style (CMS) citation style.
 
@author J. Alex Taylor, hairyfatguy.com
*/ //------------------------------------------------------------------------------ // com.hfg XML/HTML Coding Library // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com // [email protected] //------------------------------------------------------------------------------ public class Chicago implements CitationFormat { //--------------------------------------------------------------------------- @Override public HTMLTag generateAsHTML(Citation inCitation) { HTMLTag tag; switch (inCitation.getType()) { case journal: tag = generateJournalCitationAsHTML(inCitation); break; case software: tag = generateSoftwareCitationAsHTML(inCitation); break; default: throw new ProgrammingException("No support for " + inCitation.getType() + " citations yet!"); } return tag; } //--------------------------------------------------------------------------- @Override public WmlParagraph generateAsDocx(Citation inCitation, Docx inParentDoc) { WmlParagraph p; switch (inCitation.getType()) { case journal: p = generateJournalCitationAsDocx(inCitation, inParentDoc); break; case software: p = generateSoftwareCitationAsDocx(inCitation, inParentDoc); break; default: throw new ProgrammingException("No support for " + inCitation.getType() + " citations yet!"); } return p; } //--------------------------------------------------------------------------- private String generateAuthorListForBibliography(Citation inCitation) { StringBuilderPlus authorList = null; if (CollectionUtil.hasValues(inCitation.getAuthors())) { authorList = new StringBuilderPlus().setDelimiter(", "); for (int i = 1; i <= inCitation.getAuthors().size(); i++) { Author author = inCitation.getAuthors().get(i - 1); if (1 == i) { // First Author authorList.append(author.getLastName()); authorList.delimitedAppend(author.getFirstName()); if (1 == author.getFirstName().length()) { authorList.append("."); } Character middleInitial = author.getMiddleInitial(); if (middleInitial != null) { authorList.append(" " + middleInitial + "."); } } else if (inCitation.getAuthors().size() == i) { // Last author authorList.delimitedAppend("and "); authorList.append(author.getFirstName()); if (1 == author.getFirstName().length()) { authorList.append("."); } Character middleInitial = author.getMiddleInitial(); if (middleInitial != null) { authorList.append(" " + middleInitial + "."); } authorList.append(" " + author.getLastName()); } else { authorList.delimitedAppend(author.getFirstName()); if (1 == author.getFirstName().length()) { authorList.append("."); } Character middleInitial = author.getMiddleInitial(); if (middleInitial != null) { authorList.append(" " + middleInitial + "."); } authorList.append(" " + author.getLastName()); } } } return authorList != null ? authorList.toString() : null; } //--------------------------------------------------------------------------- private HTMLTag generateJournalCitationAsHTML(Citation inCitation) { Span tag = new Span(); String authorList = generateAuthorListForBibliography(inCitation); if (StringUtil.isSet(authorList)) { tag.addContent(authorList); } if (StringUtil.isSet(inCitation.getTitle())) { tag.addContent(" \"" + inCitation.getTitle() + ",\""); } if (StringUtil.isSet(inCitation.getJournal())) { tag.addContent(" "); tag.addSpan(inCitation.getJournal()).addStyle(CSS.ITALIC); tag.addContent(", "); } if (StringUtil.isSet(inCitation.getVolume())) { tag.addContent(" " + inCitation.getVolume()); } if (StringUtil.isSet(inCitation.getIssue())) { tag.addContent(", no. " + inCitation.getIssue()); } if (inCitation.getYear() != null) { tag.addContent(" (" + inCitation.getYear() + ")"); } if (StringUtil.isSet(inCitation.getPages())) { tag.addContent(": " + inCitation.getPages() + "."); } if (StringUtil.isSet(inCitation.getDOI())) { tag.addContent(" "); if (!inCitation.getDOI().startsWith("doi")) { tag.addContent("doi:"); } tag.addContent(inCitation.getDOI()); } if (StringUtil.isSet(inCitation.getURL())) { tag.addContent(" "); tag.addLink(inCitation.getURL(), inCitation.getURL()); } return tag; } //--------------------------------------------------------------------------- private WmlParagraph generateJournalCitationAsDocx(Citation inCitation, Docx inParentDoc) { WmlParagraph p = new WmlParagraph(inParentDoc); String authorList = generateAuthorListForBibliography(inCitation); if (StringUtil.isSet(authorList)) { p.addTextRun(authorList); } if (StringUtil.isSet(inCitation.getTitle())) { p.addTextRun(" \"" + inCitation.getTitle() + ",\""); } if (StringUtil.isSet(inCitation.getJournal())) { p.addTextRun(" "); p.addTextRun(inCitation.getJournal()).getProperties().setItalics(); p.addTextRun(", "); } if (StringUtil.isSet(inCitation.getVolume())) { p.addTextRun(" " + inCitation.getVolume()); } if (StringUtil.isSet(inCitation.getIssue())) { p.addTextRun(", no. " + inCitation.getIssue()); } if (inCitation.getYear() != null) { p.addTextRun(" (" + inCitation.getYear() + ")"); } if (StringUtil.isSet(inCitation.getPages())) { p.addTextRun(": " + inCitation.getPages() + "."); } if (StringUtil.isSet(inCitation.getDOI())) { p.addTextRun(" "); if (!inCitation.getDOI().startsWith("doi")) { p.addTextRun("doi:"); } p.addTextRun(inCitation.getDOI()); } if (StringUtil.isSet(inCitation.getURL())) { p.addTextRun(" "); try { p.addHyperlink(new URL(inCitation.getURL()), inCitation.getURL()); } catch (MalformedURLException e) { throw new RuntimeException(e); } } return p; } //--------------------------------------------------------------------------- private HTMLTag generateSoftwareCitationAsHTML(Citation inCitation) { Span tag = new Span(); String authorList = generateAuthorListForBibliography(inCitation); if (StringUtil.isSet(authorList)) { tag.addContent(authorList + "."); } if (StringUtil.isSet(inCitation.getTitle())) { tag.addSpan(inCitation.getTitle()).addStyle(CSS.ITALIC); if (StringUtil.isSet(inCitation.getVersion())) { tag.addContent(" (version " + inCitation.getVersion() + ")"); } tag.addContent(" [Computer software]."); } if (StringUtil.isSet(inCitation.getPlaceOfPublication())) { tag.addContent(" " + inCitation.getPlaceOfPublication() + ":"); } if (StringUtil.isSet(inCitation.getPublisher())) { tag.addContent(" " + inCitation.getPublisher() + (inCitation.getPublisher().endsWith(".") ? "" : ".")); } if (inCitation.getYear() != null) { tag.addContent(", " + inCitation.getYear() + "."); } return tag; } //--------------------------------------------------------------------------- private WmlParagraph generateSoftwareCitationAsDocx(Citation inCitation, Docx inParentDoc) { WmlParagraph p = new WmlParagraph(inParentDoc); String authorList = generateAuthorListForBibliography(inCitation); if (StringUtil.isSet(authorList)) { p.addTextRun(authorList + "."); } if (StringUtil.isSet(inCitation.getTitle())) { p.addTextRun(inCitation.getTitle()).getProperties().setItalics(); if (StringUtil.isSet(inCitation.getVersion())) { p.addTextRun(" (version " + inCitation.getVersion() + ")"); } p.addTextRun(" [Computer software]."); } if (StringUtil.isSet(inCitation.getPlaceOfPublication())) { p.addTextRun(" " + inCitation.getPlaceOfPublication() + ":"); } if (StringUtil.isSet(inCitation.getPublisher())) { p.addTextRun(" " + inCitation.getPublisher() + (inCitation.getPublisher().endsWith(".") ? "" : ".")); } if (inCitation.getYear() != null) { p.addTextRun(", " + inCitation.getYear() + "."); } return p; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy