From 22c38c3ff47cfdb9c2ac88128a24efe2cda828a6 Mon Sep 17 00:00:00 2001 From: henrikjust Date: Fri, 28 Jan 2011 21:18:52 +0000 Subject: [PATCH] JabRef support git-svn-id: svn://svn.code.sf.net/p/writer2latex/code/trunk@85 f0f2a975-2e09-46c8-9428-3b39399b9f3c --- source/distro/changelog.txt | 5 +- source/distro/doc/user-manual.odt | Bin 51332 -> 51399 bytes .../comp/writer4latex/BibliographyDialog.java | 143 +++++++-- .../da/comp/writer4latex/Writer4LaTeX.java | 34 ++- .../writer2latex/api/ConverterFactory.java | 4 +- .../java/writer2latex/latex/BibConverter.java | 13 +- .../writer2latex/latex/FieldConverter.java | 282 ++++++++++-------- .../java/writer2latex/latex/LaTeXConfig.java | 71 ++--- source/oxt/writer4latex/Options.xcs | 2 + source/oxt/writer4latex/Options.xcu | 6 + .../writer4latex/W4LDialogs/Bibliography.xdl | 27 +- 11 files changed, 385 insertions(+), 202 deletions(-) diff --git a/source/distro/changelog.txt b/source/distro/changelog.txt index fd31513..1d4a82b 100644 --- a/source/distro/changelog.txt +++ b/source/distro/changelog.txt @@ -2,8 +2,11 @@ Changelog for Writer2LaTeX version 1.0 -> 1.2 ---------- version 1.1.6 ---------- +[w2l] New option use_natbib (default false) to use natbib.sty. This implies that natbib.sty is no longer loaded automatically + if Zotero or JabRef support is enabled + [w4l] Bibliography options page has been reworked to include JabRef support and unify BibTeX directory (which is now allowed - to contain special characters like spaces) + to contain special characters like spaces and can be relative to the the document directory) [w2l] Added support for JabRef reference marks: A new option jabref_bibtex_files has been added to give the names of the BibTeX files from JabRef diff --git a/source/distro/doc/user-manual.odt b/source/distro/doc/user-manual.odt index c204083c622118560b4b0441658a6709963a08e0..c01610cda5accb0256c26a0e15841169d596c865 100644 GIT binary patch delta 37182 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 delta 37144 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 diff --git a/source/java/org/openoffice/da/comp/writer4latex/BibliographyDialog.java b/source/java/org/openoffice/da/comp/writer4latex/BibliographyDialog.java index e421c0e..0061ceb 100644 --- a/source/java/org/openoffice/da/comp/writer4latex/BibliographyDialog.java +++ b/source/java/org/openoffice/da/comp/writer4latex/BibliographyDialog.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2011-01-24) + * Version 1.2 (2011-01-28) * */ @@ -35,8 +35,12 @@ import com.sun.star.awt.XContainerWindowEventHandler; import com.sun.star.awt.XDialog; import com.sun.star.awt.XWindow; import com.sun.star.beans.XPropertySet; +import com.sun.star.frame.XDesktop; +import com.sun.star.frame.XModel; +import com.sun.star.lang.XComponent; import com.sun.star.lang.XServiceInfo; import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.Exception; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; import com.sun.star.util.XChangesBatch; @@ -45,9 +49,13 @@ import com.sun.star.lib.uno.helper.WeakBase; import org.openoffice.da.comp.w2lcommon.helper.DialogAccess; import org.openoffice.da.comp.w2lcommon.helper.FolderPicker; +import org.openoffice.da.comp.w2lcommon.helper.MessageBox; import org.openoffice.da.comp.w2lcommon.helper.RegistryHelper; import org.openoffice.da.comp.w2lcommon.helper.XPropertySetHelper; +import writer2latex.util.CSVList; +import writer2latex.util.Misc; + /** This class provides a uno component which implements the configuration * of the bibliography in Writer4LaTeX. */ @@ -85,9 +93,6 @@ public final class BibliographyDialog if (sMethod.equals("external_event") ){ return handleExternalEvent(dlg, event); } - else if (sMethod.equals("BibTeXDirClick")) { - return bibTeXDirClick(dlg); - } else if (sMethod.equals("ConvertZoteroCitationsChange")) { return convertZoteroCitationsChange(dlg); } @@ -97,6 +102,15 @@ public final class BibliographyDialog else if (sMethod.equals("UseExternalBibTeXFilesChange")) { return useExternalBibTeXFilesChange(dlg); } + else if (sMethod.equals("UseNatbibChange")) { + return useNatbibChange(dlg); + } + else if (sMethod.equals("BibTeXLocationChange")) { + return bibTeXLocationChange(dlg); + } + else if (sMethod.equals("BibTeXDirClick")) { + return bibTeXDirClick(dlg); + } } catch (com.sun.star.uno.RuntimeException e) { throw e; @@ -109,7 +123,7 @@ public final class BibliographyDialog public String[] getSupportedMethodNames() { String[] sNames = { "external_event", "UseExternalBibTeXFilesChange", "ConvertZoteroCitationsChange", - "ConvertJabRefCitationsChange", "ExternalBibTeXDirClick" }; + "ConvertJabRefCitationsChange", "UseNatbibChange", "BibTeXLocationChange", "ExternalBibTeXDirClick" }; return sNames; } @@ -138,6 +152,8 @@ public final class BibliographyDialog return true; } else if (sMethod.equals("back") || sMethod.equals("initialize")) { loadConfiguration(dlg); + enableBibTeXSettings(dlg); + useNatbibChange(dlg); return true; } } @@ -160,8 +176,12 @@ public final class BibliographyDialog XPropertySetHelper.getPropertyValueAsBoolean(xProps, "ConvertZoteroCitations")); dlg.setCheckBoxStateAsBoolean("ConvertJabRefCitations", XPropertySetHelper.getPropertyValueAsBoolean(xProps, "ConvertJabRefCitations")); - dlg.setTextFieldText("NatbibOptions", + dlg.setCheckBoxStateAsBoolean("UseNatbib", + XPropertySetHelper.getPropertyValueAsBoolean(xProps, "UseNatbib")); + dlg.setTextFieldText("NatbibOptions", XPropertySetHelper.getPropertyValueAsString(xProps, "NatbibOptions")); + dlg.setListBoxSelectedItem("BibTeXLocation", + XPropertySetHelper.getPropertyValueAsShort(xProps, "BibTeXLocation")); dlg.setTextFieldText("BibTeXDir", XPropertySetHelper.getPropertyValueAsString(xProps, "BibTeXDir")); registry.disposeRegistryView(view); @@ -184,7 +204,9 @@ public final class BibliographyDialog XPropertySetHelper.setPropertyValue(xProps, "UseExternalBibTeXFiles", dlg.getCheckBoxStateAsBoolean("UseExternalBibTeXFiles")); XPropertySetHelper.setPropertyValue(xProps, "ConvertZoteroCitations", dlg.getCheckBoxStateAsBoolean("ConvertZoteroCitations")); XPropertySetHelper.setPropertyValue(xProps, "ConvertJabRefCitations", dlg.getCheckBoxStateAsBoolean("ConvertJabRefCitations")); + XPropertySetHelper.setPropertyValue(xProps, "UseNatbib", dlg.getCheckBoxStateAsBoolean("UseNatbib")); XPropertySetHelper.setPropertyValue(xProps, "NatbibOptions", dlg.getTextFieldText("NatbibOptions")); + XPropertySetHelper.setPropertyValue(xProps, "BibTeXLocation", dlg.getListBoxSelectedItem("BibTeXLocation")); XPropertySetHelper.setPropertyValue(xProps, "BibTeXDir", dlg.getTextFieldText("BibTeXDir")); // Commit registry changes @@ -205,43 +227,114 @@ public final class BibliographyDialog } private boolean useExternalBibTeXFilesChange(DialogAccess dlg) { - enableBibTeXDir(dlg); + enableBibTeXSettings(dlg); return true; } private boolean convertZoteroCitationsChange(DialogAccess dlg) { - enableNatbibOptions(dlg); - enableBibTeXDir(dlg); + enableBibTeXSettings(dlg); return true; } private boolean convertJabRefCitationsChange(DialogAccess dlg) { - enableNatbibOptions(dlg); - enableBibTeXDir(dlg); + enableBibTeXSettings(dlg); return true; } - private void enableNatbibOptions(DialogAccess dlg) { - boolean bConvertZotero = dlg.getCheckBoxStateAsBoolean("ConvertZoteroCitations"); - boolean bConvertJabRef = dlg.getCheckBoxStateAsBoolean("ConvertJabRefCitations"); - dlg.setControlEnabled("NatbibOptionsLabel", bConvertZotero || bConvertJabRef); - dlg.setControlEnabled("NatbibOptions", bConvertZotero || bConvertJabRef); + private boolean useNatbibChange(DialogAccess dlg) { + boolean bUseNatbib = dlg.getCheckBoxStateAsBoolean("UseNatbib"); + dlg.setControlEnabled("NatbibOptionsLabel", bUseNatbib); + dlg.setControlEnabled("NatbibOptions", bUseNatbib); + return true; } - - private void enableBibTeXDir(DialogAccess dlg) { - boolean bExternal = dlg.getCheckBoxStateAsBoolean("UseExternalBibTeXFiles"); - boolean bConvertZotero = dlg.getCheckBoxStateAsBoolean("ConvertZoteroCitations"); - boolean bConvertJabRef = dlg.getCheckBoxStateAsBoolean("ConvertJabRefCitations"); - dlg.setControlEnabled("BibTeXDirLabel", bExternal || bConvertZotero || bConvertJabRef); - dlg.setControlEnabled("BibTeXDir", bExternal || bConvertZotero || bConvertJabRef); - dlg.setControlEnabled("BibTeXDirButton", bExternal|| bConvertZotero || bConvertJabRef); + + private boolean bibTeXLocationChange(DialogAccess dlg) { + enableBibTeXSettings(dlg); + return true; } + private void enableBibTeXSettings(DialogAccess dlg) { + boolean bEnableLocation = dlg.getCheckBoxStateAsBoolean("UseExternalBibTeXFiles") + || dlg.getCheckBoxStateAsBoolean("ConvertZoteroCitations") + || dlg.getCheckBoxStateAsBoolean("ConvertJabRefCitations"); + boolean bEnableDir = dlg.getListBoxSelectedItem("BibTeXLocation")<2; + dlg.setControlEnabled("BibTeXLocationLabel", bEnableLocation); + dlg.setControlEnabled("BibTeXLocation", bEnableLocation); + dlg.setControlEnabled("BibTeXDirLabel", bEnableLocation && bEnableDir); + dlg.setControlEnabled("BibTeXDir", bEnableLocation && bEnableDir); + dlg.setControlEnabled("BibTeXDirButton", bEnableLocation && bEnableDir); + } + + private String getDocumentDirURL() { + // Get the desktop from the service manager + Object desktop=null; + try { + desktop = xContext.getServiceManager().createInstanceWithContext("com.sun.star.frame.Desktop", xContext); + } catch (Exception e) { + // Failed to get the desktop service + return ""; + } + XDesktop xDesktop = (XDesktop) UnoRuntime.queryInterface(XDesktop.class, desktop); + + // Get the current component and verify that it really is a text document + if (xDesktop!=null) { + XComponent xComponent = xDesktop.getCurrentComponent(); + XServiceInfo xInfo = (XServiceInfo)UnoRuntime.queryInterface(XServiceInfo.class, xComponent); + if (xInfo!=null && xInfo.supportsService("com.sun.star.text.TextDocument")) { + // Get the model, which provides the URL + XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, xComponent); + if (xModel!=null) { + String sURL = xModel.getURL(); + int nSlash = sURL.lastIndexOf('/'); + return nSlash>-1 ? sURL.substring(0, nSlash) : ""; + } + } + } + + return ""; + } + + private boolean hasBibTeXFiles(File dir) { + if (dir.isDirectory()) { + File[] files = dir.listFiles(); + for (File file : files) { + if (file.isFile() && file.getName().endsWith(".bib")) { + return true; + } + } + } + return false; + } + private boolean bibTeXDirClick(DialogAccess dlg) { String sPath = folderPicker.getPath(); if (sPath!=null) { try { - dlg.setTextFieldText("BibTeXDir", new File(new URI(sPath)).getCanonicalPath()); + File bibDir = new File(new URI(sPath)); + String sBibPath = bibDir.getCanonicalPath(); + if (dlg.getListBoxSelectedItem("BibTeXLocation")==1) { + // Path relative to document directory, remove the document directory part + String sDocumentDirURL = getDocumentDirURL(); + if (sDocumentDirURL.length()>0) { + String sDocumentDirPath = new File(new URI(sDocumentDirURL)).getCanonicalPath(); + if (sBibPath.startsWith(sDocumentDirPath)) { + if (sBibPath.length()>sDocumentDirPath.length()) { + sBibPath = sBibPath.substring(sDocumentDirPath.length()+1); + } + else { // Same as document directory + sBibPath = ""; + } + } + else { // not a subdirectory + sBibPath = ""; + } + } + } + dlg.setTextFieldText("BibTeXDir", sBibPath); + if (!hasBibTeXFiles(bibDir)) { + MessageBox msgBox = new MessageBox(xContext); + msgBox.showMessage("Writer4LaTeX warning", "The selected directory does not contain any BibTeX files"); + } } catch (IOException e) { } diff --git a/source/java/org/openoffice/da/comp/writer4latex/Writer4LaTeX.java b/source/java/org/openoffice/da/comp/writer4latex/Writer4LaTeX.java index f8c9696..05dde91 100644 --- a/source/java/org/openoffice/da/comp/writer4latex/Writer4LaTeX.java +++ b/source/java/org/openoffice/da/comp/writer4latex/Writer4LaTeX.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2011-01-25) + * Version 1.2 (2011-01-28) * */ @@ -36,15 +36,18 @@ import com.sun.star.beans.XPropertyAccess; import com.sun.star.beans.XPropertySet; import com.sun.star.container.XNameAccess; import com.sun.star.frame.XController; +import com.sun.star.frame.XDesktop; import com.sun.star.frame.XFrame; import com.sun.star.frame.XModel; import com.sun.star.frame.XStorable; +import com.sun.star.lang.XComponent; +import com.sun.star.lang.XServiceInfo; import com.sun.star.lib.uno.helper.WeakBase; import com.sun.star.task.XStatusIndicator; import com.sun.star.task.XStatusIndicatorFactory; import com.sun.star.ui.dialogs.ExecutableDialogResults; import com.sun.star.ui.dialogs.XExecutableDialog; -import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.Exception; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; @@ -221,22 +224,24 @@ public final class Writer4LaTeX extends WeakBase try { Object view = registry.getRegistryView(BibliographyDialog.REGISTRY_PATH, false); XPropertySet xProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,view); - String sBibTeXFiles = getFileList(XPropertySetHelper.getPropertyValueAsString(xProps, "BibTeXDir")); + String sBibTeXFiles = getFileList(XPropertySetHelper.getPropertyValueAsShort(xProps, "BibTeXLocation"), + XPropertySetHelper.getPropertyValueAsString(xProps, "BibTeXDir")); if (XPropertySetHelper.getPropertyValueAsBoolean(xProps, "ConvertZoteroCitations")) { filterHelper.put("zotero_bibtex_files", sBibTeXFiles); - filterHelper.put("natbib_options", XPropertySetHelper.getPropertyValueAsString(xProps, "NatbibOptions")); } if (XPropertySetHelper.getPropertyValueAsBoolean(xProps, "ConvertJabRefCitations")) { filterHelper.put("jabref_bibtex_files", sBibTeXFiles); - filterHelper.put("natbib_options", XPropertySetHelper.getPropertyValueAsString(xProps, "NatbibOptions")); } if (XPropertySetHelper.getPropertyValueAsBoolean(xProps, "UseExternalBibTeXFiles")) { filterHelper.put("external_bibtex_files", sBibTeXFiles); } String sBibTeXDir = XPropertySetHelper.getPropertyValueAsString(xProps, "BibTeXDir"); if (sBibTeXDir.length()>0) { - sBibinputs = sBibTeXDir+":"; + // The separator character in BIBINPUTS is OS specific + sBibinputs = sBibTeXDir+File.pathSeparatorChar; } + filterHelper.put("use_natbib", Boolean.toString(XPropertySetHelper.getPropertyValueAsBoolean(xProps, "UseNatbib"))); + filterHelper.put("natbib_options", XPropertySetHelper.getPropertyValueAsString(xProps, "NatbibOptions")); mediaHelper.put("FilterData",filterHelper.toArray()); mediaProps = mediaHelper.toArray(); @@ -295,9 +300,20 @@ public final class Writer4LaTeX extends WeakBase xStatus.end(); } - - private String getFileList(String sDirectory) { - File dir = new File(sDirectory); + + private String getFileList(short nType, String sDirectory) { + File dir; + switch (nType) { + case 0: // absolute path + dir = new File(sDirectory); + break; + case 1: // relative path + dir = new File(urlToFile(sBasePath),sDirectory); + break; + default: // document directory + dir = urlToFile(sBasePath); + } + CSVList filelist = new CSVList(","); if (dir.isDirectory()) { File[] files = dir.listFiles(); diff --git a/source/java/writer2latex/api/ConverterFactory.java b/source/java/writer2latex/api/ConverterFactory.java index e2744c4..370579a 100644 --- a/source/java/writer2latex/api/ConverterFactory.java +++ b/source/java/writer2latex/api/ConverterFactory.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2011-01-25) + * Version 1.2 (2011-01-28) * */ @@ -33,7 +33,7 @@ public class ConverterFactory { // Version information private static final String VERSION = "1.1.6"; - private static final String DATE = "2011-01-25"; + private static final String DATE = "2011-01-28"; /** Return the Writer2LaTeX version in the form * (major version).(minor version).(patch level)
diff --git a/source/java/writer2latex/latex/BibConverter.java b/source/java/writer2latex/latex/BibConverter.java index d91f8d5..55ac638 100644 --- a/source/java/writer2latex/latex/BibConverter.java +++ b/source/java/writer2latex/latex/BibConverter.java @@ -16,11 +16,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * - * Copyright: 2002-2010 by Henrik Just + * Copyright: 2002-2011 by Henrik Just * * All Rights Reserved. * - * Version 1.2 (2010-03-28) + * Version 1.2 (2011-01-27) * */ @@ -79,7 +79,14 @@ public class BibConverter extends ConverterHelper { * other declarations should be added. */ public void appendDeclarations(LaTeXDocumentPortion pack, LaTeXDocumentPortion decl) { - // Currently nothing; may add support for eg. natbib later + // Use natbib + if (config.useBibtex() && config.useNatbib()) { + pack.append("\\usepackage"); + if (config.getNatbibOptions().length()>0) { + pack.append("[").append(config.getNatbibOptions()).append("]"); + } + pack.append("{natbib}").nl(); + } } /** Process a bibliography (text:bibliography tag) diff --git a/source/java/writer2latex/latex/FieldConverter.java b/source/java/writer2latex/latex/FieldConverter.java index 4b962f0..9526f26 100644 --- a/source/java/writer2latex/latex/FieldConverter.java +++ b/source/java/writer2latex/latex/FieldConverter.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2011-01-24) + * Version 1.2 (2011-01-28) * */ @@ -59,8 +59,7 @@ public class FieldConverter extends ConverterHelper { // Identify Zotero items private static final String ZOTERO_ITEM = "ZOTERO_ITEM"; // Identify JabRef items - private static final String JABREF_ITEM_1 = "JR_cite_1"; - private static final String JABREF_ITEM_2 = "JR_cite_2"; + private static final String JABREF_ITEM = "JR_cite"; // Links & references private ExportNameCollection targets = new ExportNameCollection(true); @@ -83,7 +82,7 @@ public class FieldConverter extends ConverterHelper { private boolean bUsesOooref = false; private boolean bConvertZotero = false; private boolean bConvertJabRef = false; - private boolean bNeedNatbib = false; + private boolean bUseNatbib = false; public FieldConverter(OfficeReader ofr, LaTeXConfig config, ConverterPalette palette) { super(ofr,config,palette); @@ -91,6 +90,7 @@ public class FieldConverter extends ConverterHelper { bUseHyperref = config.useHyperref() && !config.useTitleref() && !config.useOooref(); bConvertZotero = config.useBibtex() && config.zoteroBibtexFiles().length()>0; bConvertJabRef = config.useBibtex() && config.jabrefBibtexFiles().length()>0; + bUseNatbib = config.useBibtex() && config.useNatbib(); } /**

Append declarations needed by the FieldConverter to @@ -138,16 +138,7 @@ public class FieldConverter extends ConverterHelper { } pack.append("}").nl(); } - - // Use natbib - if (bNeedNatbib) { - pack.append("\\usepackage"); - if (config.getNatbibOptions().length()>0) { - pack.append("[").append(config.getNatbibOptions()).append("]"); - } - pack.append("{natbib}").nl(); - } - + // Export sequence declarations // The number format is fetched from the first occurence of the // sequence in the text, while the outline level and the separation @@ -484,129 +475,165 @@ public class FieldConverter extends ConverterHelper { if (citationItemsArray!=null) { int nCitationCount = citationItemsArray.length(); - if (nCitationCount>1) { - // For multiple citations, use \citetext, otherwise we cannot add individual prefixes and suffixes - // TODO: If no prefixes or suffixes exist, it's safe to combine the citations - ldp.append("\\citetext{"); - } - for (int nIndex=0; nIndex1) { + // For multiple citations, use \citetext, otherwise we cannot add individual prefixes and suffixes + // TODO: If no prefixes or suffixes exist, it's safe to combine the citations + ldp.append("\\citetext{"); } - if (citationItems!=null) { - if (nIndex>0) { - ldp.append("; "); // Separate multiple citations in this reference + for (int nIndex=0; nIndex0) { + ldp.append("; "); // Separate multiple citations in this reference + } - try { // The URI seems to be an array with a single string value(?) - sURI = citationItems.getJSONArray("uri").getString(0); - } - catch (JSONException e) { - } + // Citation items + String sURI = ""; + boolean bSuppressAuthor = false; + String sPrefix = ""; + String sSuffix = ""; + String sLocator = ""; + String sLocatorType = ""; - try { // SuppressAuthor is a boolean value - bSuppressAuthor = citationItems.getBoolean("suppressAuthor"); - } - catch (JSONException e) { - } + try { // The URI seems to be an array with a single string value(?) + sURI = citationItems.getJSONArray("uri").getString(0); + } + catch (JSONException e) { + } - try { // Prefix is a string value - sPrefix = citationItems.getString("prefix"); - } - catch (JSONException e) { - } + try { // SuppressAuthor is a boolean value + bSuppressAuthor = citationItems.getBoolean("suppressAuthor"); + } + catch (JSONException e) { + } - try { // Suffix is a string value - sSuffix = citationItems.getString("suffix"); - } - catch (JSONException e) { - } + try { // Prefix is a string value + sPrefix = citationItems.getString("prefix"); + } + catch (JSONException e) { + } - try { // Locator is a string value, e.g. a page number - sLocator = citationItems.getString("locator"); - } - catch (JSONException e) { - } + try { // Suffix is a string value + sSuffix = citationItems.getString("suffix"); + } + catch (JSONException e) { + } - try { - // LocatorType is a string value, e.g. book, verse, page (missing locatorType means page) - sLocatorType = citationItems.getString("locatorType"); - } - catch (JSONException e) { - } + try { // Locator is a string value, e.g. a page number + sLocator = citationItems.getString("locator"); + } + catch (JSONException e) { + } - // Adjust locator type (empty locator type means "page") - // TODO: Handle other locator types (localize and abbreviate): Currently the internal name (e.g. book) is used. - if (sLocator.length()>0 && sLocatorType.length()==0) { - // A locator of the form is interpreted as several pages - if (Pattern.compile("[0-9]+[^0-9]+[0-9]+").matcher(sLocator).find()) { - sLocatorType = "pp."; + try { + // LocatorType is a string value, e.g. book, verse, page (missing locatorType means page) + sLocatorType = citationItems.getString("locatorType"); + } + catch (JSONException e) { + } + + // Adjust locator type (empty locator type means "page") + // TODO: Handle other locator types (localize and abbreviate): Currently the internal name (e.g. book) is used. + if (sLocator.length()>0 && sLocatorType.length()==0) { + // A locator of the form is interpreted as several pages + if (Pattern.compile("[0-9]+[^0-9]+[0-9]+").matcher(sLocator).find()) { + sLocatorType = "pp."; + } + else { + sLocatorType = "p."; + } + } + + // Insert command. TODO: Evaluate this + if (nCitationCount>1) { // Use commands without parentheses + if (bSuppressAuthor) { ldp.append("\\citeyear"); } + else { ldp.append("\\citet"); } } else { - sLocatorType = "p."; + if (bSuppressAuthor) { ldp.append("\\citeyearpar"); } + else { ldp.append("\\citep"); } } - } - // Insert command. TODO: Evaluate this - if (nCitationCount>1) { // Use commands without parentheses - if (bSuppressAuthor) { ldp.append("\\citeyear"); } - else { ldp.append("\\citet"); } - } - else { - if (bSuppressAuthor) { ldp.append("\\citeyearpar"); } - else { ldp.append("\\citep"); } - } - - if (sPrefix.length()>0) { - ldp.append("[").append(palette.getI18n().convert(sPrefix,true,oc.getLang())).append("]"); - } - - if (sPrefix.length()>0 || sSuffix.length()>0 || sLocatorType.length()>0 || sLocator.length()>0) { - // Note that we need to include an empty suffix if there's a prefix! - ldp.append("[") - .append(palette.getI18n().convert(sSuffix,true,oc.getLang())) - .append(palette.getI18n().convert(sLocatorType,true,oc.getLang())); - if (sLocatorType.length()>0 && sLocator.length()>0) { - ldp.append("~"); + if (sPrefix.length()>0) { + ldp.append("[").append(palette.getI18n().convert(sPrefix,true,oc.getLang())).append("]"); } - ldp.append(palette.getI18n().convert(sLocator,true,oc.getLang())) - .append("]"); - } - ldp.append("{"); - int nSlash = sURI.lastIndexOf('/'); - if (nSlash>0) { - ldp.append(sURI.substring(nSlash+1)); - } - else { - ldp.append(sURI); + if (sPrefix.length()>0 || sSuffix.length()>0 || sLocatorType.length()>0 || sLocator.length()>0) { + // Note that we need to include an empty suffix if there's a prefix! + ldp.append("[") + .append(palette.getI18n().convert(sSuffix,true,oc.getLang())) + .append(palette.getI18n().convert(sLocatorType,true,oc.getLang())); + if (sLocatorType.length()>0 && sLocator.length()>0) { + ldp.append("~"); + } + ldp.append(palette.getI18n().convert(sLocator,true,oc.getLang())) + .append("]"); + } + + ldp.append("{"); + int nSlash = sURI.lastIndexOf('/'); + if (nSlash>0) { + ldp.append(sURI.substring(nSlash+1)); + } + else { + ldp.append(sURI); + } + ldp.append("}"); } + } + + if (nCitationCount>1) { // End the \citetext command ldp.append("}"); } } - - if (nCitationCount>1) { // End the \citetext command - ldp.append("}"); + else { // natbib is not available, use simple \cite command + ldp.append("\\cite{"); + for (int nIndex=0; nIndex0) { + ldp.append(","); // Separate multiple citations in this reference + } + + // Citation items + String sURI = ""; + + try { // The URI seems to be an array with a single string value(?) + sURI = citationItems.getJSONArray("uri").getString(0); + } + catch (JSONException e) { + } + + int nSlash = sURI.lastIndexOf('/'); + if (nSlash>0) { + ldp.append(sURI.substring(nSlash+1)); + } + else { + ldp.append(sURI); + } + } + } + ldp.append("}"); } oc.setInZoteroJabRefText(true); - bNeedNatbib = true; - return true; } } @@ -617,19 +644,32 @@ public class FieldConverter extends ConverterHelper { // Try to handle this reference name as a JabRef reference, return true on success private boolean handleJabRefReferenceName(String sName, LaTeXDocumentPortion ldp, Context oc) { // First parse the reference name: - // A JabRef reference name has the form JR_cite_n_identifiers where + // A JabRef reference name has the form JR_cite__ where + // m is a sequence number to ensure unique citations (may be empty) // n=1 for (Author date) and n=2 for Author (date) citations // identifiers is a comma separated list of BibTeX keys - if (sName.startsWith(JABREF_ITEM_1)) { - ldp.append("\\citep{").append(sName.substring(JABREF_ITEM_1.length()+1)).append("}"); + if (sName.startsWith(JABREF_ITEM)) { + String sRemains = sName.substring(JABREF_ITEM.length()); + int nUnderscore = sRemains.indexOf('_'); + if (nUnderscore>-1) { + sRemains = sRemains.substring(nUnderscore+1); + if (sRemains.length()>2) { + String sCommand; + if (bUseNatbib) { + if (sRemains.charAt(0)=='1') { + sCommand = "\\citep"; + } + else { + sCommand = "\\citet"; + } + } + else { + sCommand = "\\cite"; + } + ldp.append(sCommand).append("{").append(sRemains.substring(2)).append("}"); + } + } oc.setInZoteroJabRefText(true); - bNeedNatbib = true; - return true; - } - else if (sName.startsWith(JABREF_ITEM_2)) { - ldp.append("\\citet{").append(sName.substring(JABREF_ITEM_2.length()+1)).append("}"); - oc.setInZoteroJabRefText(true); - bNeedNatbib = true; return true; } return false; diff --git a/source/java/writer2latex/latex/LaTeXConfig.java b/source/java/writer2latex/latex/LaTeXConfig.java index 490f571..4aadfda 100644 --- a/source/java/writer2latex/latex/LaTeXConfig.java +++ b/source/java/writer2latex/latex/LaTeXConfig.java @@ -20,7 +20,7 @@ * * All Rights Reserved. * - * Version 1.2 (2011-01-23) + * Version 1.2 (2011-01-28) * */ @@ -48,7 +48,7 @@ public class LaTeXConfig extends writer2latex.base.ConfigBase { ///////////////////////////////////////////////////////////////////////// // I. Define items needed by ConfigBase - protected int getOptionCount() { return 68; } + protected int getOptionCount() { return 69; } protected String getDefaultConfigPath() { return "/writer2latex/latex/config/"; } ///////////////////////////////////////////////////////////////////////// @@ -146,38 +146,39 @@ public class LaTeXConfig extends writer2latex.base.ConfigBase { private static final int EXTERNAL_BIBTEX_FILES = 33; private static final int ZOTERO_BIBTEX_FILES = 34; private static final int JABREF_BIBTEX_FILES = 35; - private static final int NATBIB_OPTIONS = 36; - private static final int FORMATTING = 37; - private static final int PAGE_FORMATTING = 38; - private static final int OTHER_STYLES = 39; - private static final int IMAGE_CONTENT = 40; - private static final int TABLE_CONTENT = 41; - private static final int TABLE_FIRST_HEAD_STYLE = 42; - private static final int TABLE_HEAD_STYLE = 43; - private static final int TABLE_FOOT_STYLE = 44; - private static final int TABLE_LAST_FOOT_STYLE = 45; - private static final int IGNORE_HARD_PAGE_BREAKS = 46; - private static final int IGNORE_HARD_LINE_BREAKS = 47; - private static final int IGNORE_EMPTY_PARAGRAPHS = 48; - private static final int IGNORE_DOUBLE_SPACES = 49; - private static final int ALIGN_FRAMES = 50; - private static final int FLOAT_FIGURES = 51; - private static final int FLOAT_TABLES = 52; - private static final int FLOAT_OPTIONS = 53; - private static final int FIGURE_SEQUENCE_NAME = 54; - private static final int TABLE_SEQUENCE_NAME = 55; - private static final int IMAGE_OPTIONS = 56; - private static final int REMOVE_GRAPHICS_EXTENSION = 57; - private static final int ORIGINAL_IMAGE_SIZE = 58; - private static final int SIMPLE_TABLE_LIMIT = 59; - private static final int NOTES = 60; - private static final int METADATA = 61; - private static final int TABSTOP = 62; - private static final int WRAP_LINES_AFTER = 63; - private static final int SPLIT_LINKED_SECTIONS = 64; - private static final int SPLIT_TOPLEVEL_SECTIONS = 65; - private static final int SAVE_IMAGES_IN_SUBDIR = 66; - private static final int DEBUG = 67; + private static final int USE_NATBIB = 36; + private static final int NATBIB_OPTIONS = 37; + private static final int FORMATTING = 38; + private static final int PAGE_FORMATTING = 39; + private static final int OTHER_STYLES = 40; + private static final int IMAGE_CONTENT = 41; + private static final int TABLE_CONTENT = 42; + private static final int TABLE_FIRST_HEAD_STYLE = 43; + private static final int TABLE_HEAD_STYLE = 44; + private static final int TABLE_FOOT_STYLE = 45; + private static final int TABLE_LAST_FOOT_STYLE = 46; + private static final int IGNORE_HARD_PAGE_BREAKS = 47; + private static final int IGNORE_HARD_LINE_BREAKS = 48; + private static final int IGNORE_EMPTY_PARAGRAPHS = 49; + private static final int IGNORE_DOUBLE_SPACES = 50; + private static final int ALIGN_FRAMES = 51; + private static final int FLOAT_FIGURES = 52; + private static final int FLOAT_TABLES = 53; + private static final int FLOAT_OPTIONS = 54; + private static final int FIGURE_SEQUENCE_NAME = 55; + private static final int TABLE_SEQUENCE_NAME = 56; + private static final int IMAGE_OPTIONS = 57; + private static final int REMOVE_GRAPHICS_EXTENSION = 58; + private static final int ORIGINAL_IMAGE_SIZE = 59; + private static final int SIMPLE_TABLE_LIMIT = 60; + private static final int NOTES = 61; + private static final int METADATA = 62; + private static final int TABSTOP = 63; + private static final int WRAP_LINES_AFTER = 64; + private static final int SPLIT_LINKED_SECTIONS = 65; + private static final int SPLIT_TOPLEVEL_SECTIONS = 66; + private static final int SAVE_IMAGES_IN_SUBDIR = 67; + private static final int DEBUG = 68; ///////////////////////////////////////////////////////////////////////// // IV. Our options data @@ -252,6 +253,7 @@ public class LaTeXConfig extends writer2latex.base.ConfigBase { options[EXTERNAL_BIBTEX_FILES] = new Option("external_bibtex_files",""); options[ZOTERO_BIBTEX_FILES] = new Option("zotero_bibtex_files",""); options[JABREF_BIBTEX_FILES] = new Option("jabref_bibtex_files",""); + options[USE_NATBIB] = new BooleanOption("use_natbib","false"); options[NATBIB_OPTIONS] = new Option("natbib_options",""); options[FORMATTING] = new IntegerOption("formatting","convert_basic") { public void setString(String sValue) { @@ -664,6 +666,7 @@ public class LaTeXConfig extends writer2latex.base.ConfigBase { public String externalBibtexFiles() { return options[EXTERNAL_BIBTEX_FILES].getString(); } public String zoteroBibtexFiles() { return options[ZOTERO_BIBTEX_FILES].getString(); } public String jabrefBibtexFiles() { return options[JABREF_BIBTEX_FILES].getString(); } + public boolean useNatbib() { return ((BooleanOption) options[USE_NATBIB]).getValue(); } public String getNatbibOptions() { return options[NATBIB_OPTIONS].getString(); } // Formatting options diff --git a/source/oxt/writer4latex/Options.xcs b/source/oxt/writer4latex/Options.xcs index 31dcfc6..2eac490 100644 --- a/source/oxt/writer4latex/Options.xcs +++ b/source/oxt/writer4latex/Options.xcs @@ -28,7 +28,9 @@ + + diff --git a/source/oxt/writer4latex/Options.xcu b/source/oxt/writer4latex/Options.xcu index 19189f1..71034ef 100644 --- a/source/oxt/writer4latex/Options.xcu +++ b/source/oxt/writer4latex/Options.xcu @@ -96,9 +96,15 @@ false + + false + + + 2 + diff --git a/source/oxt/writer4latex/W4LDialogs/Bibliography.xdl b/source/oxt/writer4latex/W4LDialogs/Bibliography.xdl index 24f049e..1b72b08 100644 --- a/source/oxt/writer4latex/W4LDialogs/Bibliography.xdl +++ b/source/oxt/writer4latex/W4LDialogs/Bibliography.xdl @@ -2,22 +2,35 @@ - + - - - + + + - + - - + + + + + + + + + + + + + + + \ No newline at end of file