From 071359bbe67282d6ae69693d0596b1f03476fcc8 Mon Sep 17 00:00:00 2001 From: Matt McCutchen Date: Mon, 7 Sep 2020 20:16:13 -0400 Subject: [PATCH 1/1] Import SuperbChemistry version 1 Modification time: 2007-02-04 19:38:04 -0500 --- SuperbChemistry-test.odt | Bin 0 -> 7408 bytes extension/META-INF/manifest.xml | 4 ++ extension/SuperbChemistry/Main.xba | 76 +++++++++++++++++++++++++++ extension/SuperbChemistry/dialog.xlb | 3 ++ extension/SuperbChemistry/script.xlb | 5 ++ 5 files changed, 88 insertions(+) create mode 100644 SuperbChemistry-test.odt create mode 100644 extension/META-INF/manifest.xml create mode 100644 extension/SuperbChemistry/Main.xba create mode 100644 extension/SuperbChemistry/dialog.xlb create mode 100644 extension/SuperbChemistry/script.xlb diff --git a/SuperbChemistry-test.odt b/SuperbChemistry-test.odt new file mode 100644 index 0000000000000000000000000000000000000000..49b74ad0743cb6dcd41efb8196455c303787193b GIT binary patch literal 7408 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 + + + \ No newline at end of file diff --git a/extension/SuperbChemistry/Main.xba b/extension/SuperbChemistry/Main.xba new file mode 100644 index 0000000..e5a5a82 --- /dev/null +++ b/extension/SuperbChemistry/Main.xba @@ -0,0 +1,76 @@ + + +' Matt McCutchen's SuperbChemistry for OpenOffice, version 1 +' +' Applies superscript and subscript formatting to chemical formulas in text. +' +' Examples: +' C12345 ==> C_{12345} +' H+ ==> H^+ +' Cl- ==> Cl^- +' Fe3+ ==> Fe^{3+} +' C1232+ ==> C_{123}^{2+} +' N2- ==> N^{2-} +' Exception for O and ): NO3- ==> NO_3^-, Fe(OH)2- ==> Fe(OH)_2^- +' But still O12 ==> O_{12} +' 4+ ==> 4+ (not a superscript by itself) + +' Regular expression replace in the document, +' creating superscripts if superb > 0 or subscripts if superb < 0. +' Used by SuperbChemistry. +sub SuperbReplace(doc as object, searchStr as string, replaceStr as string, superb as integer) + +dim rd as object +rd = doc.createReplaceDescriptor() + +rd.SearchRegularExpression = true +rd.setSearchString(searchStr) +rd.setReplaceString(replaceStr) + +if superb <> 0 then + dim replaceAttrs(1) as new com.sun.star.beans.PropertyValue + replaceAttrs(0).Name = "CharEscapement" + if superb > 0 then + replaceAttrs(0).Value = 33 + else + replaceAttrs(0).Value = -9 + end if + replaceAttrs(1).Name = "CharEscapementHeight" + replaceAttrs(1).Value = 58 + rd.setReplaceAttributes(replaceAttrs) +end if + +doc.replaceAll(rd) + +end sub + +' Formats the current document +sub FormatDocument + +' Mark candidate superscripts so we know they follow letters or ). +SuperbReplace(ThisComponent, "[A-Za-z)][0-9]*[-+−]", "&@l@", 0) + +' O and ) grab a single digit. Block it off from becoming a superscript. +SuperbReplace(ThisComponent, "[O)][0-9]", "&@n@", 0) + +' Real minus signs in superscripts. +SuperbReplace(ThisComponent, "-@l@", "−@l@", 0) + +' Make superscripts: at most one digit. +SuperbReplace(ThisComponent, "[0-9]?[−+]@l@", "@q@&", 1) + +' Remove the O and ) markers. +SuperbReplace(ThisComponent, "@n@", "", 0) + +' Mark off subscripts: as many digits as we can still grab. +SuperbReplace(ThisComponent, "[A-Za-z)][0-9]+", "&@n@", 0) + +' Make subscripts. +SuperbReplace(ThisComponent, "[0-9]+@n@", "&", -1) + +' Clean up all markers. +SuperbReplace(ThisComponent, "@[lnq]@", "", 0) + +end sub + + \ No newline at end of file diff --git a/extension/SuperbChemistry/dialog.xlb b/extension/SuperbChemistry/dialog.xlb new file mode 100644 index 0000000..8d924f4 --- /dev/null +++ b/extension/SuperbChemistry/dialog.xlb @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/extension/SuperbChemistry/script.xlb b/extension/SuperbChemistry/script.xlb new file mode 100644 index 0000000..815dca2 --- /dev/null +++ b/extension/SuperbChemistry/script.xlb @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file -- 2.34.1