From f541278de0c36369e836c51accb91944e35bfb67 Mon Sep 17 00:00:00 2001 From: Brett Terpstra Date: Fri, 7 Jun 2013 11:47:57 -0500 Subject: [PATCH 1/6] building multiple release versions --- Notation.xcodeproj/project.pbxproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Notation.xcodeproj/project.pbxproj b/Notation.xcodeproj/project.pbxproj index 18f04b0c..0d6d8ad9 100755 --- a/Notation.xcodeproj/project.pbxproj +++ b/Notation.xcodeproj/project.pbxproj @@ -2212,8 +2212,10 @@ 212B842409780B5000F3597F /* Development */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application"; COMBINE_HIDPI_IMAGES = YES; MACOSX_DEPLOYMENT_TARGET = 10.6; + PROVISIONING_PROFILE = ""; SDKROOT = macosx10.7; }; name = Development; @@ -2222,6 +2224,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Mac Developer: Brett Terpstra (95JCYSRQDU)"; COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -2286,6 +2289,7 @@ ); PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders"; PRODUCT_NAME = nvALT; + PROVISIONING_PROFILE = "5C02B60F-CC46-4089-8BD9-FF6E1382772B"; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx10.7; STRIP_INSTALLED_PRODUCT = NO; @@ -2300,6 +2304,7 @@ isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CODE_SIGN_IDENTITY = "Mac Developer: Brett Terpstra (95JCYSRQDU)"; DEAD_CODE_STRIPPING = YES; DEPLOYMENT_POSTPROCESSING = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -2353,6 +2358,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.6; PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders"; PRODUCT_NAME = nvALT; + PROVISIONING_PROFILE = "5C02B60F-CC46-4089-8BD9-FF6E1382772B"; SDKROOT = macosx10.7; SECTORDER_FLAGS = ( "-sectorder", @@ -2371,8 +2377,10 @@ 5C9CB58C134A7F0400073277 /* ForBuilding */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; MACOSX_DEPLOYMENT_TARGET = 10.6; + PROVISIONING_PROFILE = ""; SDKROOT = macosx10.7; }; name = ForBuilding; From 10e410d0d9b6811ffe76f330e32c2c88ad34a6d9 Mon Sep 17 00:00:00 2001 From: Jay Tamboli Date: Thu, 26 Sep 2013 15:18:34 -0400 Subject: [PATCH 2/6] Handle nil values for Simplenote-synced content, tags, systemTags If we receive nil for content, tags, or systemTags, replace it with an empty string, empty array, or empty array, respectively, rather than trying to store a nil in the NSDictionary. Fixes #200 --- SimplenoteEntryCollector.m | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/SimplenoteEntryCollector.m b/SimplenoteEntryCollector.m index 1bdb0339..88c870f8 100644 --- a/SimplenoteEntryCollector.m +++ b/SimplenoteEntryCollector.m @@ -159,6 +159,15 @@ - (NSDictionary*)preparedDictionaryWithFetcher:(SyncResponseFetcher*)fetcher rec NSMutableDictionary *entry = [NSMutableDictionary dictionaryWithCapacity:12]; NSNumber *deleted = [NSNumber numberWithInt:[[rawObject objectForKey:@"deleted"] intValue]]; + NSArray *systemTags = [rawObject objectForKey:@"systemTags"]; + if (!systemTags) + systemTags = [NSArray array]; + NSArray *tags = [rawObject objectForKey:@"tags"]; + if (!tags) + tags = [NSArray array]; + NSString *content = [rawObject objectForKey:@"content"]; + if (!content) + content = [NSString string]; [entry setObject:key forKey:@"key"]; [entry setObject:[NSNumber numberWithInt:version] forKey:@"version"]; [entry setObject:deleted forKey:@"deleted"]; @@ -171,10 +180,10 @@ - (NSDictionary*)preparedDictionaryWithFetcher:(SyncResponseFetcher*)fetcher rec if ([rawObject objectForKey:@"publishkey"]) { [entry setObject:[rawObject objectForKey:@"publishURL"] forKey:@"publishkey"]; } - [entry setObject:[rawObject objectForKey:@"systemTags"] forKey:@"systemtags"]; - [entry setObject:[rawObject objectForKey:@"tags"] forKey:@"tags"]; + [entry setObject:systemTags forKey:@"systemtags"]; + [entry setObject:tags forKey:@"tags"]; if ([[fetcher representedObject] conformsToProtocol:@protocol(SynchronizedNote)]) [entry setObject:[fetcher representedObject] forKey:@"NoteObject"]; - [entry setObject:[rawObject objectForKey:@"content"] forKey:@"content"]; + [entry setObject:content forKey:@"content"]; //NSLog(@"fetched entry %@" , entry); From efebf810627e4576c9ce2c06a03f94aeadd7235b Mon Sep 17 00:00:00 2001 From: Brett Terpstra Date: Sat, 26 Oct 2013 05:41:26 -0500 Subject: [PATCH 3/6] removing Deployment from repo --- Info.plist | 24 +- .../Deployment/nvALT.app/Contents/Info.plist | 232 -- build/Deployment/nvALT.app/Contents/PkgInfo | 1 - .../Contents/Resources/Acknowledgments.txt | 369 -- .../nvALT.app/Contents/Resources/Add.tiff | Bin 728 -> 0 bytes .../Contents/Resources/Add_Pressed.tiff | Bin 688 -> 0 bytes .../BTransparentScrollerKnobBottom.tif | Bin 3756 -> 0 bytes ...BTransparentScrollerKnobHorizontalFill.tif | Bin 3574 -> 0 bytes .../BTransparentScrollerKnobLeft.tif | Bin 3712 -> 0 bytes .../BTransparentScrollerKnobRight.tif | Bin 3724 -> 0 bytes .../Resources/BTransparentScrollerKnobTop.tif | Bin 3766 -> 0 bytes .../BTransparentScrollerKnobVerticalFill.tif | Bin 3598 -> 0 bytes ...BTransparentScrollerSlotHorizontalFill.tif | Bin 3574 -> 0 bytes .../BTransparentScrollerSlotLeft.tif | Bin 3686 -> 0 bytes .../BTransparentScrollerSlotRight.tif | Bin 3710 -> 0 bytes .../Resources/BTransparentScrollerSlotTop.tif | Bin 3588 -> 0 bytes .../BTransparentScrollerSlotVerticalFill.tif | Bin 3550 -> 0 bytes .../nvALT.app/Contents/Resources/Clear.tif | Bin 420 -> 0 bytes .../Contents/Resources/ClearPressed.tif | Bin 422 -> 0 bytes .../Contents/Resources/DFCapLeftRounded.png | Bin 671 -> 0 bytes .../Resources/DFCapLeftRoundedInactive.png | Bin 665 -> 0 bytes .../Contents/Resources/DFCapRight.png | Bin 239 -> 0 bytes .../Contents/Resources/DFCapRightInactive.png | Bin 233 -> 0 bytes .../nvALT.app/Contents/Resources/Editing.tiff | Bin 4334 -> 0 bytes .../English.lproj/BlorPasswordRetriever.nib | Bin 7356 -> 0 bytes .../English.lproj/CarbonErrorStrings.plist | 166 - .../English.lproj/Contact Information.nvhelp | 19 - .../English.lproj/DeletionManager.nib | Bin 8736 -> 0 bytes .../English.lproj/EncodingsManager.nib | Bin 10217 -> 0 bytes .../Excruciatingly Useful Shortcuts.nvhelp | 97 - .../English.lproj/ExporterManager.nib | Bin 5046 -> 0 bytes .../Resources/English.lproj/FindPanel.nib | Bin 7521 -> 0 bytes .../How does this thing work?.nvhelp | 25 - .../English.lproj/ImporterAccessory.nib | Bin 3084 -> 0 bytes .../Resources/English.lproj/InfoPlist.strings | Bin 376 -> 0 bytes .../English.lproj/KeyDerivationManager.nib | Bin 5686 -> 0 bytes .../English.lproj/Localizable.strings | Bin 46346 -> 0 bytes .../Resources/English.lproj/MainMenu.nib | Bin 44983 -> 0 bytes .../English.lproj/NotationPrefsView.nib | Bin 40242 -> 0 bytes .../English.lproj/PTKeyComboPanel.nib | Bin 6959 -> 0 bytes .../English.lproj/PassphraseChanger.nib | Bin 11812 -> 0 bytes .../English.lproj/PassphrasePicker.nib | Bin 12218 -> 0 bytes .../English.lproj/PassphraseRetriever.nib | Bin 8500 -> 0 bytes .../Resources/English.lproj/Preferences.nib | Bin 30556 -> 0 bytes .../Resources/English.lproj/SavedSearches.nib | Bin 8829 -> 0 bytes .../This is the title of a note.nvhelp | 20 - .../Resources/English.lproj/URLGetter.nib | Bin 5583 -> 0 bytes .../French.lproj/BlorPasswordRetriever.nib | Bin 6530 -> 0 bytes .../French.lproj/CarbonErrorStrings.plist | 166 - .../Ceci est le titre d'une note.nvhelp | 24 - .../Comment c\314\247a marche.nvhelp" | 47 - .../Resources/French.lproj/Contact.nvhelp | 25 - .../French.lproj/DeletionManager.nib | Bin 8831 -> 0 bytes .../French.lproj/EncodingsManager.nib | Bin 10294 -> 0 bytes .../French.lproj/ExporterManager.nib | Bin 5342 -> 0 bytes .../French.lproj/ImporterAccessory.nib | Bin 3161 -> 0 bytes .../Resources/French.lproj/InfoPlist.strings | Bin 356 -> 0 bytes .../French.lproj/KeyDerivationManager.nib | Bin 5739 -> 0 bytes .../French.lproj/Localizable.strings | Bin 49136 -> 0 bytes .../French.lproj/NotationPrefsView.nib | Bin 42699 -> 0 bytes .../French.lproj/PTKeyComboPanel.nib | Bin 8979 -> 0 bytes .../French.lproj/PassphraseChanger.nib | Bin 11918 -> 0 bytes .../French.lproj/PassphrasePicker.nib | Bin 12939 -> 0 bytes .../French.lproj/PassphraseRetriever.nib | Bin 8632 -> 0 bytes .../Raccourcis incroyablement utiles.nvhelp | 74 - .../Resources/French.lproj/URLGetter.nib | Bin 5174 -> 0 bytes .../nvALT.app/Contents/Resources/General.tiff | Bin 4334 -> 0 bytes .../Resources/Markdown_1.0.1/License.text | 30 - .../Markdown_1.0.1/Markdown Readme.text | 341 -- .../Resources/Markdown_1.0.1/Markdown.pl | 1450 ------- .../Contents/Resources/MarkupPreview.nib | Bin 13501 -> 0 bytes .../MultiMarkdown/Documentation/GPL.txt | 338 -- .../Documentation/Markdown Readme.text | 352 -- .../Documentation/Markdown Syntax.md | 128 - .../MultiMarkdown User's Guide.md | 1861 --------- .../Documentation/SmartyPants Readme.txt | 681 ---- .../MultiMarkdownXSLTMathML/README | 103 - .../MultiMarkdownXSLTMathML/cmarkup.xsl | 1107 ----- .../MultiMarkdownXSLTMathML/entities.xsl | 460 --- .../MultiMarkdownXSLTMathML/glayout.xsl | 223 -- .../MultiMarkdownXSLTMathML/mmltex.xsl | 64 - .../MultiMarkdownXSLTMathML/scripts.xsl | 376 -- .../MultiMarkdownXSLTMathML/tables.xsl | 131 - .../MultiMarkdownXSLTMathML/tokens.xsl | 329 -- .../Resources/MultiMarkdown/README.txt | 103 - .../Utilities/align_elastic_tabstops.pl | 143 - .../MultiMarkdown/Utilities/autocomplete.pl | 88 - .../MultiMarkdown/Utilities/cleancites.pl | 40 - .../MultiMarkdown/Utilities/mmd_merge.pl | 126 - .../MultiMarkdown/Utilities/table_cleanup.pl | 354 -- .../MultiMarkdown/XSLT/6x9book-poetry.xslt | 68 - .../XSLT/6x9book-real-poetry.xslt | 212 - .../Resources/MultiMarkdown/XSLT/6x9book.xslt | 116 - .../MultiMarkdown/XSLT/article-natbib.xslt | 106 - .../Resources/MultiMarkdown/XSLT/article.xslt | 106 - .../Resources/MultiMarkdown/XSLT/beamer.xslt | 426 -- .../XSLT/clean-text-allow-latex.xslt | 278 -- .../MultiMarkdown/XSLT/clean-text-poetry.xslt | 129 - .../MultiMarkdown/XSLT/clean-text-rtf.xslt | 220 - .../MultiMarkdown/XSLT/clean-text.xslt | 336 -- .../MultiMarkdown/XSLT/custom-envelope.xslt | 74 - .../MultiMarkdown/XSLT/custom-letterhead.xslt | 100 - .../MultiMarkdown/XSLT/envelope.xslt | 216 - .../MultiMarkdown/XSLT/latex-snippet.xslt | 263 -- .../MultiMarkdown/XSLT/letterhead.xslt | 306 -- .../MultiMarkdown/XSLT/manuscript-novel.xslt | 278 -- .../MultiMarkdown/XSLT/memoir-natbib.xslt | 69 - .../MultiMarkdown/XSLT/memoir-poetry.xslt | 66 - .../MultiMarkdown/XSLT/memoir-twosided.xslt | 64 - .../MultiMarkdown/XSLT/memoir-xelatex.xslt | 82 - .../Resources/MultiMarkdown/XSLT/memoir.xslt | 435 -- .../MultiMarkdown/XSLT/multimarkdown.xslt | 481 --- .../MultiMarkdown/XSLT/natbib-support.xslt | 86 - .../MultiMarkdown/XSLT/opml2mmd.xslt | 112 - .../Resources/MultiMarkdown/XSLT/s5.xslt | 157 - .../Resources/MultiMarkdown/XSLT/science.xslt | 144 - .../XSLT/sffms-no-chapter-titles.xslt | 61 - .../Resources/MultiMarkdown/XSLT/sffms.xslt | 293 -- .../Resources/MultiMarkdown/XSLT/snippet.xslt | 77 - .../MultiMarkdown/XSLT/xhtml-google-docs.xslt | 135 - .../XSLT/xhtml-poetry-support.xslt | 78 - .../MultiMarkdown/XSLT/xhtml-static-site.xslt | 85 - .../MultiMarkdown/XSLT/xhtml-toc-h2.xslt | 134 - .../MultiMarkdown/XSLT/xhtml-toc.xslt | 134 - .../MultiMarkdown/XSLT/xhtml2latex.xslt | 1238 ------ .../MultiMarkdown/XSLT/xhtml2rtf.xslt | 540 --- .../Contents/Resources/MultiMarkdown/base.css | 375 -- .../MultiMarkdown/bin/ASCIIMathML.pm | 1785 --------- .../MultiMarkdown/bin/MultiMarkdown.pl | 2728 ------------- .../bin/MultiMarkdown/Support.pm | 622 --- .../Resources/MultiMarkdown/bin/OPML2mmd.pl | 212 - .../MultiMarkdown/bin/SmartyPants.pl | 1175 ------ .../MultiMarkdown/bin/SmartyPantsDutch.pl | 1176 ------ .../MultiMarkdown/bin/SmartyPantsFrench.pl | 1177 ------ .../MultiMarkdown/bin/SmartyPantsGerman.pl | 1177 ------ .../MultiMarkdown/bin/SmartyPantsSwedish.pl | 1177 ------ .../Resources/MultiMarkdown/bin/XHTML2mmd.pl | 221 - .../MultiMarkdown/bin/addmetadata.pl | 30 - .../Resources/MultiMarkdown/bin/mmd2LaTeX.pl | 219 - .../Resources/MultiMarkdown/bin/mmd2OPML.pl | 267 -- .../Resources/MultiMarkdown/bin/mmd2PDF.pl | 214 - .../MultiMarkdown/bin/mmd2PDFXeLaTeX.pl | 213 - .../Resources/MultiMarkdown/bin/mmd2RTF.pl | 218 - .../Resources/MultiMarkdown/bin/mmd2XHTML.pl | 218 - .../MultiMarkdown/bin/mmd2ZettelXHTML.pl | 222 - .../Resources/MultiMarkdown/bin/mmd2letter.pl | 229 -- .../Resources/MultiMarkdown/bin/mmd2web.pl | 223 -- .../MultiMarkdown/bin/multimarkdown2RTF.pl | 140 - .../MultiMarkdown/bin/multimarkdown2XHTML.pl | 1 - .../MultiMarkdown/bin/multimarkdown2latex.pl | 1 - .../Contents/Resources/Notality.icns | Bin 184185 -> 0 bytes .../Contents/Resources/Notation.sdef | 14 - .../nvALT.app/Contents/Resources/Notes.tiff | Bin 4334 -> 0 bytes .../Contents/Resources/PTKeyCodes.plist | 103 - .../Contents/Resources/PTKeyboardIcon.tiff | Bin 2646 -> 0 bytes .../Resources/PasswordAssistantButton.tif | Bin 570 -> 0 bytes .../PasswordAssistantButtonPressed.tif | Bin 530 -> 0 bytes .../nvALT.app/Contents/Resources/Pencil.png | Bin 301 -> 0 bytes ...talhos Incrivelmente U\314\201teis.nvhelp" | 80 - .../BlorPasswordRetriever.nib | Bin 7793 -> 0 bytes .../Portuguese.lproj/CarbonErrorStrings.plist | 166 - .../Como funciona isso?.nvhelp | 24 - .../Portuguese.lproj/DeletionManager.nib | Bin 8671 -> 0 bytes .../Portuguese.lproj/EncodingsManager.nib | Bin 10302 -> 0 bytes ...4\201 o ti\314\201tulo de uma nota.nvhelp" | 23 - .../Portuguese.lproj/ExporterManager.nib | Bin 5838 -> 0 bytes .../Portuguese.lproj/ImporterAccessory.nib | Bin 3367 -> 0 bytes .../Portuguese.lproj/InfoPlist.strings | Bin 368 -> 0 bytes ...rmac\314\247o\314\203es de Contato.nvhelp" | 24 - .../Portuguese.lproj/KeyDerivationManager.nib | Bin 6010 -> 0 bytes .../Portuguese.lproj/Localizable.strings | Bin 48286 -> 0 bytes .../Portuguese.lproj/NotationPrefsView.nib | Bin 42668 -> 0 bytes .../Portuguese.lproj/PTKeyComboPanel.nib | Bin 8818 -> 0 bytes .../Portuguese.lproj/PassphraseChanger.nib | Bin 12345 -> 0 bytes .../Portuguese.lproj/PassphrasePicker.nib | Bin 12881 -> 0 bytes .../Portuguese.lproj/PassphraseRetriever.nib | Bin 8720 -> 0 bytes .../Resources/Portuguese.lproj/URLGetter.nib | Bin 5523 -> 0 bytes .../nvALT.app/Contents/Resources/Remove.tiff | Bin 694 -> 0 bytes .../Contents/Resources/Remove_Pressed.tiff | Bin 656 -> 0 bytes .../nvALT.app/Contents/Resources/Search.png | Bin 482 -> 0 bytes .../nvALT.app/Contents/Resources/SnapBack.tif | Bin 760 -> 0 bytes .../Contents/Resources/SnapBackPressed.tif | Bin 734 -> 0 bytes .../Contents/Resources/SplitViewDimple.tif | Bin 3558 -> 0 bytes .../nvALT.app/Contents/Resources/TBAlert.png | Bin 269 -> 0 bytes .../Contents/Resources/TBAlertWhite.png | Bin 763 -> 0 bytes .../Contents/Resources/TBDownArrow.png | Bin 223 -> 0 bytes .../Contents/Resources/TBDownArrowWhite.png | Bin 218 -> 0 bytes .../Contents/Resources/TBMousedownBG.png | Bin 913 -> 0 bytes .../Contents/Resources/TBRolloverBG.png | Bin 719 -> 0 bytes .../Contents/Resources/TBSynchronizing.png | Bin 720 -> 0 bytes .../Resources/TBSynchronizingWhite.png | Bin 730 -> 0 bytes .../Contents/Resources/TabClose_Front.tif | Bin 518 -> 0 bytes .../Resources/TabClose_Front_Pressed.tif | Bin 520 -> 0 bytes .../Resources/TabClose_Front_Rollover.tif | Bin 514 -> 0 bytes .../Resources/Textile_2.12/Text/Textile.pm | 3568 ----------------- .../Resources/Textile_2.12/textilize.pl | 15 - .../Contents/Resources/TinyAlert.tif | Bin 4952 -> 0 bytes .../nvALT.app/Contents/Resources/dsa_pub.pem | 12 - .../Resources/greyscrollervertbottom.tiff | Bin 378 -> 0 bytes .../Resources/greyscrollervertbottom2.tiff | Bin 346 -> 0 bytes .../Resources/greyscrollervertfill.tiff | Bin 320 -> 0 bytes .../Resources/greyscrollervertfill2.tiff | Bin 322 -> 0 bytes .../Resources/greyscrollerverttop.tiff | Bin 378 -> 0 bytes .../Resources/greyscrollerverttop2.tiff | Bin 346 -> 0 bytes .../Contents/Resources/scrollbarblue.tif | Bin 3578 -> 0 bytes .../Contents/Resources/statusError.png | Bin 503 -> 0 bytes .../Contents/Resources/statusInProgress.png | Bin 541 -> 0 bytes .../Contents/Resources/statusValidated.png | Bin 543 -> 0 bytes .../Contents/Resources/tan_column_header.png | Bin 2822 -> 0 bytes 209 files changed, 12 insertions(+), 35859 deletions(-) delete mode 100644 build/Deployment/nvALT.app/Contents/Info.plist delete mode 100644 build/Deployment/nvALT.app/Contents/PkgInfo delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Acknowledgments.txt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Add.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Add_Pressed.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobBottom.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobHorizontalFill.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobLeft.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobRight.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobTop.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobVerticalFill.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotHorizontalFill.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotLeft.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotRight.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotTop.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotVerticalFill.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Clear.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/ClearPressed.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/DFCapLeftRounded.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/DFCapLeftRoundedInactive.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/DFCapRight.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/DFCapRightInactive.png delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Editing.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/BlorPasswordRetriever.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/English.lproj/CarbonErrorStrings.plist delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/English.lproj/Contact Information.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/DeletionManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/EncodingsManager.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/English.lproj/Excruciatingly Useful Shortcuts.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/ExporterManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/FindPanel.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/English.lproj/How does this thing work?.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/ImporterAccessory.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/InfoPlist.strings delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/KeyDerivationManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/Localizable.strings delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/MainMenu.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/NotationPrefsView.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/PTKeyComboPanel.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/PassphraseChanger.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/PassphrasePicker.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/PassphraseRetriever.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/Preferences.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/SavedSearches.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/English.lproj/This is the title of a note.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/English.lproj/URLGetter.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/BlorPasswordRetriever.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/French.lproj/CarbonErrorStrings.plist delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/French.lproj/Ceci est le titre d'une note.nvhelp delete mode 100755 "build/Deployment/nvALT.app/Contents/Resources/French.lproj/Comment c\314\247a marche.nvhelp" delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/French.lproj/Contact.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/DeletionManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/EncodingsManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/ExporterManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/ImporterAccessory.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/InfoPlist.strings delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/KeyDerivationManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/Localizable.strings delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/NotationPrefsView.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/PTKeyComboPanel.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/PassphraseChanger.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/PassphrasePicker.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/PassphraseRetriever.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/French.lproj/Raccourcis incroyablement utiles.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/French.lproj/URLGetter.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/General.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/License.text delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown Readme.text delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown.pl delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/MarkupPreview.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/GPL.txt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Readme.text delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Syntax.md delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/MultiMarkdown User's Guide.md delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/SmartyPants Readme.txt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/README delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/cmarkup.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/entities.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/glayout.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/mmltex.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/scripts.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tables.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tokens.xsl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/README.txt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/align_elastic_tabstops.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/autocomplete.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/cleancites.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/mmd_merge.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/table_cleanup.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-poetry.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-real-poetry.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article-natbib.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/beamer.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-allow-latex.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-poetry.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-rtf.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-envelope.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-letterhead.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/envelope.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/latex-snippet.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/letterhead.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/manuscript-novel.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-natbib.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-poetry.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-twosided.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-xelatex.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/multimarkdown.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/natbib-support.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/opml2mmd.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/s5.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/science.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms-no-chapter-titles.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/snippet.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-google-docs.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-poetry-support.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-static-site.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc-h2.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2latex.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2rtf.xslt delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/base.css delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/ASCIIMathML.pm delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown/Support.pm delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/OPML2mmd.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPants.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPantsDutch.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPantsFrench.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPantsGerman.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPantsSwedish.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/XHTML2mmd.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/addmetadata.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2LaTeX.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2OPML.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2PDF.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2PDFXeLaTeX.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2RTF.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2XHTML.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2ZettelXHTML.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2letter.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/mmd2web.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/multimarkdown2RTF.pl delete mode 120000 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/multimarkdown2XHTML.pl delete mode 120000 build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/multimarkdown2latex.pl delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Notality.icns delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Notation.sdef delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Notes.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/PTKeyCodes.plist delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/PTKeyboardIcon.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/PasswordAssistantButton.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/PasswordAssistantButtonPressed.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Pencil.png delete mode 100755 "build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/Atalhos Incrivelmente U\314\201teis.nvhelp" delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/BlorPasswordRetriever.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/CarbonErrorStrings.plist delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/Como funciona isso?.nvhelp delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/DeletionManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/EncodingsManager.nib delete mode 100755 "build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/Este e\314\201 o ti\314\201tulo de uma nota.nvhelp" delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/ExporterManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/ImporterAccessory.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/InfoPlist.strings delete mode 100755 "build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/Informac\314\247o\314\203es de Contato.nvhelp" delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/KeyDerivationManager.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/Localizable.strings delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/NotationPrefsView.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/PTKeyComboPanel.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/PassphraseChanger.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/PassphrasePicker.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/PassphraseRetriever.nib delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/Portuguese.lproj/URLGetter.nib delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Remove.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Remove_Pressed.tiff delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Search.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/SnapBack.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/SnapBackPressed.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/SplitViewDimple.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBAlert.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBAlertWhite.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBDownArrow.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBDownArrowWhite.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBMousedownBG.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBRolloverBG.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBSynchronizing.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TBSynchronizingWhite.png delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/TabClose_Front.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/TabClose_Front_Pressed.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/TabClose_Front_Rollover.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Textile_2.12/Text/Textile.pm delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/Textile_2.12/textilize.pl delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/TinyAlert.tif delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/dsa_pub.pem delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollervertbottom.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollervertbottom2.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollervertfill.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollervertfill2.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollerverttop.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/greyscrollerverttop2.tiff delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/scrollbarblue.tif delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/statusError.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/statusInProgress.png delete mode 100755 build/Deployment/nvALT.app/Contents/Resources/statusValidated.png delete mode 100644 build/Deployment/nvALT.app/Contents/Resources/tan_column_header.png diff --git a/Info.plist b/Info.plist index 6473a4de..28eb7fb5 100755 --- a/Info.plist +++ b/Info.plist @@ -139,6 +139,8 @@ net.elasticthreads.nv CFBundleInfoDictionaryVersion 6.0 + CFBundleName + CFBundlePackageType APPL CFBundleShortVersionString @@ -160,7 +162,7 @@ CFBundleVersion - 109 + 105 LSApplicationCategoryType public.app-category.productivity LSArchitecturePriority @@ -169,9 +171,9 @@ i386 LSMinimumSystemVersion - 10.7 - CFBundleName - + 10.6.8 + LSUIElement + NSAppleScriptEnabled NSMainNibFile @@ -195,12 +197,6 @@ createFromSelection NSPortName nvALT - NSSendTypes - - com.apple.flat-rtfd - public.rtf - public.plain-text - NSSendFileTypes public.text @@ -208,6 +204,12 @@ com.apple.webarchive com.adobe.pdf + NSSendTypes + + com.apple.flat-rtfd + public.rtf + public.plain-text + OSAScriptingDefinition @@ -220,8 +222,6 @@ 345600 SmartCrashReports_CompanyName Notational.net - LSUIElement - SmartCrashReports_EmailTicket SCR-51ED0F7B2A diff --git a/build/Deployment/nvALT.app/Contents/Info.plist b/build/Deployment/nvALT.app/Contents/Info.plist deleted file mode 100644 index 48fa2428..00000000 --- a/build/Deployment/nvALT.app/Contents/Info.plist +++ /dev/null @@ -1,232 +0,0 @@ - - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - rtfd - - CFBundleTypeName - NSRTFDPboardType - CFBundleTypeOSTypes - - RTFD - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.apple.rtfd - - LSTypeIsPackage - - - - CFBundleTypeExtensions - - htm - html - - CFBundleTypeOSTypes - - HTML - - CFBundleTypeRole - Editor - LSItemContentTypes - - public.html - - - - CFBundleTypeExtensions - - pdf - - CFBundleTypeOSTypes - - PDF - - CFBundleTypeRole - Viewer - LSItemContentTypes - - com.adobe.pdf - - - - CFBundleTypeExtensions - - rtf - rtx - - CFBundleTypeName - NSRTFPboardType - CFBundleTypeOSTypes - - RTF - - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.rtf - - - - CFBundleTypeExtensions - - doc - docx - - CFBundleTypeName - Imported Microsoft Word Document - CFBundleTypeOSTypes - - W8BN - W6BN - - CFBundleTypeRole - Viewer - - - CFBundleTypeExtensions - - txt - text - utf8 - utxt - md - markdown - - CFBundleTypeName - NSStringPboardType - CFBundleTypeOSTypes - - TEXT - sEXT - ttro - - CFBundleTypeRole - Viewer - LSItemContentTypes - - public.text - public.plain-text - - - - CFBundleTypeExtensions - - blor - - CFBundleTypeName - Notational Velocity BLOR - CFBundleTypeRole - Viewer - - - CFBundleExecutable - Notational Velocity - CFBundleGetInfoString - nvALT 1.0 by Brett Terpstra, based on NV 2.0 β3mmd2, Copyright © 2010 Zachary Schneirov, Christian Tietze, All Rights Reserved. - CFBundleIconFile - Notality - CFBundleIdentifier - net.notational.velocity - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.4 - CFBundleSignature - N†l√ - CFBundleURLTypes - - - CFBundleURLName - net.notational.velocity - - - CFBundleURLSchemes - - nv - - - - CFBundleVersion - 1.0.4 - LSArchitecturePriority - - x86_64 - i386 - ppc - - LSMinimumSystemVersion - 10.5 - LSMinimumSystemVersionByArchitecture - - i386 - 10.5 - ppc - 10.5 - x86_64 - 10.6.0 - - NSAppleScriptEnabled - - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - NSServices - - - NSKeyEquivalent - - default - V - - NSMenuItem - - default - NV: New Note With Selection - - NSMessage - createFromSelection - NSPortName - Notational Velocity - NSSendTypes - - NSRTFDPboardType - NSRTFPboardType - NSStringPboardType - NSURLPboardType - NSFilenamesPboardType - Apple Web Archive pasteboard type - com.apple.webarchive - - - - OSAScriptingDefinition - Notation.sdef - SUCheckAtStartup - - SUFeedURL - http://abyss.designheresy.com/nvalt/updates.xml - SUPublicDSAKeyFile - dsa_pub.pem - SUScheduledCheckInterval - 345600 - SmartCrashReports_CompanyName - Notational.net - SmartCrashReports_EmailTicket - SCR-51ED0F7B2A - - diff --git a/build/Deployment/nvALT.app/Contents/PkgInfo b/build/Deployment/nvALT.app/Contents/PkgInfo deleted file mode 100644 index b1aca7b1..00000000 --- a/build/Deployment/nvALT.app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPLNl \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/Acknowledgments.txt b/build/Deployment/nvALT.app/Contents/Resources/Acknowledgments.txt deleted file mode 100755 index 2165559f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/Acknowledgments.txt +++ /dev/null @@ -1,369 +0,0 @@ -nvALT is built on Notational Velocity, copyright Zachary Schneirov, Christian Tietze, the use of which is hereby acknowledged. - -Portions of Notational Velocity contain the following copyrighted materials, the use of which is hereby acknowledged. - --- - -Sparkle Framework - -Copyright (c) 2006 Andy Matuschak -  -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --- - -HotKeys - -Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved. - --- - -RBSplitView - -Created by Rainer Brockerhoff on 19/11/2004. -Copyright 2004-2006 Rainer Brockerhoff. -Some Rights Reserved under the Creative Commons Attribution License, -version 2.5, and/or the MIT License. - - --- - -BWToolkit - -Copyright (c) 2010, Brandon Walkin -All rights reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of the Brandon Walkin nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --- - -CiphSafe NSData compression category methods - -Copyright © 2003, Bryan L Blackburn. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. Neither the names Bryan L Blackburn, Withay.com, nor the names of - any contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY BRYAN L BLACKBURN ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --- - -TextExtras - -Copyright © 1996-2006, Mike Ferris. All rights reserved. - --- - -IDEA encryption algorithm: - -IDEA(tm) is a trademark of Ascom Systec AG. There is no license fee - required for non-commercial use. Commercial users of IDEA may - obtain licensing information from Ascom Systec AG. - e-mail: IDEA@ascom.ch - fax: ++41 64 56 59 54 - --- - -Smultron version 3.1.2, 2007-07-16 -Written by Peter Borg, pgw3@mac.com -Find the latest version at http://smultron.sourceforge.net - -Copyright 2004-2007 Peter Borg - -Licensed under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy -of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations -under the License. - --- - -BSJSONAdditions - -Created by Blake Seely on 2009/03/24. -Copyright 2006 Blake Seely - http://www.blakeseely.com All rights reserved. -Permission to use this code: - -Feel free to use this code in your software, either as-is or -in a modified form. Either way, please include a credit in -your software's "About" box or similar, mentioning at least -my name (Blake Seely). - -Permission to redistribute this code: - -You can redistribute this code, as long as you keep these -comments. You can also redistribute modified versions of the -code, as long as you add comments to say that you've made -modifications (keeping these original comments too). - -If you do use or redistribute this code, an email would be -appreciated, just to let me know that people are finding my -code useful. You can reach me at blakeseely@mac.com - --- - -OpenSSL License ---------------- - -==================================================================== -Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - -3. All advertising materials mentioning features or use of this - software must display the following acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit. (http://www.openssl.org/)" - -4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to - endorse or promote products derived from this software without - prior written permission. For written permission, please contact - openssl-core@openssl.org. - -5. Products derived from this software may not be called "OpenSSL" - nor may "OpenSSL" appear in their names without prior written - permission of the OpenSSL Project. - -6. Redistributions of any form whatsoever must retain the following - acknowledgment: - "This product includes software developed by the OpenSSL Project - for use in the OpenSSL Toolkit (http://www.openssl.org/)" - -THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY -EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR -ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. -==================================================================== - -This product includes cryptographic software written by Eric Young -(eay@cryptsoft.com). This product includes software written by Tim -Hudson (tjh@cryptsoft.com). - - - Original SSLeay License - ----------------------- - -Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) -All rights reserved. - -This package is an SSL implementation written -by Eric Young (eay@cryptsoft.com). -The implementation was written so as to conform with Netscapes SSL. - -This library is free for commercial and non-commercial use as long as -the following conditions are aheared to. The following conditions -apply to all code found in this distribution, be it the RC4, RSA, -lhash, DES, etc., code; not just the SSL code. The SSL documentation -included with this distribution is covered by the same copyright terms -except that the holder is Tim Hudson (tjh@cryptsoft.com). - -Copyright remains Eric Young's, and as such any Copyright notices in -the code are not to be removed. -If this package is used in a product, Eric Young should be given attribution -as the author of the parts of the library used. -This can be in the form of a textual message at program startup or -in documentation (online or textual) provided with the package. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. All advertising materials mentioning features or use of this software - must display the following acknowledgement: - "This product includes cryptographic software written by - Eric Young (eay@cryptsoft.com)" - The word 'cryptographic' can be left out if the rouines from the library - being used are not cryptographic related :-). -4. If you include any Windows specific code (or a derivative thereof) from - the apps directory (application code) you must include an acknowledgement: - "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - -THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -The licence and distribution terms for any publically available version or -derivative of this code cannot be changed. i.e. this code cannot simply be -copied and put under another distribution licence -[including the GNU Public Licence.] - --- - -sha1.c - Functions to compute SHA1 message digest of files or -memory blocks according to the NIST specification FIPS-180-1. - -Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006 Free Software -Foundation, Inc. - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -Written by Scott G. Miller -Credits: -Robert Klep -- Expansion function fix - --- - -hmac-sha1.c -- hashed message authentication codes -Copyright (C) 2005, 2006 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software Foundation, -Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - -Written by Simon Josefsson. - --- - -stringencoders - -Copyright 2005, 2006, 2007 -Nick Galbreath -- nickg [at] modp [dot] com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - Neither the name of the modp.com nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This is the standard "new" BSD license: -http://www.opensource.org/licenses/bsd-license.php diff --git a/build/Deployment/nvALT.app/Contents/Resources/Add.tiff b/build/Deployment/nvALT.app/Contents/Resources/Add.tiff deleted file mode 100755 index b78b0c2a631a0fd47323d347943cf1f44180a630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 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 AnE(I) diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobLeft.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobLeft.tif deleted file mode 100644 index ef91486d8e6222afadd7b900d2e063093b4e6fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3712 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobRight.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobRight.tif deleted file mode 100644 index 5a8707b51e88c5361fd084da623378611dd1b759..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3724 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 BWO)Dp diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobTop.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobTop.tif deleted file mode 100644 index 9bfce2ec96707eb810372a4e4aa4d724491dc63c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3766 zcmbW32UJtZ8pr3}n@&PY2pvLi0-=WqJrqESg@^t ztQAo#h=O7-K^74!>LPaD4Y2${yn*0zF#e%hEy_ zD^op9)E|C|E^sqr(=US%`(u^x~VEg%wj5g+-KKf=4jex=Z0nPi`{FK+*u;64IQyu^%RFDZ} z$f!Jjsf20)!Q*yRDOevue)wQfJMIU=C@V~=XALR-u%in?Ns_1<(=DQGXZ6dYow}M?kJqd?KdA&KPHD{z)tOllu}@ zW&=E0cz@I`kX9TJCOT@6CIkL@dT=s@0!9u`n9a`=Fsv=?Eo>64fHjlJa$-6Sd@69Vgd#MdFx20M%gg4VT!eCZt|&`tA4Zv$ zm?mWyRR++6Xo4uKNI7|er;YneFk8yp3;`GQk>;Gm&EQJ89pzOyVjjv!Fv`U_d|ocf zH&ND47iaKM{)jRygO`vE00uoS z2Pe)w%IN&~_-_MTj{bzR`N<5a*()NF!4V5{q>SDP>3{_!AO~nb6=(rHU<}NGHE;mV zfDL>=AP5DKU^bWsI3NXN03pZ)i@-8a3`)UTunAOyTCfu|fJSfxG=mf1EVux!fa{Vt-$chF}Tfypop)`SgVOPB?Fz(H^%JQq%e=fex&B6tm4 z3D?8>;U@SjdCGZP)1pS=IAaq0rF-KU47ZQrZAW4W2S%Q=x6-YhOh_oUd$PGk- zyhJ`>a2P6vficH8WBf5QF&xZ%%o0o)rW&&c(}Zcq+`#l@n?NEc^biIKUx@NV1ELc# zl*lFK6U&J^iLJzI!~x| zbyL{X&NRie#`KyQY-Vr9H`{8~JqnuAgzccNa>CBzX`&NopfmVf9tyb@>O|3cBHP$z6C^o(}1vV`=}MpPcNSL{3MX z-Z+~(r#bI+e&%B2!gJZ_((kJ4n&7(KRpQ2Qi+8JYlep`+C%D(UKVj>!x$Ir+K@Ss; zRFC~0uRWQbLeFEKqh3y4i@nZxBi?@ACEi^=ias-as(l{$>iQ=8?(-e?v-4Z%cg7#< zALPHz|8{_804Ja!U^vhraB*OJ5IJZ@P<7CgVAEh>aBB!05*V@}4NFap&&FM zbVKOFFr%>fVZVpt!o$LA!kSeMij8WB z8jbdjULP%)WjSl{tShtCX7gva#NcD1Vs^!h%<-ACY0f~bU2Jjet+_^X^X6Wfr#3Hr z-pM$*xP-W)@!0t2_`UI86G9W}6GjpP61OA{bG$g4IWM?u?ndqq&y}~HH<;v_v_9!s zvTO2&d@p`A|81&&YHjLhT4>ttw6XN)^n)3MjQEV>0!2ZZpgmJ7GcU6{ z%PgxnOETYS{-*iE!XV+UY$$tfc8iFH{+a3&8;e(n`*PfJYH~j2M&%yOQ^*tKb>^Gq zug)J_;Je`0g_wn$g>8#;7A;%Ux7cIx_9f7g#3gM7dId!V155pu?pa1!mbUC_A+vCO z;h)Q+m$w#a7A-C6U*Wf6U$Jblu=w^$=asdqFst~hx>nn)u3G)Qgj;gClv!F)`n8Nx zcKH{pUn+kYTa&b=tK7bP+gjXO!P;Bv+}G_{udsf>`u+_e8=5vUHkNGsb5q==OBJ>i zwVO$s#hWFS!Idpl`c-SIzE-DH_ttpU9NeO@W%ZWPt=z3W+t}M0Yc*?2Yd_cV>+Wp# z+ul@fSYNRNwAy9K)?dm{Famh0s42f`xH+X+ z(lWcH`*`5-wpQoXW4~MczWapEiJFs2C(BQfP8FRRJH6oa$eFA&FV7~Q?Qe@~yMJ!h zxts0b?Oo@C&R@LXd*NJ%N5|=lt`|>Sa=LW}|;%?wx0M)9=2$mvisS{iP4E z4@w@&KdgA9@u>c>$>W0(d&$W@@4n6_GoIY<=k&k$Bm0l914U0MPb&ts2OFMQKRYqx zJ9Pc|oaX~CvR-_7S^P@j)t1-BuYY^Pe$zQTYk1(T@a@>UviGX*cmHYoXWK~F$fFM# pAHIy1d{q6o=M(Ew$LHwJgI{vL;=fjYGx^r~J?Q&`v5c{?e*qp)bW#8S diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobVerticalFill.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerKnobVerticalFill.tif deleted file mode 100644 index 7997a53550ce6f11cb9835d52f95c0397c34d353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3598 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 YOyqpTf2{mu@~QoEz~_5k(!YH96DI&FNdN!< diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotHorizontalFill.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotHorizontalFill.tif deleted file mode 100644 index cd904d370e8a5d650dcedcb374004d01d6932498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3574 zcmbW32UHVT7subsq!(I3=rHsqC7}fnDWM8T6$DWUNq|s73<2yFQGpdjMFa~Xiy|&q zRzTK@C>9pQ-WOyMQP;&)Y*=;zF7kcn?0(`gq2S_qjIo3S=WKy?$1A8)#;(3wYo3-w)8U& z=$!HbKpjgoo)P*hJC*~2NA1`OPy&Q}^}%B!!dHedRvllJ1F22OqyCi@(X26EhN*%y z#{JD9ZGdG{JO?C%bjCRY(w&gU;wvlGVgsxP`WVR}&L}f6E`>ZM_(V>KjT&Wzg4)&M z@pVb7vjGtRS|Da`!14h=8f%zAAqM<)_ZDU)iO}%WEO}OTYL*n`MLD9Oe1TY^7z2*I zJ=cxRcC+W89D6s8gB#mk5kA(i>>*-F7OVn5rbI4_4Ddl`#Koh;E=)BU5C9thz93r~ z8s#6Y5D?_YL$fg_1%JITA#ZMu$^qAG0>e@CuZjQjt}2kq)G=b%! zd6-TBcv;fy6hA^%W)ab28+pqNswbjI10Pnl0rEM5xVwAL4%9~9g`wO$s(CZf-Mz;oiec` z1>0_kP%IZ`Nl>xm?{@fKhE33*z_D|U0i)(KV9v1xDwml6`K=S+7*v2H?7(KA@qG&+ z#{k8f7i%yucJ498=12Sg=-?7;2xp5^P=%Qn8I1~ZWVs5)-U&sA2Na+Tm_Q5r?im9M zU;{Y71-Jt*;0LCHFc1ymz-%A@sUQ=`Kpt2GmV*LN1lEJipaSd!HJ}bOfJ2}e90RAp zIdBPF0XM)s&;$CxGcW|+fDs6Sh!7oOKw6LiWC~eB9Eb}|f&8ElC=!Z;5}_1G0_8x9 zpp{S&_O-2mc0qN}LFg!S8oB^=LwBHFXb}1X`T!#^4Q9f6uo-Lzb75~d7><+JbVGZ3}1^sfl%xlWQys-ASqhGye!lWS9N(`(DJ4Y6He z+id&7&crU>Zi8Ki-Di6z`waUU`+ICP_Eh!?b}Rc2jul71spMRDpgZ_GEOlscc-Xb>Vk%*x=dX>wLO>?92Hy<{3ygKL>AH-3WrV&-57d*n&~vj zwB|4n78JHI>_NDB_}uWHA_x)T5tR{-BiWIQB0HiOQFEg9MZJmki7tu0H{D`-&h)kz z<(Pz+x|p}IzOkjTJu~cPES_;GPCHH<*Ah>RkBP61AD-zqbMwsp1gC_8gqyR>XU&^+ zVYc?{jM>NMD9_=~Ih=@3j7{8^_>mvRujUUY1to1u8WQjXTLjO9UcybnL6L{3R5Xz6 zkzAVmB*i0TW6EHvXKGpMb1_d`A%2+_n6@+RZF*Sxp7bvnu^Ek-q|C(3qY^bqx}-fz zKWkoAx71o%Anlp!Hh1&fAz84jHXF*GmE9s|Vt=MOb1ZUJ<@DxG$*s(NmluSdm(Bqtd6cahvY8wcFlq7jD10!)r&wPQ9H) zJ3my3t8VWK*ws{RR$aE6use76V7j_*BiYllH*#-#ol9NaKHYsK z^>BSo{owwD{a1eQ{h_77reRkjtFh<+IFNJT>A}Q*6QAR9|lJ9J`z8cf3p14`Z@UX{V$nczWfOXnjYf- diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotLeft.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotLeft.tif deleted file mode 100644 index 4bcd1a45792b9e78b1f6d98cd054c329bf1cb359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3686 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 JYwFjp{{lguMvVXf diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotRight.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotRight.tif deleted file mode 100644 index f9a5ab96335d84c4315a253ba0c9169aeb13d9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3710 zcmbW32Uru?7RT>QdV@ehq%-v1TL6&~dXXv!qJl|)Py&X8W=8}CR}>LxDk7^QE_OiH z24Y84?Dc_&h@y+Dh>ELk0xt62_wBy-?acSx{N~(q?){&0?j#8e1V#XWrvOt60SrnI zdV^XRU?&&=d@W{*DX0ys1PCXQ4vpd@?ei@npD_V_EnVY~1>?ENw`E=nu17pmc);37 zLuw7G-;>A6-~~M`H45d571X|KpK9@b#GKi#o3`HMS-VtnYL9q-q`mUS&m5Xv``B)^ zI|u=m2^Sq6M&=TX!#^v~@$U~})a~qpbFaoUxR|;YN{*7kQwra3{1Ec3FYrC}m6ca6 z&x5yi5oJ#xVh(#iCGecVuo$Geb;oInnZ+Tq{ngji0OYH;(r`CP1ZCWCZYUzzKAbGw~9bdnLwC;wp+*(hy`gvL?HaD z4*$cjX&R(Bd9G1l)PDucg=T<$jR`QXy8xC!0hpNW=nOQ~w*XQEkiL158iSMP9%XcX zV*HN*ER0JtC#qyiDh0!zUvPymX-Mz94`fgPY8G=L^>7_@*BpdFkCSHN{}8$1NPU;w-V zBj5uVhaiXm(I5t-1ZhCJkTGNhv7uRzClmmMLQzmGlmH1K3A7Yi4HZMBP!+TjYJd(w z$DwxU5_AK)5A{Jq(C^S^7z0ybCaebQ!R9ax@F@DTLcy>wnix|I8^gf_VWKhd7!hVUrU+Axslzm3+AtR|H!;1KVaz8i z9?QTYSW~PM)(1NW%f&9nF2}CNR$=#Io3WkPo7g_=2=*(EhEv5E;~a6mxVg9lTo$eX zSB~3_JBB-lyNw&beZb@KEWAG69`A#X!YARE;Me1~;Sb=?;BVmj@uLI+L5W~Ya3%y1 z;s|0w0ilwxpKzMcLl_`@BvObPL@S~fF`6hO<`K(@`-rEAJ;XucIEhZuB{`CUNIX&w zsf1KdY9n1E4Uopka%6q7GdY}`L|#R%AUBcEksp!YQ79BGiUTEtBA~3KR8S65E>ij^ zpQ!RwBPxd)LzPfBQ1?*JQ14UU(P%V1nky}uCZ=tmHPFt|p3pwZFl5YRd}VktD`cu= znq_)q-pG<GoPL)+D#wtslnatem0K^j zPwtZ33weUPp1h|#Pd;CMm;71zeg=l2&EPP&jMa>K#yQ3S6VKFV`ZAN4#mrxr-OLdM zc?BDV2!(8gYK4;uy(|n%kLAlsVU@5Bv+l4y&rqA;HiJK7-HfIgJu}7>RTNzn`HDq~ z2NZ8BepW)1Je87_HYv3zJyyml8!3k=6 z-KE;4I;y6w=B<{lR;hMYZCIV9?y8=oUZ#FZeMp0$F-t?BQKoTP<0YbixFIP>1=5L( zXsT-ZXi7A9YIbXmYw2sv(aO_0p!Hartj*Sr*DllU&>qpz&qfAVtx=*; zwb3Ba*lJ}>D)UDnH4*$c2=*8rc0bloy${KZC9S_Zr4FKL$@Ti{cdmE zE!;)!$K1y_j+|wjGaeWZZ;v96Zclm7Ii6LXPrS6e61*C{M!apkmw2D?!TI?6Z1TD5 ztLDq~ZSWoOv-ex(*Xd975A(0`e;QyEAPQ&;gaiEoHwQkNtvg#dyCnz&`37wcdK|1D zyg2yR5PV2*NOj2bP|MJzp%=m!VGG0dg?$Kj4=)LSILBa)WKKtfY(z{%L&R95M`USa z?_Be_%jRB*QjQWtwMG-7BcgXlkIwU)w`JZyjBQLo%$@oA^Rwq)TA;ijWx>gXvJ2xD z9*M=pM#k=o{Sp@xR~I+B$ahiAq7g2KyOsNj=gKSN4e_1%rToEo=lIh27YWV@n-hi- zT@uR^hXou#mEdiXPtuO0vE-oSJ;~ovB2x~e5>sPSj|=66$->Sw^|b7?8|lXB1?jzu z9T#s|JRb~u|j)A{)&N>-YfU6BCkqbbv4f-uQc!d>d4h? z`D*zq^ZVC$uW2lhDG(LhEp#f}u@<{lu(o@h^}5P+UyFD}my0cm%ZtCP=dQo}ljTnp zKYiN}zoEOtu4Ma0{6^u%JDXfK?Jbon%`NTU9Jsl;3@Ixrd%tDjmP_R}YER_au4to%}ySarMFz4}0nYR$Tuv2DC zyYRa*cRjCy6`n z$2;1b+K&Bd_UoP#nkTAHDx54iMLv~(>f7nu)1zn7&kVOGwD)%`?09%~?%7+NA)Vdl z{LfuH?{)s{1-A>QFFId5amn%0@yqPXEm!QWG*kV7xz={zkQJTVEp0AN4Q5tkLi!g zpQt{m`v|gY^kF}@|JAdMXI}>LpVOX~4{8iHys&z4V#sUg`pbDQ z2VSMW8XqorE%&kL@7ytP(lm=6dNLV1T;#oTcHcWYbI#n~{pS1T``>S7P7)jpi~#^5fYd+$ z!3e@SsDS}tf&n1aAXALbg93oM6{xWSs6|LY=pm$6?bWi5xuQd|b()IwcE}vnm4FW$ zkR4)sjz*9ZB_KY`cZ5X(>sJ6_eT@nX6tLwd^N_G)f9Aw25IkYW@Jt%iRcln<#+aUrBOZ5_jJjOVfh*a+Ad zl|WV#%)+<^a-QZBJ}ow4f^h{$R|}@{QdVaJG5~Zx%zgr|AD~Qj%z%ple?Hy0Sz;lY z%NJ)0vV^FWnVp$+k|nURu;4gaI5=9^p%zw-7B-GH_ITK2$5ssz2(w^W05XLVak#Gs zIwvL;C3j=7 zaLpoKCJ*NhjMwDm@G(Y$FfPs&@bfUfiLq`*PNo3k_ZYJ>`H9&85a_sF!sn)9Y=JRd z92xG3@l34z^pt6wG>s+vg_uqNJhMcL#DbJm32MkSLMhE4*$cjX&P{xJl7a7>%IV1ycv+a$^yvm zU4X!p0!Z9WYzCUzw;*a1z;9l(=FsH1#~7QR82@8{%dl5CTabd{X3y|Ql$#^Y#TmO3 z_&@|SAOl!H8E60+D8ZEAMDQcbCU6N02+IiT2vvmrgl0kq z;Rd0fFiQABWDwPeCPYV~KXDE*g_uVyCRPyl5|0tj6K@d*iEl|H5}RZ|vM2eGVn}JE z#iVtl9i%4G8Bz~vfHX!Xla zQVJ;*lmnDglml{!crr^(R_XwI}qS{iKyt&-MA zJ5PH+do3j;r7h(k6(%K+Dv+v_IwW;bs$c2@U7l`C_oTPg42C|# zjSg5iQZ7U;Q*NEy0l7;EE3Cr<R8&`VSL7?MRcuteuJ}$#Rmn|>uT-Mcq;yN^qcW=Ot(>mBQMpC=p$b98SS3s) zPi3ddd6f}Wma3B~SG7d-uq#x>t(SK^7WZ-X*Z_r@y zz>s0+YPi6#*6^kg$%tc=ZnVSbnlWr_Yn*CaZG6=PHnB4inCvj=nL(W4Fhe+_cE)W} zx~aQqu4#j5zZu&s$gI$;#q5Q-u6eBaM)OYdFBY~I85VUG_bufu11t+I+bmyM8C!9! zs;zEXGpv2Ams_`5zqB#2;oI!Axns+;4Yplv+iv^W&fZRJ*Jw9vuWO%Rzuo>ehs6oy ztm9mCAUb$BEO$8J@WIi}QQ~;m@ee0cr*x+SPEThV%;e9kn>paD?VRYm+qusLbxClk zap`l_a!qutb$#rno(+Wd>mvP zBo1l|hJyowHw8bKr8i4Bt0e@4_=ju?c^GOCx*+tIFj81(SasNwaLe!|;hho8i1>&D z5pN?sBFiH0&o-Q$GrK)XCMqtfKI&bxS9E!F-yHKfOXpmPQHc@6w8oNSqhj~Qj?ML+ zyJhZRoNZijT<<)Cc?;)Vny)fHWB$o_nfS!`BMHQW=!63apAth7YZJ$k{FAmPjdDG? zTe;79ZoJLBVZJlJoIjN8oLrv#G{re(Q_66vYidR6h`>`&C3u-mU%Go4v@B^^ z`*NM-Mau^Zd<*ukpsh$>@oS+)VR_-3mC-BPiqwk=iUwBsu4*WjE*2NxUhTAc*BZha z!J6*1)@!$|{Zhg!xm;>dT2cCG9e3U3A1r^U{Nd~Ry^C6R?-YLFKQlbNp0zCjcM&U9&o(9&8h9!FJ`~&JE3)=`lQ0ivQxBE zMW?==&ObeNMs#N6Y|7bz_W1Vu=jNQd*%8*!eLnE~#S1 z_s;FO+kJOBStazmMsP;Fb-;mvczl0= zJMjEp+5h@9SoDPPq+&>OsQ#(d(-Xr!!`Gh8eKz=9^n84z_;3=?n)&tXzX7SlAYA|e diff --git a/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotVerticalFill.tif b/build/Deployment/nvALT.app/Contents/Resources/BTransparentScrollerSlotVerticalFill.tif deleted file mode 100644 index e2cc1fecd2c413b53026a690b8ace0de89d86d75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3550 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/ClearPressed.tif b/build/Deployment/nvALT.app/Contents/Resources/ClearPressed.tif deleted file mode 100755 index 0119610cd52af066f55b9a611a0e38a1e9158142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmebEWzb?^V0h5Lpb%i8BBIYM>u~CWag32DN8`Z<8!eUy#4;N=oGV=Mgv(s6uR+;B zV^5g6DuZ;2;RlvYvDy<(Et%*sr7KKxj?ywAjxP^_t>$?r3re)IJhyYzS?L?ZYO1Tf zY=Y30rIW)ZS~EB$1ne@&S{%Ie`s=S=sa6|x)-fnI$*#ShB~2$j&iFjXFRwo0%-N(1meaDW zBQBj%xnSv*&b(}2T4~fylk1Y1yW(Fg;1vmDVqoB7WME(h`jC-<4@fW~v6;YZ7NBS! zBQsQ-706?QvVocz1sQxV+X*hcx fqYP9pNJaz6{2+ulP#@41DCGLnz`&p`zyPHI15Rm} diff --git a/build/Deployment/nvALT.app/Contents/Resources/DFCapLeftRounded.png b/build/Deployment/nvALT.app/Contents/Resources/DFCapLeftRounded.png deleted file mode 100755 index 2a44c5f019242177b34174ee3921768d2fda51b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTz!2%>RD}4VkFfcC5baoE#baqwWn zs9;<>X}|Yj2a)6ZJG+`)1G<{6Ts~Y6SbF8C7<={vC5t0Le=L_~=4fx_&0Hgv&VF#= zi$@PGSZS}=(Rs=KfM1hB$AZnx3RfJxYNk7DMHGB|@Xqf0-tYJB?k;bL2;)^&Ws2~R zPO~sk)z#DWUdu0V(OJnf^t6&&OC-IBk`F;12#CVypS-Qj-|cjBU( zoW03(Pj;rJ*(T+4J{vsNc+Poj_O!%_y@w*aR~RO}`Y>bS2A>#(y#8W6qrM`$s!BDKKE@|xBJbj8Rt3Gcf44q>%Z-<9m5tmhOJGx_0w{8m+_d`GCeiT zJ$%M;TZ!jFraxPs?fm#+58IJ7Vt%%D#^>*E{LbXMDJp~6Y59Rf35i8JABzUWI2_@B zxb4&3pV5|ecQ?)Qa`U}ZUXj{V!_950UY`5*pLg0mS5w9(Jrm6*e{4}@eOdle zE>mr7Z#vWC8`xBxQ428M2aGs{WRDFWMi)Ce?{ZC>Z=dM%P+NV0&$G7uv*$|Q zJR)&JQsO`No!(gC|8Y;v?JqR^kKqyH5#pJ{Fu7kPVh5*r4#<_Bu6{1-oD!MRD}4VkFfcC5baoE#baqwWn zs9;<>X}|Yj2a)6ZJG+`)1G<{6Ts~Y6SbF8C7<={vC5t0Le=L_~=4fx_&0Hgv&VF#= zi$@PGSZS}=(Rs=KfM1hB$AZnx3RfJxYNk7DMHGB|@Xqf0-tYJB?k;bL2;)^&Ws2~R zPO~sk)z#DWUdu0V(OJnf^t6&&OC-IBk`F;12#CVypS-Qj-|cjBU( zoW03(Pj;rJ*(T+4J{vsNc+Poj_O!%_y@w*aR~RO}`Y>bS2A>#(y#8W6qrM`$s!BDKKE@|xBJbj8Rt3Gcf44q>%Z-<9m5tmhOJGx_0w{8m+_d`GCeiT zJ$%M;TZ!jFraxPs?fm#+58IJ7Vt%%D#^>*E{LbXMDJp~6Y59Rf35i8JABzUWI2_@B zxb4&3pV5|ecQ?)Qa`U}ZUXj{V!_950UY`5*pLg0mS5w9(Jrm6*e{4}@eOdle zE>mr7Z#vWC8`xBxQ428M2aGs{WRDRD}4U}Db50q$YKTtZeb8+WSBKa0w}1E z>=ES4z)+>iz|hdl!0-h~w_Idk$c<-Uc#*@vVAIXOARW>CoV^05w$#(bF@)oK@|XYT zKTLVZ;cWOg_*nb@c*e-~d;hm5{`vl2|8RNRRvznZ27lO_um5-6Z)n)isBpO6Ph;}T z#!kjlDGq5yNuo=&glCJ|OGeZ?%~Y3YS--)+poYz;toG~da}i(Wzg_%b?t|7--ID*+ hnfHEU()h^Bu+~~P<=Z(IC7=TsJYD@<);T3K0RR>IQqcea diff --git a/build/Deployment/nvALT.app/Contents/Resources/DFCapRightInactive.png b/build/Deployment/nvALT.app/Contents/Resources/DFCapRightInactive.png deleted file mode 100755 index a930aa7fcca9ed526d3073a85cd9df1ce218459f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 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 - - - - -33 - the directory is full - -34 - the disk is full - -35 - the volume does not exist - -36 - there was a problem accessing the disk media - -37 - the name was bad - -38 - the file is not open - -39 - the end of the file was reached - -40 - a negative file position offset was specified - -41 - the file won't fit in memory - -42 - there are too many open files - -43 - the file wasn't found - -44 - the media is write-protected - -45 - the file is locked - -46 - the volume is locked - -47 - the file is still in use - -48 - a file with the same name already exists - -49 - the file is already open for writing - -50 - a parameter was invalid - -51 - the file reference number is invalid - -52 - the file position offset couldn't be obtained - -53 - the volume is no longer present - -54 - the file is locked - -55 - the disk is already mounted - -56 - a non-existent drive was referenced - -57 - the disk is not mac-formatted - -58 - the volume's file system type is not handled - -59 - there was a problem in the middle of renaming - -60 - the master directory block is bad - -61 - the file's permissions prevent you from writing - -64 - the drive is not installed - -120 - the directory was not found - -121 - there are too many open working directories - -122 - folders cannot be moved into folders that they contain - -123 - the volume is of the wrong type - -124 - the server volume disconnected - -127 - there was a problem with the file system driver software - -128 - the operation was cancelled - -818 - the data could not be unserialized - -819 - the Interim Note-Changes file could not be initialized - -820 - the Interim Note-Changes file couldn't be appended-to - -821 - authentication failed - -822 - the data couldn't be decompressed - -823 - you did not enter a passphrase - -824 - the data could not be formatted appropriately - -825 - notes had mis-matching values after decoding - -1300 - the specified file ID was not found on the file system - -1301 - the file ID already exists on the file system - -1302 - a file was in fact a folder - -1303 - the files are on different volumes - -1304 - the catalog changed unexpectedly - -1306 - the file's contents were attempted to be exchanged with itself - -1307 - the file doesn't match the file ID number - -1308 - the volume was improperly remounted - -1309 - the file was accessed outside of its bounds - -1310 - the file or volume is too large - -1311 - the volume is in use by the virtual memory subsystem - -1327 - the file control block table was improperly accessed - -1400 - the file system call is unknown - -1401 - the file system reference is no longer valid - -1402 - an invalid fork name was specified - -1403 - a buffer was uninitialized - -1404 - an invalid fork number was specified - -1405 - invalid file catalog information was requested - -1406 - the catalog information buffer was uninitialized - -1407 - a folder was in fact a file - -1409 - the file's requested fork doesn't exist - -1410 - the requested name is too long to be valid - -1411 - the file doesn't have a name - -1412 - an invalid positioning mode was specified for accessing the file - -1413 - the file was improperly allocated - -1417 - the were no more items to find - -1418 - no items were requested to be read from the directory - -1419 - the search parameters are invalid - -1420 - the file system references are different - -1421 - the file already has a fork - -1422 - invalid parameters were passed when iterating over the directory - -1423 - the specified directory iterator is invalid - -1424 - the directory iterator was used improperly - -1425 - you have exceeded your disk quota - -5000 - your account lacks permission to access the directory - - diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Contact Information.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Contact Information.nvhelp deleted file mode 100755 index be9c0231..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Contact Information.nvhelp +++ /dev/null @@ -1,19 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f0\b\fs24 \cf0 Homepage: -\b0 \ - http://www.notational.net/\ - -\b \ -Development: -\b0 \ - http://wiki.github.com/scrod/nv/\ -\ - -\b Contact: -\b0 \ - scrod@indy.rr.com} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/DeletionManager.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/DeletionManager.nib deleted file mode 100644 index 045e933b799bf542c1cac6e384a61d6513fe6c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8736 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 Yc6D~`iLb2qM``@~@7j0bvum&a19pJ-X#fBK diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/EncodingsManager.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/EncodingsManager.nib deleted file mode 100644 index de0d14b1c0420e44537095bf25dee34ffc2cbfc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10217 zcmd6Nd3;k<+VEM@G)t4*B+YuEH*5m3b%U0jE|je;OH0|QA-%MrX;PAuQcB^l2m+!A z$S5LWS>4gmaYb<%#ZkuqcwFcU%B(Jpj5+Jo*y`_WzK2zm}ZkB*_2(cjQ( z=uPw%dK*hLRCvBpF3Y$P6-%_{joNOX^67 zM94DIN|uwAWD~ibY$jXCtz;)TNDh&^P%62b+)M5w_mc<6L*&ooG4eP$LY^bflVjv% za*F&9`IMX{zfc?PORuK=Xn#6@4y1!7KW!E^}Cqxp0w9Y%-K5p*;yq<+fi zD!Q7kp=;^2bRAt!ucI62M!Jb!PdC#W=#6v>y@_t6+vs+BGu=V|L~o(D(w+1+x|`lf z_f78^ZVH7?2{xoh24qBO$b`(uf&^qmHe^TX$bp>5h1|%4yhub{P*;?JB;-TgP9TGs-JU{R`v}h^knQ#e-o#*8mV&5owABWHx~HX9h;zN7GRint^7bSpZ=+ znuF$|d1yYWM%N%e{0)Fs$A&p|H2_gz3XG*l4uwFD6-|wDbV*Qd2Cz#?LjGD+!Q2X_ z$+5;rxJHh`lxmQAmd4D?XvGHBj~SWiJ;2AY&PFm|U5IK?9SWiVs)tWQ(l{%E%VdyS zMbiR~CdSsWYpobD6I%&N)7IbDnv<8$pWE6_33k+o7NaPNp*U(n zOHeafidxVz)QXm)Hnak*L=5n+LaWglv=&{9)}i(2IM<9sI>cjliN=Jt9s+JXLrZb7%Ao#-|ol6xe4ah-$JEL0@NtW4-J=4zz;ST*T$OPd10 z8vnScAB;=&q21^X*u|qmJKBx%rf|1uM|;seV0d6G9tFo{=`hND`T#np@R9U5Wp*zN zA5xsSLU})d?nd{Zd%;%jL-zx)2hd^kAbJS>89fa4uo?XY{NpjOmnYDZ=qaGIKnZTu zg0;LNslc*GO_@Jd4=$s~4k(!%Rx}99EB(=0IS$H8E(ST5h2@4wI2b661b93ME|qJP zD zdK;F!0O9Yi=tcArs0}Pci2_Ot6q%QK0Fi=Fl@2Jss7?;lH~6FVs^DHhuPXMahQ8$f zcJvC$y9E4o^b!+USLRWca!M3V66RyAZj3ZeZ{!525*wz1eg_@zWXbL59h8?;;rlFo z_T+e-9OdR7OUA)0609=3w1fuMZV{U8${qpiesK>I=}-KUvQ|kYW!-OyHTn zrSbQH{|kNH3HT2H{72UN4}f2#0MGe7;Hm)5p7gZU22Eg+# z6|xTN!7w|)J%DxCfQ>i}n-phJfq-czLlUn*WS$2G3!7mdUcz)H8yo zo=bUS=-`gLF*vKO?S04?aohuPg$?&a%W*G!74D7uU?;vB_d^@-05DX}Ef3hhXC)-M zqDUwbRa8*u57gI2BTeBNWz43*7m!UD174dAR1RnP5C?N2LMdeF2xKKce1h;4hNlqJ zd{vMKL+~De(KzHPALOn&cyEHy8hG==dko$hV4V+E)G6N!VReW<`MN;0IL6l%=9-nY ze7_$upRDX|R-o2(+9?C(0Kl(-nJ{GEVaIVMu$_goaSqPKgYgiYhx2*H@yGq4NG*>Q zJi~E*`7_UH{JEmhACSRPl^2%F^4MTO%Z5}{w8X&R<_6S!rOZO40O%v|V6+C0f-N)Z zf^nJUm1PbblKjbog9*3mF}NTJvmHZ4bR}_Pfw&R{+fX(P!c78AhekT1n#l4BGZS!2 zahVe0_`;H)9ID|4zYmwPIg<{NhohR6*sEM zDy7XTT!Ur25Z9vhI0zQ2hf=97QB}cD=^lZ~XR)qvz1cq4%^c6FUaBN;_ zBvK#q6-A(`3B;$GRCQ=@Y#)S^IBxpigk-?Y`#Xh*NWB^&I?JOKFIVItv+<04gjZsQ zSK-xQ{7Ny1*YFY)uf^Bmb$C6f_&U4+Z^WBWKfDnI@Qn~`%KS@tfzY8u?vDOoSdN13 zD(d`DiWP&s!otcbrGNmBg$hTmg$f38Z&@%5o7n<3iB+(PtcFdn>TL|M2~bW3KEgNQ zt#}*W-a*dIN=3X7@4(C9_g1_U--dVL+wpF^3&^<>uoR9{EF0W}SG|zYc?g8@;z%Iz z6i_Q;Kwi`ojYXoY5?CKEXjqgjVG*kyu^5X0`o$0oTU$ZZ*;#5#;#$vbYdenj;r-w^ z2k=3B2yMl80VVe+?3emmB2CF75$Cul$uYNXj-LBiuqIx|O4&3vzQ>qmpHfF1$M<0< zZ15WV06q*-eh}pQXJCPEtB6OUP-z0V(lP~{lFL=UN=Q1!%Ggv8+7#|&j{uav;73tE zU{Lh|Hkp+(a5tq2!%rq_FMI?)eL0SO_!)c@Ka27%A68DG$!r*hiflnsT&_`JD|KqY z6@!Vo0KdTc+=+3*MWb^Hc? z69n)UWQn)&JNP($7sObCKfoV?y?lgEqJE0#N`vA04vL}7cX5MU=x++er}#nAQGa7y zMZ6^h77a)E3E`L=<+Zh9RiM6v3gE<`pyx#y)U%Z>jWU3O9RTrk#sG(vGAP_S z53+fnuVKt@HTqelfY@{f?Vn4*_!EebS<1+#Xc+zspT=hZ_rQ8Mz_YpS_;dUPt70?S z@jvldHj~Z%y>xeFfc}PO4<$g)VneD0F_s{dvvEbHymIS*I%4}A9^0**w<>Z`)%7zz z2R>gMRH|=(w51*YtQ4bI<>6O?IPG8Hi);p)-%cKz6*2h1hzwku?a!*0>Zh*&&Kv?=f$3BHVHv7hB`}eEmJT+4+0by7UdeG+3td{X2IdXT8!}Yxmy-!O zxAR-u>_np>i|dp(cM8cE)@MKDglSMI&LCqUo*SU#8_iaJgtwA$sEUkN^Bb9c=jjLNfkuVSW+knIdh7*P(aF&P)Lr#^Z4X5}b;y>d)YcdEwUK*GF&4h0)IQ~OAR zYWg3*0j^3pYO4*QIi!&+CQ-bL#No4qCtK3OH#S9;jvs4bOF_oVSVXC17zrE{xmB1y@qhfmT*Rsi7S;C|AUEbE{Nz%_^NC+t#l zjMD`oSq)UJh0i)pAJDcDWCHD!02~W|wB;<)WAxXB$F2clI#USbUPdF>>42&( zbml`RD=WXPO*x)q!^99}I42JbI4eJ|Eg|F^$c?JcfiRH3sQlDsobSC1j$OqBm2DTNJteh86 zWYy6tfk;FCMqXh%9uVw!F2tE_XcPGLo6v~(7@Y(~@YFD$R6&Ie;RNbb5zZ2$LE#SY z`|ZrhdO@>fCB&s#Xd$&i5o&-~5n)+8Qb1>%e8M#BW{AZFjc_v+P};?cAklg9Svzk> zC?N$%_(CON1{l^@v>80W2Mw{!@XOCIAVomE3+7xvgcArb0#YX+B7oKjzee~48N)~f zo@(JUC<*yj4mlmq1=fHufbcP#UYsg33X97*%Yb7usY3ICy;T5bJHY4#cm@F^U`Jtc zyuvgAY^}_kfKJmD=+r@-)J5H-H}z7HcA;Hq29>CfcB9>C589LVqF2%0v=7_KZezRH z?T~GDvpd)xb|-6Rd)Yp=pB-Qa*&%ipyPMs^?uFV$J?8lMQPS7vvh!142(OpTs`lS^ z9&|%|(;I#2+?-A#hm^;gH9p?0@%7<(s}&En;;~koW5pw_c(fIdvf^AT9&W{XRy@&)3#_=r zipN;-I4hoH#Ure^%!-Fuak&*wP{fN0>Fumfhp6{-67^o?8QNlWKRp25+zEy1-6QXG zwA1~G^C>hR;K-NwM}ar#UG(mG6ABYIjy157Vfc3e58N#GgDcBnXf#~PpCLJoE*}V2;S*^oEvHlHG+Ifk=uA4B&ZYC=ay$USuLZ%^ zgU}-&;+)HQ#Bz*ZfEGU(Gqq zdCi3sl+rb&Z%S^;kd*wC;VC0iMyC{{6s62fxhLgl%3CQPr+k(2v(}>Rrp?tBYRj~X zw2QT^+RfT_?P2Y6+BdatYmaL`)_$t}Tzf`)R{NFqYwfq%@3h}*|D*j$`?L0(_Pq8& zswLH#+BNm6)IO<_qtJGbiTcE4aE!2f{ExPM;8+F&~ zZqV(}9nw9hdqMZI?p@vcx({_9>AulZeVX2-@1pOe@2$_)57&>>7wb#((}Zx=r`#%>$m9->fg}6rGHQVf&PU4r2drt6aDAGu!MvYCzW@C%7)wtdGi1DcLRpUR5r;TTgUm3qPerx=<@dx9NX*Z=E zNP9T#XxeLO$J5?R`ylN^+R3z2X`iQkZ$c)W$zXDux|#Z#2AYaYV@=~s6HJp#^G)@p z22-P{#k9$^-E^nvkm*6w5z{f#ho&!0|1y1J`p)#dIo<3qyUZT5XwESE%-zjB%_GfG zbKKlwUTt1)-eBHj-fX_ne3N;b`DXK<%=^s;&4y8!tha2mTyMF-vcgz3s#8#rCQ8Dto{#+ZWkG_OLx>Z?ZSr*Vwn% zci3;S-(f#wf5!fT{e=CD{X6@)^ptcVT}4oXV>22v7({D-NpZ-Al zvGn8VUptV);BY&7I`SRE93vc~9Ag}Xj$%iNW4vRcqtr3gQQ?^GnBj;zmO55B);Kmf zwmWt>ZgV{0_^adZjyD`9948&89G^Hob)0rOosx5abEtEybDVRcv(#DcoZ_73obH_A zoaLP3oad}|);SkB7dvClCTBBLj;o#5I@ddQJMVEm=6ufig7Zb^-<|I{|KU9C{Mz|n z7jYR~nXcikk*?9M0#}i1tgGBL#Wl?}#}#ui*9O;i*B!1`UGKWycYWyk$aUKFh3i|_ zzg<7Leso=Qd)+zi5$*}@Y3`Ui?q1?v>R#qGr}{+Q{!p&EcdMOZ1?Q&+~V2k+2y(4^Qh-_ z&%2(}o*z9wdCqyxdoFl&UXNGwcJ)f$Zr(xOeD5%Cz$<%ey+Loix4|3nF80Q}P2Og2 zi?`L==3VJsMr$^u9EslS4;h+fl{WF zE#*o>q|s7=v|L&tF=@55R$3=rCvB9jmu`@@NL!`t(hlhsX{WSH+AZyo+NFKc0qKx* zw{)*`zjRo7NP1X$RC+=>A{~{UmtK@!m)??&OYci3q>rUfq|c-;q_fh$q;I9~r5~lA zrSsB7AMvI5bUvdm-RJbVd_G@yUk_h@-$36WU%qdguhci+7w|1sdk%!C-}D~!JNefa F`+qXt)9wHO diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Excruciatingly Useful Shortcuts.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Excruciatingly Useful Shortcuts.nvhelp deleted file mode 100755 index acf63037..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Excruciatingly Useful Shortcuts.nvhelp +++ /dev/null @@ -1,97 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 -\readonlydoc1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww6880\viewh9280\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 \CocoaLigature0 In the order of most to least useful:\ -\ - -\f1 \uc0\u8984 -\f0 L Place insertion point in search/title area\ -Escape Clear current search\ -Return Begin editing note, creating it if necessary\ -Tab Move insertion point between text areas\ - -\f1 \uc0\u8984 -\f0 K Select previous note in list\ - -\f1 \uc0\u8984 -\f0 J Select next note in list\ - -\f1 \uc0\u8984 -\f0 D De-select current note, restoring the search text\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8679 -\f0 V Paste clipboard as a new note\ - -\f1 \uc0\u8984 -\f0 R Rename the selected note\ -\pard\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f1 \cf0 \uc0\u8984 -\f0 -\f1 \uc0\u9003 -\f0 Delete the selected note(s)\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f1 \cf0 \uc0\u8984 -\f0 G Find next occurrence of search text\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8679 -\f0 G Find previous occurrence of search text\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8617 -\f0 Open any URL under the insertion point\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8592 -\f0 Move to title-editing when at start of the note-body\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8594 -\f0 Move to the note-body when at the end of a title\ - -\f1 \uc0\u8984 -\f0 -\f1 \uc0\u8679 -\f0 D Bookmark the selected note\ - -\f1 \uc0\u8984 -\f0 P Print the selected note(s)\ - -\f1 \uc0\u8984 -\f0 E Export the selected note(s) to other formats\ -\ -Text formatting shortcuts:\ -\ - -\f1 \uc0\u8984 -\f0 [ (left square bracket) Outdent one or more lines\ - -\f1 \uc0\u8984 -\f0 ] (right square bracket) Indent one or more lines\ - -\f1 \uc0\u8997 -\f0 Tab Indent\ - -\f1 \uc0\u8984 -\f0 T Make text plain; remove styles\ - -\f1 \uc0\u8984 -\f0 B Embolden\ - -\f1 \uc0\u8984 -\f0 I Italicize\ - -\f1 \uc0\u8984 -\f0 U Underline\ -} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/ExporterManager.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/ExporterManager.nib deleted file mode 100644 index e8dcbdd777a6ff8dc11fbddb234108cee590bf02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5046 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/How does this thing work?.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/How does this thing work?.nvhelp deleted file mode 100755 index f12ce204..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/How does this thing work?.nvhelp +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf410 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fnil\fcharset77 LucidaGrande;\f2\fswiss\fcharset77 Helvetica-Oblique; -} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 Always begin typing in the upper search area. Press return to add a new note with that title. While you type, NV searches for notes whose body or title contain your words. Observe that naming a note and searching always occur simultaneously.\ -\ -When you select one of the found notes (e.g., using the up/down keys) NV displays its body in the lower text area (what you're reading now).\ -\ -If you had typed the beginning of a note's title, NV would have selected that note automatically.\ -\ -To create another note, just start typing in the search area again (press -\f1 \uc0\u8984 -\f0 -L to get there from the Keyboard). Don't worry, you won't rename your note--for that you'll either need to double-click its title in the list of notes or press -\f1 \uc0\u8984 -\f0 -R.\ -\ -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f2\i \cf0 But NV won't let me save my changes! -\f0\i0 \ -NV constantly writes your changes to disk as you create and edit notes, so there's no need to "Save" anything manually.\ -} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/ImporterAccessory.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/ImporterAccessory.nib deleted file mode 100644 index 4eac914fb1cd9b7c759e8955679735c81176dc40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3084 zcmZ`*dvp}l8UNjxofqM;8-frJSYUaFM)(xTgG!%8iQI9BtDNWxC8HE3&j#HwGXC!KUI z*p7Xtpg^swDjV-_HYA(`XYpXKXl%Z|QEw>iQaT(gLk_y55R)+lGjTggQGq+K81=B| zO*3}k0sH`a@C1H@A7dXn==v-U;wLzam+^D_0>8#@ahzn|#_#bnyo=L#4aVofx**s`3ONYYHC z({<5UwT}%YpY~8FclY&lO~TCRw38o=l_ryVI&IV&rr~U?HX6F#k#4z_N)fOGd3t3u z7ELtiY1a;|D{Xpcwe0n-lyA{}Q%nBHfV-p@p2D{|>auOwu4JW^auz01iALRy2ZPaA zjY094`Z6QcV72;jcjb{a*Z2R#?Ydn-ZuK^YqFCj};wx~0m-5kkGM~*=KAuZ_5}(2+ z@DdI#^KpDuh?#uqX(~YxZo?!>&`ZiqfCso34~9xjLr+C5N3UvXwroeYPh%>kVLE0k z_o3F)wf-VSO6{0|;=9O7Chb^Fe(1}ywV({E%F3;zmAHYT>$wE8Fq;7EB5s;1`+Of| zDDOZy=Af8TT9|PXgiK6#mPTWA^))Lomk(*jJXCRw4?aWI=3@aCB8qAv%_2g0j-Gam zRKl$#1roC|c2Zv!jV(yj>n0z>yAePGμeORy9*Scc_Tfm*D@D%9aF#IYK+9)VnV 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 Y*rWd6IQ#zn|F?$6|8M<&&mQgn0myp;QUCw| diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/NotationPrefsView.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/NotationPrefsView.nib deleted file mode 100644 index 8eba0ca0ddbaed8c8e61f7f219ce82c7714cf748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40242 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 TI{iZsj-P~8|M&j?%{KiPn|zOw diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/PTKeyComboPanel.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/PTKeyComboPanel.nib deleted file mode 100644 index ccb5c784baeeb5cc8fe549c755a3e0461cf4ca95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6959 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/PassphraseChanger.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/PassphraseChanger.nib deleted file mode 100644 index 251c56e2bf6f8db7f02fc096f06ba8f129896247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11812 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 bp6h6IPG-*X?9cak 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Preferences.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/Preferences.nib deleted file mode 100644 index 1b1d9754e8b1ba6f342a69017732b57768cbcb09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30556 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/This is the title of a note.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/This is the title of a note.nvhelp deleted file mode 100755 index 9a6d368e..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/This is the title of a note.nvhelp +++ /dev/null @@ -1,20 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 \CocoaLigature0 Welcome to Notational Velocity!\ -\ -This is the body of a note. Your notes can be as long or as short as you want, and you can -\b embolden -\b0 , -\i italicize -\i0 , or \ul underline\ulnone them. \ -\ -You can create as many notes as you want--NV can hold thousands of them and works best when information is distributed.\ -\ -If you enable encryption (Preferences > Notes > Security) you can even store passwords and other sensitive information without giving a second thought to computer forensics laboratories.\ -\ - -\i These notes were included to get you started with Notational Velocity. You may delete them at any time.} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/English.lproj/URLGetter.nib b/build/Deployment/nvALT.app/Contents/Resources/English.lproj/URLGetter.nib deleted file mode 100644 index b5daaa83482a16b0af91b9dd19fdd4d91c29a6df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5583 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/CarbonErrorStrings.plist b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/CarbonErrorStrings.plist deleted file mode 100755 index 0e7791bc..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/CarbonErrorStrings.plist +++ /dev/null @@ -1,166 +0,0 @@ - - - - - -33 - le dossier est plein - -34 - le disque est plein - -35 - le volume n'existe pas - -36 - il y a eu un problème pour accéder au disque - -37 - le nom était incorrect - -38 - le fichier n'est pas ouvert - -39 - fin du fichier atteinte - -40 - a negative file position offset was specified - -41 - le fichier ne tiendra pas en mémoire - -42 - il y a trop de fichiers ouverts - -43 - le fichier n'a pas été trouvé - -44 - le support est protégé en écriture - -45 - le fichier est verouillé - -46 - le volume est verouillé - -47 - le fichier est toujours en cours d'utilisation - -48 - un fichier du même nom existe déjà - -49 - le fichier est déjà ouvert en écriture - -50 - un paramètre était incorrect - -51 - le numéro de référence du fichier n'est pas correct - -52 - the file position offset couldn't be obtained - -53 - le volume n'est plus disponible - -54 - le fichier est verouillé - -55 - le disque est déjà monté - -56 - un lecteur non-disponible était référencé - -57 - le disque n'est pas formaté pour Mac - -58 - le type de système de fichiers du volume n'est pas supporté - -59 - il y a eu un problème durant le renommage - -60 - le master directory block (MDB) est corrompu - -61 - les autorisations du fichier ne vous permettent pas de le modifier - -64 - le lecteur n'est pas installé - -120 - le dossier n'a pas été trouvé - -121 - il y a trop de dossiers de travail ouverts - -122 - des dossiers ne peuvent être déplacés dans des dossiers qu'ils contiennent - -123 - Le volume n'est pas du type correct - -124 - Le serveur de fichier a été déconnecté - -127 - there was a problem with the file system driver software - -128 - l'opération a été annulée - -818 - les données n'ont pu être désérialisées - -819 - le fichier Interim Note-Changes n'a pu être initialisé - -820 - le fichier Interim Note-Changes n'a pu être ajouté à - -821 - échec de l'authentification - -822 - les données n'ont pu être décompressées - -823 - vous n'avez pas entré de mot de passe - -824 - les données n'ont pu être formatées de façon adéquate - -825 - après décodage, les notes ont des valeurs discordantes - -1300 - l'ID de fichier spécifiée n'a pu être trouvée sur le système de fichiers - -1301 - l'ID du fichier existe déjà dans le système de fichiers - -1302 - un fichier était en fait un dossier - -1303 - les fichiers sont sur différents volumes - -1304 - le catalogue a changé de façon inattendue - -1306 - Tentative d'échanger le contenu du fichier avec lui-même - -1307 - the file doesn't match the file ID number - -1308 - le volume a été remonté de façon incorrecte - -1309 - the file was accessed outside of its bounds - -1310 - le fichier ou le volume est trop large - -1311 - the volume is in use by the virtual memory subsystem - -1327 - the file control block table was improperly accessed - -1400 - the file system call is unknown - -1401 - la référence au fichier n'est plus valide (FSRef parameter is bad) - -1402 - un nom de branche invalide a été spécifié - -1403 - Un fragment de la mémoire n'a pas été inialisé (a buffer parameter was bad) - -1404 - un numéro de branche invalide a été spécifié - -1405 - invalid file catalog information was requested - -1406 - the catalog information buffer was uninitialized - -1407 - un dossier était en fait un fichier - -1409 - la branche demandée de ce fichier n'existe pas - -1410 - le nom demandé est trop long pour être valide - -1411 - le fichier n'a pas de nom - -1412 - an invalid positioning mode was specified for accessing the file - -1413 - the file was improperly allocated - -1417 - il n'y a plus d'éléments à trouver - -1418 - no items were requested to be read from the directory - -1419 - les paramètres de recherche sont incorrects - -1420 - les références au fichier sont différentes (file system references are different) - -1421 - le fichier est déjà une branche - -1422 - des paramètres incorrects ont été passés pour scanner le dossier - -1423 - the specified directory iterator is invalid - -1424 - le scan du dossier a été utilisé de façon inappropriée - -1425 - vous avez dépassé votre quota - -5000 - votre compte ne dispose pas des permissions pour accéder à ce dossier - - diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Ceci est le titre d'une note.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Ceci est le titre d'une note.nvhelp deleted file mode 100755 index e0a23c1f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Ceci est le titre d'une note.nvhelp +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 \CocoaLigature0 Bienvenue dans Notational Velocity !\ -\ -Ceci est le corps d'une note. \ -\ -Vos notes peuvent avoir la longueur que vous d\'e9sirez. Vous pouvez les mettre en -\b gras -\b0 , en -\i italiques -\i0 ou les \ul souligner\ulnone . \ -\ -Vous pouvez cr\'e9er autant de notes que vous le d\'e9sirez. \CocoaLigature1 Notational Velocity\CocoaLigature0 peu en stocker des milliers, et il fonctionnera de mani\'e8re optimale si les informations sont r\'e9parties dans de nombreuses notes.\ -\ -Si vous activez le chiffrement (Pr\'e9f\'e9rences > Notes > S\'e9curit\'e9), vous pouvez stocker vos mots de passe et autres donn\'e9es sensibles sans vous inqui\'e9ter que qui que ce soit puisse y acc\'e9der. -\b Attention, ne perdez pas votre mot de passe : vous ne pourriez plus afficher vos notes ! -\b0 \ -\ - -\i Ces notes ont \'e9t\'e9 incluses dans Notational Velocity pour vous aider \'e0 d\'e9marrer. Vous pouvez les supprimer \'e0 tout moment.} \ No newline at end of file diff --git "a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Comment c\314\247a marche.nvhelp" "b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Comment c\314\247a marche.nvhelp" deleted file mode 100755 index ab516b39..00000000 --- "a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Comment c\314\247a marche.nvhelp" +++ /dev/null @@ -1,47 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww7880\viewh10300\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 Commencez toujours par \'e9crire dans le champ -\b Chercher ou cr\'e9er -\b0 , tout en haut de la fen\'eatre. Appuyez ensuite sur la touche -\b Entr\'e9e -\b0 pour cr\'e9er une nouvelle note avec ce titre, ou pour acc\'e9der \'e0 la note correspondante si elle existe d\'e9j\'e0. \ -\ -Notational Velocity recherche automatiquement ce que vous tapez dans le champ -\b Chercher ou cr\'e9er -\b0 \'e0 la fois dans le titre et le contenu des notes existantes. Il affiche la liste des notes correspondantes dans la zone juste en dessous du champ -\b Chercher ou cr\'e9er -\b0 . Le contenu de la premi\'e8re note est affich\'e9 dans le bas de la fen\'eatre.\ -\ -Souvenez-vous que cr\'e9er ou rechercher une note se fait donc simultan\'e9ment, en passant part le champ -\b Chercher ou cr\'e9er -\b0 .\ -\ -Lorsque vous s\'e9lectionnez une note dans la liste (par exemple en utilisant les fl\'e8ches haut/bas ou en clignant dessus), Notational Velocity affiche automatiquement son contenu dans la zone de texte du bas : c'est ce que vous \'eates occup\'e9 \'e0 lire, en cet instant pr\'e9cis ;-)\ -\ -Pour cr\'e9er une nouvelle note, tapez simplement son titre dans le champ -\b Chercher ou cr\'e9er -\b0 (appuyez sur -\f1\b \uc0\u8984 -\f0 -L -\b0 pour y replacer le focus). -\i Il n'y a aucun risque de supprimer une note existante -\i0 : une nouvelle note est simplement cr\'e9\'e9e. \ -\ -Pour renommer une note existante, il est n\'e9cessaire soit de double-cliquer sur son titre dans la liste, soit d'appuyer sur -\f1\b \uc0\u8984 -\f0 -R -\b0 apr\'e8s l'avoir s\'e9lectionn\'e9e.\ -\ - -\i NV ne me laisse pas enregistrer mes modifications !? -\i0 \ -NV enregistre en permanence les changements pendant que vous cr\'e9ez et modifiez vos notes, il est inutile de les sauvegarder manuellement.\ -\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural -\cf0 \CocoaLigature0 \ - -\i Ces notes ont \'e9t\'e9 incluses dans Notational Velocity pour vous aider \'e0 d\'e9marrer. Vous pouvez les supprimer \'e0 tout moment.} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Contact.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Contact.nvhelp deleted file mode 100755 index 6b3abd8f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Contact.nvhelp +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh8400\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural - -\f0\b\fs24 \cf0 Site officiel: -\b0 \ - http://www.notational.net/fr/\ -\ - -\b D\'e9velopment: -\b0 \ - http://github.com/scrod/nv/tree/\ -\ - -\b Contact: -\b0 \ - scrod@indy.rr.com\ -\ - -\b Traduction: -\b0 \ - David Bosman \ -} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/DeletionManager.nib b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/DeletionManager.nib deleted file mode 100644 index 68d5bb8d9343ade06b8a6c81e3660a4172e2e177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8831 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/EncodingsManager.nib b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/EncodingsManager.nib deleted file mode 100644 index 2c46592ec273484bb8a443de82862dccc3479f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10294 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 OKz08uz%&1KO7~yRgg-+7 diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/KeyDerivationManager.nib b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/KeyDerivationManager.nib deleted file mode 100644 index 919ac616773101b583e38c0cd5848c6af72006b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5739 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\n\n"; - }egmx; - - $text =~ s{ ^(.+)[ \t]*\n-+[ \t]*\n+ }{ - "

" . _RunSpanGamut($1) . "

\n\n"; - }egmx; - - - # atx-style headers: - # # Header 1 - # ## Header 2 - # ## Header 2 with closing hashes ## - # ... - # ###### Header 6 - # - $text =~ s{ - ^(\#{1,6}) # $1 = string of #'s - [ \t]* - (.+?) # $2 = Header text - [ \t]* - \#* # optional closing #'s (not counted) - \n+ - }{ - my $h_level = length($1); - "" . _RunSpanGamut($2) . "\n\n"; - }egmx; - - return $text; -} - - -sub _DoLists { -# -# Form HTML ordered (numbered) and unordered (bulleted) lists. -# - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Re-usable patterns to match list item bullets and number markers: - my $marker_ul = qr/[*+-]/; - my $marker_ol = qr/\d+[.]/; - my $marker_any = qr/(?:$marker_ul|$marker_ol)/; - - # Re-usable pattern to match any entirel ul or ol list: - my $whole_list = qr{ - ( # $1 = whole list - ( # $2 - [ ]{0,$less_than_tab} - (${marker_any}) # $3 = first list item marker - [ \t]+ - ) - (?s:.+?) - ( # $4 - \z - | - \n{2,} - (?=\S) - (?! # Negative lookahead for another list item marker - [ \t]* - ${marker_any}[ \t]+ - ) - ) - ) - }mx; - - # We use a different prefix before nested lists than top-level lists. - # See extended comment in _ProcessListItems(). - # - # Note: There's a bit of duplication here. My original implementation - # created a scalar regex pattern as the conditional result of the test on - # $g_list_level, and then only ran the $text =~ s{...}{...}egmx - # substitution once, using the scalar as the pattern. This worked, - # everywhere except when running under MT on my hosting account at Pair - # Networks. There, this caused all rebuilds to be killed by the reaper (or - # perhaps they crashed, but that seems incredibly unlikely given that the - # same script on the same server ran fine *except* under MT. I've spent - # more time trying to figure out why this is happening than I'd like to - # admit. My only guess, backed up by the fact that this workaround works, - # is that Perl optimizes the substition when it can figure out that the - # pattern will never change, and when this optimization isn't on, we run - # afoul of the reaper. Thus, the slightly redundant code to that uses two - # static s/// patterns rather than one conditional pattern. - - if ($g_list_level) { - $text =~ s{ - ^ - $whole_list - }{ - my $list = $1; - my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol"; - # Turn double returns into triple returns, so that we can make a - # paragraph for the last item in a list, if necessary: - $list =~ s/\n{2,}/\n\n\n/g; - my $result = _ProcessListItems($list, $marker_any); - $result = "<$list_type>\n" . $result . "\n"; - $result; - }egmx; - } - else { - $text =~ s{ - (?:(?<=\n\n)|\A\n?) - $whole_list - }{ - my $list = $1; - my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol"; - # Turn double returns into triple returns, so that we can make a - # paragraph for the last item in a list, if necessary: - $list =~ s/\n{2,}/\n\n\n/g; - my $result = _ProcessListItems($list, $marker_any); - $result = "<$list_type>\n" . $result . "\n"; - $result; - }egmx; - } - - - return $text; -} - - -sub _ProcessListItems { -# -# Process the contents of a single ordered or unordered list, splitting it -# into individual list items. -# - - my $list_str = shift; - my $marker_any = shift; - - - # The $g_list_level global keeps track of when we're inside a list. - # Each time we enter a list, we increment it; when we leave a list, - # we decrement. If it's zero, we're not in a list anymore. - # - # We do this because when we're not inside a list, we want to treat - # something like this: - # - # I recommend upgrading to version - # 8. Oops, now this line is treated - # as a sub-list. - # - # As a single paragraph, despite the fact that the second line starts - # with a digit-period-space sequence. - # - # Whereas when we're inside a list (or sub-list), that line will be - # treated as the start of a sub-list. What a kludge, huh? This is - # an aspect of Markdown's syntax that's hard to parse perfectly - # without resorting to mind-reading. Perhaps the solution is to - # change the syntax rules such that sub-lists must start with a - # starting cardinal number; e.g. "1." or "a.". - - $g_list_level++; - - # trim trailing blank lines: - $list_str =~ s/\n{2,}\z/\n/; - - - $list_str =~ s{ - (\n)? # leading line = $1 - (^[ \t]*) # leading whitespace = $2 - ($marker_any) [ \t]+ # list marker = $3 - ((?s:.+?) # list item text = $4 - (\n{1,2})) - (?= \n* (\z | \2 ($marker_any) [ \t]+)) - }{ - my $item = $4; - my $leading_line = $1; - my $leading_space = $2; - - if ($leading_line or ($item =~ m/\n{2,}/)) { - $item = _RunBlockGamut(_Outdent($item)); - } - else { - # Recursion for sub-lists: - $item = _DoLists(_Outdent($item)); - chomp $item; - $item = _RunSpanGamut($item); - } - - "
  • " . $item . "
  • \n"; - }egmx; - - $g_list_level--; - return $list_str; -} - - - -sub _DoCodeBlocks { -# -# Process Markdown `
    ` blocks.
    -#	
    -
    -	my $text = shift;
    -
    -	$text =~ s{
    -			(?:\n\n|\A)
    -			(	            # $1 = the code block -- one or more lines, starting with a space/tab
    -			  (?:
    -			    (?:[ ]{$g_tab_width} | \t)  # Lines must start with a tab or a tab-width of spaces
    -			    .*\n+
    -			  )+
    -			)
    -			((?=^[ ]{0,$g_tab_width}\S)|\Z)	# Lookahead for non-space at line-start, or end of doc
    -		}{
    -			my $codeblock = $1;
    -			my $result; # return value
    -
    -			$codeblock = _EncodeCode(_Outdent($codeblock));
    -			$codeblock = _Detab($codeblock);
    -			$codeblock =~ s/\A\n+//; # trim leading newlines
    -			$codeblock =~ s/\s+\z//; # trim trailing whitespace
    -
    -			$result = "\n\n
    " . $codeblock . "\n
    \n\n"; - - $result; - }egmx; - - return $text; -} - - -sub _DoCodeSpans { -# -# * Backtick quotes are used for spans. -# -# * You can use multiple backticks as the delimiters if you want to -# include literal backticks in the code span. So, this input: -# -# Just type ``foo `bar` baz`` at the prompt. -# -# Will translate to: -# -#

    Just type foo `bar` baz at the prompt.

    -# -# There's no arbitrary limit to the number of backticks you -# can use as delimters. If you need three consecutive backticks -# in your code, use four for delimiters, etc. -# -# * You can use spaces to get literal backticks at the edges: -# -# ... type `` `bar` `` ... -# -# Turns to: -# -# ... type `bar` ... -# - - my $text = shift; - - $text =~ s@ - (`+) # $1 = Opening run of ` - (.+?) # $2 = The code block - (?$c
    "; - @egsx; - - return $text; -} - - -sub _EncodeCode { -# -# Encode/escape certain characters inside Markdown code runs. -# The point is that in code, these characters are literals, -# and lose their special Markdown meanings. -# - local $_ = shift; - - # Encode all ampersands; HTML entities are not - # entities within a Markdown code span. - s/&/&/g; - - # Encode $'s, but only if we're running under Blosxom. - # (Blosxom interpolates Perl variables in article bodies.) - { - no warnings 'once'; - if (defined($blosxom::version)) { - s/\$/$/g; - } - } - - - # Do the angle bracket song and dance: - s! < !<!gx; - s! > !>!gx; - - # Now, escape characters that are magic in Markdown: - s! \* !$g_escape_table{'*'}!gx; - s! _ !$g_escape_table{'_'}!gx; - s! { !$g_escape_table{'{'}!gx; - s! } !$g_escape_table{'}'}!gx; - s! \[ !$g_escape_table{'['}!gx; - s! \] !$g_escape_table{']'}!gx; - s! \\ !$g_escape_table{'\\'}!gx; - - return $_; -} - - -sub _DoItalicsAndBold { - my $text = shift; - - # must go first: - $text =~ s{ (\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1 } - {$2}gsx; - - $text =~ s{ (\*|_) (?=\S) (.+?) (?<=\S) \1 } - {$2}gsx; - - return $text; -} - - -sub _DoBlockQuotes { - my $text = shift; - - $text =~ s{ - ( # Wrap whole match in $1 - ( - ^[ \t]*>[ \t]? # '>' at the start of a line - .+\n # rest of the first line - (.+\n)* # subsequent consecutive lines - \n* # blanks - )+ - ) - }{ - my $bq = $1; - $bq =~ s/^[ \t]*>[ \t]?//gm; # trim one level of quoting - $bq =~ s/^[ \t]+$//mg; # trim whitespace-only lines - $bq = _RunBlockGamut($bq); # recurse - - $bq =~ s/^/ /g; - # These leading spaces screw with
     content, so we need to fix that:
    -			$bq =~ s{
    -					(\s*
    .+?
    ) - }{ - my $pre = $1; - $pre =~ s/^ //mg; - $pre; - }egsx; - - "
    \n$bq\n
    \n\n"; - }egmx; - - - return $text; -} - - -sub _FormParagraphs { -# -# Params: -# $text - string to process with html

    tags -# - my $text = shift; - - # Strip leading and trailing lines: - $text =~ s/\A\n+//; - $text =~ s/\n+\z//; - - my @grafs = split(/\n{2,}/, $text); - - # - # Wrap

    tags. - # - foreach (@grafs) { - unless (defined( $g_html_blocks{$_} )) { - $_ = _RunSpanGamut($_); - s/^([ \t]*)/

    /; - $_ .= "

    "; - } - } - - # - # Unhashify HTML blocks - # - foreach (@grafs) { - if (defined( $g_html_blocks{$_} )) { - $_ = $g_html_blocks{$_}; - } - } - - return join "\n\n", @grafs; -} - - -sub _EncodeAmpsAndAngles { -# Smart processing for ampersands and angle brackets that need to be encoded. - - my $text = shift; - - # Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: - # http://bumppo.net/projects/amputator/ - $text =~ s/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/&/g; - - # Encode naked <'s - $text =~ s{<(?![a-z/?\$!])}{<}gi; - - return $text; -} - - -sub _EncodeBackslashEscapes { -# -# Parameter: String. -# Returns: The string, with after processing the following backslash -# escape sequences. -# - local $_ = shift; - - s! \\\\ !$g_escape_table{'\\'}!gx; # Must process escaped backslashes first. - s! \\` !$g_escape_table{'`'}!gx; - s! \\\* !$g_escape_table{'*'}!gx; - s! \\_ !$g_escape_table{'_'}!gx; - s! \\\{ !$g_escape_table{'{'}!gx; - s! \\\} !$g_escape_table{'}'}!gx; - s! \\\[ !$g_escape_table{'['}!gx; - s! \\\] !$g_escape_table{']'}!gx; - s! \\\( !$g_escape_table{'('}!gx; - s! \\\) !$g_escape_table{')'}!gx; - s! \\> !$g_escape_table{'>'}!gx; - s! \\\# !$g_escape_table{'#'}!gx; - s! \\\+ !$g_escape_table{'+'}!gx; - s! \\\- !$g_escape_table{'-'}!gx; - s! \\\. !$g_escape_table{'.'}!gx; - s{ \\! }{$g_escape_table{'!'}}gx; - - return $_; -} - - -sub _DoAutoLinks { - my $text = shift; - - $text =~ s{<((https?|ftp):[^'">\s]+)>}{
    $1}gi; - - # Email addresses: - $text =~ s{ - < - (?:mailto:)? - ( - [-.\w]+ - \@ - [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ - ) - > - }{ - _EncodeEmailAddress( _UnescapeSpecialChars($1) ); - }egix; - - return $text; -} - - -sub _EncodeEmailAddress { -# -# Input: an email address, e.g. "foo@example.com" -# -# Output: the email address as a mailto link, with each character -# of the address encoded as either a decimal or hex entity, in -# the hopes of foiling most address harvesting spam bots. E.g.: -# -# foo -# @example.com -# -# Based on a filter by Matthew Wickline, posted to the BBEdit-Talk -# mailing list: -# - - my $addr = shift; - - srand; - my @encode = ( - sub { '&#' . ord(shift) . ';' }, - sub { '&#x' . sprintf( "%X", ord(shift) ) . ';' }, - sub { shift }, - ); - - $addr = "mailto:" . $addr; - - $addr =~ s{(.)}{ - my $char = $1; - if ( $char eq '@' ) { - # this *must* be encoded. I insist. - $char = $encode[int rand 1]->($char); - } elsif ( $char ne ':' ) { - # leave ':' alone (to spot mailto: later) - my $r = rand; - # roughly 10% raw, 45% hex, 45% dec - $char = ( - $r > .9 ? $encode[2]->($char) : - $r < .45 ? $encode[1]->($char) : - $encode[0]->($char) - ); - } - $char; - }gex; - - $addr = qq{$addr}; - $addr =~ s{">.+?:}{">}; # strip the mailto: from the visible part - - return $addr; -} - - -sub _UnescapeSpecialChars { -# -# Swap back in all the special characters we've hidden. -# - my $text = shift; - - while( my($char, $hash) = each(%g_escape_table) ) { - $text =~ s/$hash/$char/g; - } - return $text; -} - - -sub _TokenizeHTML { -# -# Parameter: String containing HTML markup. -# Returns: Reference to an array of the tokens comprising the input -# string. Each token is either a tag (possibly with nested, -# tags contained therein, such as , or a -# run of text between tags. Each element of the array is a -# two-element array; the first is either 'tag' or 'text'; -# the second is the actual value. -# -# -# Derived from the _tokenize() subroutine from Brad Choate's MTRegex plugin. -# -# - - my $str = shift; - my $pos = 0; - my $len = length $str; - my @tokens; - - my $depth = 6; - my $nested_tags = join('|', ('(?:<[a-z/!$](?:[^<>]') x $depth) . (')*>)' x $depth); - my $match = qr/(?s: ) | # comment - (?s: <\? .*? \?> ) | # processing instruction - $nested_tags/ix; # nested tags - - while ($str =~ m/($match)/g) { - my $whole_tag = $1; - my $sec_start = pos $str; - my $tag_start = $sec_start - length $whole_tag; - if ($pos < $tag_start) { - push @tokens, ['text', substr($str, $pos, $tag_start - $pos)]; - } - push @tokens, ['tag', $whole_tag]; - $pos = pos $str; - } - push @tokens, ['text', substr($str, $pos, $len - $pos)] if $pos < $len; - \@tokens; -} - - -sub _Outdent { -# -# Remove one level of line-leading tabs or spaces -# - my $text = shift; - - $text =~ s/^(\t|[ ]{1,$g_tab_width})//gm; - return $text; -} - - -sub _Detab { -# -# Cribbed from a post by Bart Lateur: -# -# - my $text = shift; - - $text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge; - return $text; -} - - -1; - -__END__ - - -=pod - -=head1 NAME - -B - - -=head1 SYNOPSIS - -B [ B<--html4tags> ] [ B<--version> ] [ B<-shortversion> ] - [ I ... ] - - -=head1 DESCRIPTION - -Markdown is a text-to-HTML filter; it translates an easy-to-read / -easy-to-write structured text format into HTML. Markdown's text format -is most similar to that of plain text email, and supports features such -as headers, *emphasis*, code blocks, blockquotes, and links. - -Markdown's syntax is designed not as a generic markup language, but -specifically to serve as a front-end to (X)HTML. You can use span-level -HTML tags anywhere in a Markdown document, and you can use block level -HTML tags (like
    and as well). - -For more information about Markdown's syntax, see: - - http://daringfireball.net/projects/markdown/ - - -=head1 OPTIONS - -Use "--" to end switch parsing. For example, to open a file named "-z", use: - - Markdown.pl -- -z - -=over 4 - - -=item B<--html4tags> - -Use HTML 4 style for empty element tags, e.g.: - -
    - -instead of Markdown's default XHTML style tags, e.g.: - -
    - - -=item B<-v>, B<--version> - -Display Markdown's version number and copyright information. - - -=item B<-s>, B<--shortversion> - -Display the short-form version number. - - -=back - - - -=head1 BUGS - -To file bug reports or feature requests (other than topics listed in the -Caveats section above) please send email to: - - support@daringfireball.net - -Please include with your report: (1) the example input; (2) the output -you expected; (3) the output Markdown actually produced. - - -=head1 VERSION HISTORY - -See the readme file for detailed release notes for this version. - -1.0.1 - 14 Dec 2004 - -1.0 - 28 Aug 2004 - - -=head1 AUTHOR - - John Gruber - http://daringfireball.net - - PHP port and other contributions by Michel Fortin - http://michelf.com - - -=head1 COPYRIGHT AND LICENSE - -Copyright (c) 2003-2004 John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. - -=cut diff --git a/build/Deployment/nvALT.app/Contents/Resources/MarkupPreview.nib b/build/Deployment/nvALT.app/Contents/Resources/MarkupPreview.nib deleted file mode 100644 index 36f6cc6b5e057c539e3868261a7724d7618a2a80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13501 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 D&d1Z6 diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/GPL.txt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/GPL.txt deleted file mode 100755 index b1ac8a61..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/GPL.txt +++ /dev/null @@ -1,338 +0,0 @@ -Title: GNU GENERAL PUBLIC LICENSE -Subtitle: Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -# Preamble # - -The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - -We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - -Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -# GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION # - -0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - - You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - - These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - - In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - - The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - - If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - - If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - - It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - - This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -# How to Apply These Terms to Your New Programs # - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Readme.text b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Readme.text deleted file mode 100755 index 3123e934..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Readme.text +++ /dev/null @@ -1,352 +0,0 @@ -Markdown -======== - -Version 1.0.2b7 - Tue 29 Aug 2006 - -by John Gruber - - - -Introduction ------------- - -Markdown is a text-to-HTML conversion tool for web writers. Markdown -allows you to write using an easy-to-read, easy-to-write plain text -format, then convert it to structurally valid XHTML (or HTML). - -Thus, "Markdown" is two things: a plain text markup syntax, and a -software tool, written in Perl, that converts the plain text markup -to HTML. - -Markdown works both as a Movable Type plug-in and as a standalone Perl -script -- which means it can also be used as a text filter in BBEdit -(or any other application that supporst filters written in Perl). - -Full documentation of Markdown's syntax and configuration options is -available on the web: . -(Note: this readme file is formatted in Markdown.) - - - -Installation and Requirements ------------------------------ - -Markdown requires Perl 5.6.0 or later. Welcome to the 21st Century. -Markdown also requires the standard Perl library modules `Digest::MD5` -and `Text::Balanced`, both of which are included in the core library -with Perl 5.8 or later, and are on CPAN for older versions of Perl. - - -### Movable Type ### - -Markdown works with Movable Type version 2.6 or later (including -MT 3.0 or later). - -1. Copy the "Markdown.pl" file into your Movable Type "plugins" - directory. The "plugins" directory should be in the same directory - as "mt.cgi"; if the "plugins" directory doesn't already exist, use - your FTP program to create it. Your installation should look like - this: - - (mt home)/plugins/Markdown.pl - -2. Once installed, Markdown will appear as an option in Movable Type's - Text Formatting pop-up menu. This is selectable on a per-post basis. - Markdown translates your posts to HTML when you publish; the posts - themselves are stored in your MT database in Markdown format. - -3. If you also install SmartyPants 1.5 (or later), Markdown will offer - a second text formatting option: "Markdown with SmartyPants". This - option is the same as the regular "Markdown" formatter, except that - automatically uses SmartyPants to create typographically correct - curly quotes, em-dashes, and ellipses. See the SmartyPants web page - for more information: - -4. To make Markdown (or "Markdown with SmartyPants") your default - text formatting option for new posts, go to Weblog Config -> - Preferences. - -Note that by default, Markdown produces XHTML output. To configure -Markdown to produce HTML 4 output, see "Configuration", below. - - -### Blosxom ### - -Markdown works with Blosxom version 2.x. - -1. Rename the "Markdown.pl" plug-in to "Markdown" (case is - important). Movable Type requires plug-ins to have a ".pl" - extension; Blosxom forbids it. - -2. Copy the "Markdown" plug-in file to your Blosxom plug-ins folder. - If you're not sure where your Blosxom plug-ins folder is, see the - Blosxom documentation for information. - -3. That's it. The entries in your weblog will now automatically be - processed by Markdown. - -4. If you'd like to apply Markdown formatting only to certain posts, - rather than all of them, see Jason Clark's instructions for using - Markdown in conjunction with Blosxom's Meta plugin: - - - - -### BBEdit ### - -Markdown works with BBEdit 6.1 or later on Mac OS X. (It also works -with BBEdit 5.1 or later and MacPerl 5.6.1 on Mac OS 8.6 or later.) - -1. Copy the "Markdown.pl" file to appropriate filters folder in your - "BBEdit Support" folder. On Mac OS X, this should be: - - BBEdit Support/Unix Support/Unix Filters/ - - See the BBEdit documentation for more details on the location of - these folders. - - You can rename "Markdown.pl" to whatever you wish. - -2. That's it. To use Markdown, select some text in a BBEdit document, - then choose Markdown from the Filters sub-menu in the "#!" menu, or - the Filters floating palette - - - -Configuration -------------- - -By default, Markdown produces XHTML output for tags with empty elements. -E.g.: - -
    - -Markdown can be configured to produce HTML-style tags; e.g.: - -
    - - -### Movable Type ### - -You need to use a special `MTMarkdownOptions` container tag in each -Movable Type template where you want HTML 4-style output: - - - ... put your entry content here ... - - -The easiest way to use MTMarkdownOptions is probably to put the -opening tag right after your `` tag, and the closing tag right -before ``. - -To suppress Markdown processing in a particular template, i.e. to -publish the raw Markdown-formatted text without translation into -(X)HTML, set the `output` attribute to 'raw': - - - ... put your entry content here ... - - - -### Command-Line ### - -Use the `--html4tags` command-line switch to produce HTML output from a -Unix-style command line. E.g.: - - % perl Markdown.pl --html4tags foo.text - -Type `perldoc Markdown.pl`, or read the POD documentation within the -Markdown.pl source code for more information. - - - -Bugs ----- - -To file bug reports or feature requests please send email to: -. - - - -Version History ---------------- - -1.0.2b1 (Mon 28 Feb 2005) - -+ Fix for backticks within HTML tag: like this - -+ Fix for escaped backticks still triggering code spans: - - There are two raw backticks here: \` and here: \`, not a code span - - -1.0.1 (14 Dec 2004): - -+ Changed the syntax rules for code blocks and spans. Previously, - backslash escapes for special Markdown characters were processed - everywhere other than within inline HTML tags. Now, the contents - of code blocks and spans are no longer processed for backslash - escapes. This means that code blocks and spans are now treated - literally, with no special rules to worry about regarding - backslashes. - - **NOTE**: This changes the syntax from all previous versions of - Markdown. Code blocks and spans involving backslash characters - will now generate different output than before. - -+ Tweaked the rules for link definitions so that they must occur - within three spaces of the left margin. Thus if you indent a link - definition by four spaces or a tab, it will now be a code block. - - [a]: /url/ "Indented 3 spaces, this is a link def" - - [b]: /url/ "Indented 4 spaces, this is a code block" - - **IMPORTANT**: This may affect existing Markdown content if it - contains link definitions indented by 4 or more spaces. - -+ Added `>`, `+`, and `-` to the list of backslash-escapable - characters. These should have been done when these characters - were added as unordered list item markers. - -+ Trailing spaces and tabs following HTML comments and `
    ` tags - are now ignored. - -+ Inline links using `<` and `>` URL delimiters weren't working: - - like [this]() - -+ Added a bit of tolerance for trailing spaces and tabs after - Markdown hr's. - -+ Fixed bug where auto-links were being processed within code spans: - - like this: `` - -+ Sort-of fixed a bug where lines in the middle of hard-wrapped - paragraphs, which lines look like the start of a list item, - would accidentally trigger the creation of a list. E.g. a - paragraph that looked like this: - - I recommend upgrading to version - 8. Oops, now this line is treated - as a sub-list. - - This is fixed for top-level lists, but it can still happen for - sub-lists. E.g., the following list item will not be parsed - properly: - - + I recommend upgrading to version - 8. Oops, now this line is treated - as a sub-list. - - Given Markdown's list-creation rules, I'm not sure this can - be fixed. - -+ Standalone HTML comments are now handled; previously, they'd get - wrapped in a spurious `

    ` tag. - -+ Fix for horizontal rules preceded by 2 or 3 spaces. - -+ `


    ` HTML tags in must occur within three spaces of left - margin. (With 4 spaces or a tab, they should be code blocks, but - weren't before this fix.) - -+ Capitalized "With" in "Markdown With SmartyPants" for - consistency with the same string label in SmartyPants.pl. - (This fix is specific to the MT plug-in interface.) - -+ Auto-linked email address can now optionally contain - a 'mailto:' protocol. I.e. these are equivalent: - - - - -+ Fixed annoying bug where nested lists would wind up with - spurious (and invalid) `

    ` tags. - -+ You can now write empty links: - - [like this]() - - and they'll be turned into anchor tags with empty href attributes. - This should have worked before, but didn't. - -+ `***this***` and `___this___` are now turned into - - this - - Instead of - - this - - which isn't valid. (Thanks to Michel Fortin for the fix.) - -+ Added a new substitution in `_EncodeCode()`: s/\$/$/g; This - is only for the benefit of Blosxom users, because Blosxom - (sometimes?) interpolates Perl scalars in your article bodies. - -+ Fixed problem for links defined with urls that include parens, e.g.: - - [1]: http://sources.wikipedia.org/wiki/Middle_East_Policy_(Chomsky) - - "Chomsky" was being erroneously treated as the URL's title. - -+ At some point during 1.0's beta cycle, I changed every sub's - argument fetching from this idiom: - - my $text = shift; - - to: - - my $text = shift || return ''; - - The idea was to keep Markdown from doing any work in a sub - if the input was empty. This introduced a bug, though: - if the input to any function was the single-character string - "0", it would also evaluate as false and return immediately. - How silly. Now fixed. - - - -Donations ---------- - -Donations to support Markdown's development are happily accepted. See: - for details. - - - -Copyright and License ---------------------- - -Copyright (c) 2003-2006 John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Syntax.md b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Syntax.md deleted file mode 100755 index dbdd9e8a..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/Markdown Syntax.md +++ /dev/null @@ -1,128 +0,0 @@ -## Phrase Emphasis ## - - *italic* **bold** - _italic_ __bold__ - - -## Links ## - -Inline: - - An [example](http://url.com/ "Title") - -Reference-style labels (titles are optional): - - An [example][id]. Then, anywhere - else in the doc, define the link: - - [id]: http://example.com/ "Title" - - -## Images ## - -Inline (titles are optional): - - ![alt text](/path/img.jpg "Title") - -Reference-style: - - ![alt text][id] - - [id]: /url/to/img.jpg "Title" - - -## Headers ## - -Setext-style: - - Header 1 - ======== - - Header 2 - -------- - -atx-style (closing #'s are optional): - - # Header 1 # - - ## Header 2 ## - - ###### Header 6 - - -## Lists ## - -Ordered, without paragraphs: - - 1. Foo - 2. Bar - -Unordered, with paragraphs: - - * A list item. - - With multiple paragraphs. - - * Bar - -You can nest them: - - * Abacus - * answer - * Bubbles - 1. bunk - 2. bupkis - * BELITTLER - 3. burper - * Cunning - - -## Blockquotes ## - - > Email-style angle brackets - > are used for blockquotes. - - > > And, they can be nested. - - > #### Headers in blockquotes - > - > * You can quote a list. - > * Etc. - - -## Code Spans ## - - `` spans are delimited - by backticks. - - You can include literal backticks - like `` `this` ``. - - -## Preformatted Code Blocks ## - -Indent every line of a code block by at least 4 spaces or 1 tab. - - This is a normal paragraph. - - This is a preformatted - code block. - - -## Horizontal Rules ## - -Three or more dashes or asterisks: - - --- - - * * * - - - - - - - - -## Manual Line Breaks ## - -End a line with two or more spaces: - - Roses are red, - Violets are blue. \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/MultiMarkdown User's Guide.md b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/MultiMarkdown User's Guide.md deleted file mode 100755 index bc9d3684..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/MultiMarkdown User's Guide.md +++ /dev/null @@ -1,1861 +0,0 @@ -Title: MultiMarkdown User's Guide -Subtitle: Version 2.0.b6 -Author: Fletcher T. Penney -Web: http://fletcherpenney.net/ -Copyright: 2005-2009 Fletcher T. Penney. - This work is licensed under a Creative Commons License. - http://creativecommons.org/licenses/by-nc-sa/3.0/ -XMP: CCAttributionShareAlike -Keywords: Markdown - LaTeX - TeX - PDF - XHTML - XSLT - Oddmuse - OmniOutliner - MultiMarkdown - RTF - TextMate -Version: 2.0.b6 -Base Header Level: 2 -CSS: http://fletcherpenney.net/document.css -XHTML XSLT: xhtml-toc-h2.xslt - - - -# Introduction to MultiMarkdown # - -This document is an introduction to [MultiMarkdown][] --- what it is, how to -use it, how you can help make it better. This document exists in multiple -formats: a plain text document, a pdf, a [Scrivener][] document, -etc. Find the format that best suits your needs, or create your own. That is -what MultiMarkdown was designed to be used for! - - -[MultiMarkdown]: http://fletcherpenney.net/MultiMarkdown -[Scrivener]: http://www.literatureandlatte.com/scrivener.html - -## What is Markdown? # - -To understand what MultiMarkdown is, you first should be familiar with -[Markdown](http://daringfireball.net/projects/markdown/ "Daring Fireball: -Markdown"). The best description of what Markdown is comes from John Gruber's -Markdown web site: - -> Markdown is a text-to-HTML conversion tool for web writers. Markdown -> allows you to write using an easy-to-read, easy-to-write plain text -> format, then convert it to structurally valid XHTML (or HTML). - -> Thus, “Markdown” is two things: (1) a plain text formatting -> syntax; and (2) a software tool, written in Perl, that converts -> the plain text formatting to HTML. See the Syntax page for details -> pertaining to Markdown’s formatting syntax. You can try it out, -> right now, using the online Dingus. - -> The overriding design goal for Markdown’s formatting syntax is to -> make it as readable as possible. The idea is that a Markdown-formatted -> document should be publishable as-is, as plain text, without looking -> like it’s been marked up with tags or formatting instructions. While -> Markdown’s syntax has been influenced by several existing -> text-to-HTML filters, the single biggest source of inspiration for -> Markdown’s syntax is the format of plain text email. [#Gruber][] - - - -[#Gruber]: Daring Fireball: Markdown. - - -## What is MultiMarkdown? # - - - -Markdown is great, but it lacked a few features that would allow it to work -with documents, rather than just pieces of a web page. - -I wrote MultiMarkdown in order to leverage Markdown's syntax, but to extend it -to work with complete documents that could ultimately be converted from text -into other formats, including complete XHTML documents, LaTeX, PDF, RTF, or -even (shudder) Microsoft Word documents. - -In addition to the ability to work with complete documents and conversion to -other formats, the Markdown syntax was lacking a few things. Michel Fortin -added a few additional syntax tools when writing [PHP Markdown Extra][]. Some -of his ideas were implemented and expanded on in MultiMarkdown. - -John Gruber may disagree with me, but I really did try to stick with his -proclaimed vision whenever I added a new syntax format to MultiMarkdown. The -quality that attracted me to Markdown the most was its clean format. Reading a -plain text document written in Markdown is *easy*. It makes sense, and it -looks like it was designed for people, not computers. To the extent possible, -I tried to keep this same concept in mind when working on MultiMarkdown. - -I may or may not have succeeded in this... - -In the vein of Markdown's multiple definitions, you can think of MultiMarkdown -as: - -1. A perl script to convert plain text to XHTML - -2. The syntax used in the plain text to describe how to convert it to XHTML - -3. The system of programs (perl scripts, shell commands, XSLT transforms, php scripts, etc) used to convert plain text to XHTML, and then to convert XHTML into LaTeX, PDF, RTF, etc) - -[PHP Markdown Extra]: http://www.michelf.com/projects/php-markdown/extra/ - -## How do I use MultiMarkdown? # - - -You can use MultiMarkdown in a variety of ways: - -* As a command-line perl program (the "default" approach) - -* As a drag and drop application for Mac OS X - -* As a [TextMate][] -[bundle](http://files.fletcherpenney.net/MultiMarkdown.tmbundle.zip) - -* Within the [Scrivener][] application - -* In a [blosxom][] or [Oddmuse][] web site - -[TextMate]: http://macromates.com/ -[Scrivener]: http://www.literatureandlatte.com/scrivener.html -[blosxom]: http://blosxom.sourceforge.net "blosxom" -[Oddmuse]: http://www.oddmuse.org/ "Oddmuse Homepage" - -## Where can I find MultiMarkdown? # - - -The MultiMarkdown package can be downloaded: - -* - -Information about MultiMarkdown is available on my web site: - -* - -John Gruber's original Markdown is available at his site: - -* - -Michel Fortin's PHP version of Markdown is at his site: - -* - - -## Where can I get more information about MultiMarkdown? # - - -As above, check my web site. - -Also, you can check out the MultiMarkdown discussion list: - -* -* - -If you questions are specific to Scrivener, you can also browse the Literate and Latte forum: - -* - -# Quickstart Guide to MultiMarkdown # - -Quick start instructions, for those in a hurry... - - -## General Instructions ## - -1. Download the MultiMarkdown package: - - - -2. Unzip/untar it - -3. MultiMarkdown can be run from anywhere, but is easiest when installed in a "common" location: - - * Windows: - - * C:\Documents and Settings\All Users\MultiMarkdown - * C:\Documents and Settings\<user>\MultiMarkdown - - * Mac OS X or *nix - - * ~/Library/Application Support/MultiMarkdown (preferred on Mac OS X) - * ~/.multimarkdown - * /Library/Application Support/MultiMarkdown (preferred on Mac OS X) - * /usr/share/multimarkdown - -4. In the "bin" directory, there are a couple of perl scripts designed to take a MultiMarkdown text file and convert to XHTML, or LaTeX, or pdf. These scripts are designed to be able to be run from anywhere. You can leave them where they are, or install them somewhere in your path directory: - - * mmd2XHTML.pl - - * mmd2LaTeX.pl - - * mmd2PDF.pl - - * mmd2PDFXeLaTeX.pl - - * mmd2letter.pl - - -5. To use these files, do something like the following: - - cd MultiMarkdown - bin/mmd2XHTML.pl file.txt - - where "file.txt" is the MultiMarkdown file you wish to process. "file.html" will be created automatically - -6. You can now open `file.html` in your web browser, or do what you like with it. - - -[TextMate]: http://macromates.com/ -[Scrivener]: http://www.literatureandlatte.com/scrivener.html - - - -# MultiMarkdown Syntax Guide # - -This is a guide to the markup syntax used in the MultiMarkdown system. - -## Metadata ## - -MultiMarkdown has support for metadata, meaning that you can include -information about a document that is not necessarily part of the document -contents. - -To use metadata, simply add information to the top of a Markdown file: - - Title: A New MultiMarkdown Document - Author: Fletcher T. Penney - John Doe - Date: July 25, 2005 - -The key is the text before the colon, and the data is the text after the -colon. In the above example, notice that there are two lines of information -for the Author key. If you end a line with "space-space-newline", the newline -will be included when converted to other formats. - -There must not be any whitespace above the metadata, and the metadata block -ends with the first whitespace only line. The metadata is stripped from the -document before it is passed on to the syntax parser. - -While not required, I recommend including two spaces at the end of each line -of metadata. In this way, if you pass your document through a regular version -of Markdown, the metadata will be properly formatted as plain text with line -breaks, rather than joined into a single run-on paragraph. - -I have included information about some of the "standard" metadata keys --- I -welcome feedback and suggestions for additional standard keys that would be -useful. If you add keys that are not listed, they are included in the XHTML -and LaTeX as custom variables that can still be used if you desire. - -Remember, XHTML snippets have no means to use metadata. To make use of these -features, one must be using `Format: complete` to create full XHTML documents, -which can then be processed using XSLT to create other document types. As an -example, I use metadata for information that is used to add title, author, -keyword, and copyright metadata to PDF's created by MultiMarkdown. - -**Note**: I make multiple mentions to the use of these keys for LaTeX -documents. This is simply because the LaTeX output format currently makes the -most use of the metadata information. Any export format could be modified to -make use of additional metadata keys. - -### Address ### - -Use this to include the author's mailing address. You can have more than one -line in this field --- use two extra spaces at the end of a line, and a -newline character will be used in LaTeX. Also used as return address for -letterhead and envelope templates. - -### Author ### - -Self-explanatory. I strip this out to provide an author string to LaTeX -documents. Also used as the sender for letterhead and envelope templates. - - -### Affiliation ### - -Use this to include an organization that the author is affiliated with, e.g. a -university, company, or organization. You can include address information here -as well, or use the `Address`, `email`, `web`, and `phone` metadata fields. -You can have more than one line in this field --- use two extra spaces at the -end of the line, and a newline character will be used in LaTeX. - - -### Base Header Level ### - -Used by my XSLT script tool to change the default header level. For example, -if using the memoir class, you might want a first level header to be -interpreted as a chapter, rather than as a part. To do this, simply set `Base -Header Level` to `2`. - -### Base URL (Deprecated)### - -Deprecated - WikiWords and WikiLinks no longer supported. - - -### Bibliography Title ### - -Change the title used for the references section (e.g. "References" or -"Bibliography"). The default value is "Bibliography". - - -### Bibliography Style ### - -The name of the BibTeX style you wish to use. - - -### BibTeX ### - -This should be the name of a `.bib` file (a BibTeX file used to store -references). If you use my xhtml2latex.xslt file, this will convert external -citations into markup for BibTeX (see [Bibliography Support][] for more -information). - -You must have `bibtex` installed and working, and the `.bib` file must be in -your working directory. - -### Chapterstyle ### - -This is used to designate the `chapterstyle` in LaTeX memoir documents. - -### Copyright ### - -This can be used to provide a copyright string. - - -### CSS ### - -Used to specify a CSS stylesheet when creating the complete XHTML output. - - -### Date ### - -Provide a date for the document. - - -### Email ### - -Use this to include the author's email address. - -### Format ### - -Set to `complete` to indicate that a fully-formed XHTML document should be -produced. Such a document is ready for processing by an XSLT tool, such as the -XSLT files to convert XHTML into LaTeX. - -Set to `snippet` to indicate that no `` or other information should be -included. This might be useful for generating (X)HTML output ready for pasting -into a weblog, for example. - -**Note**: Some MultiMarkdown tools add this for you (e.g. TextMate using my -bundle, and Scrivener.) Duplicating the `Format` key in these programs should -not cause a problem --- let me know if you have trouble. - -### Keywords ### - -Provide a list of keywords for the document. I use these to add keywords to -PDF's that are produced as well. Keywords can be separated by commas, or -placed on separate lines. - - -### Language ### - -Currently, the language field is used to specify which version of -[SmartyPants] to use. In the future, it may be used for other purposes as -well. - -The languages are written using the English word (e.g. "german" not -"deutsch"). - -[SmartyPants]: http://daringfireball.net/projects/smartypants/ "SmartyPants Homepage" - - -### LaTeX XSLT ### - -Used to designate an XSLT file to convert an XHTML document to a LaTeX -document. The LaTeX document can then be converted to PDF by `pdflatex`. This -key used to be called `XSLT File`. - -### Pagestyle ### - -This is used to designate the `pagestyle` in LaTeX memoir documents. - -### Phone ### - -Use this to include the author's phone number(s). You can have more than one -line in this field --- use two extra spaces at the end of the line, and a -newline character will be used in LaTeX. - - -### Recipient ### - -Used by letterhead and envelope templates. - - -### Recipient Address ### - -Used by letterhead and envelope templates. - - -### Revision ### - -You can use a string to declare the current version of the document. Displayed -on the copyright page when using my memoir XSLT transform. - - -### RTF XSLT ### - -This key is used to provide an XSLT file that can alter the XHTML output prior -to conversion to RTF. Useful for further customizing the output of -MultiMarkdown specifically for the RTF format. I have no plans to create any -such files myself, but others may find it useful. - -*I strongly encourage you to use another route to convert XHTML to RTF. -I've had the best results with [Google Docs](htts://docs.google.com/). For -non-Mac users, that's definitely the way to go.* - -### Subtitle ### - -Used to provide a subtitle. It ends up in the meta tags, but can be extracted -by XSLT for other uses. - - -### Title ### - -Used to provide the official title of a document. This is set as the `` -string within the `<head>` section of an HTML document, and is also used by -other export formats. - - -### Use WikiLinks (Deprecated)### - -Set to `true` or `1` to enable the use of `WikiWords` and `[[Free Links]]`. -Requires that you also set `Base URL`. See [WikiLinks][] for more information. - - -### Web ### - -Use this to include the author's web URL. - - -### XHTML Header ### - -This is used to include raw XHTML information in the header of a document. You -can use this field to add information that will be included in the header of -the generated XHTML file. This can be CSS formatting data, or javascript code, -or just about anything. I am not responsible for getting that code to work. -MultiMarkdown just includes it as is. - -Anything included in this field is inserted, unaltered, in the `<head>` -section of the XHTML output. If you do add anything here, the XSLT stylesheet -may have to updated to ignore what you added if you want to convert to LaTeX. -Let me know what you add, and I can consider updating the XSLT stylesheet to -ignore it. Currently it ignores `<style>` sections. - - -### XHTML XSLT ### - -This is the name of the XSLT file to use to post-process the XHTML file. This -can be used to further customize the XHTML output generated by MultiMarkdown. -For example, the `xhtml-toc.xslt` file can add a Table of Contents to the -start of XHTML page. - - - -### XMP ### - -This is used to provide a file to be included using -[xmpincl](http://www.ctan.org/tex-archive/macros/latex/contrib/xmpincl/). -Basically, this adds the ability to provide Creative Commons Licensing -information in a PDF's [metadata](http://creativecommons.org/technology/xmp). -It can also be used for other purposes (beyond the scope of this document.) - - -### XSLT File (deprecated)### - -This metadata key has been deprecated in favor of `XHTML XSLT`, `RTF XSLT`, -and `LaTeX XSLT`. - -## Automatic Cross-References ## - -An oft-requested feature was the ability to have Markdown automatically handle -within-document links as easily as it handled external links. To this aim, I -added the ability to interpret `[Some Text][]` as a cross-link, if a header -named "Some Text" exists. - -As an example, `[Metadata][]` will take you to the -[section describing metadata][Metadata]. - -Alternatively, you can include an optional label of your choosing to help -disambiguate cases where multiple headers have the same title: - - ### Overview [MultiMarkdownOverview] ## - -This allows you to use `[MultiMarkdownOverview]` to refer to this section -specifically, and not another section named `Overview`. This works with atx- -or settext-style headers. - -If you have already defined an anchor using the same id that is used by a -header, then the defined anchor takes precedence. - -In addition to headers within the document, you can provide labels for images -and tables which can then be used for cross-references as well. - -## Image Support ## - -Obviously, images are handled just fine by Markdown (with the exception of -attributes as noted above.) However, without some more information, images are -not easily translated into other document formats (e.g. PDF). - -To handle this, my XSLT files will make use of `<img>` dimensions (e.g. -`height` and `width`). If present, the image will be scaled. If only one -dimension is specified, the image will be scaled proportionately. If neither -`height` nor `width` is specified, then the image will be scaled such that -it's width is the same as a column of text. This is to prevent high resolution -images from overflowing the page. Unfortunately, it has the side effect of -"zooming" in on smaller images. So, if you have images that are being scaled -in a way that you do not desire, simply specify at least one dimension. - -*Note: XHTML only allows for units of `px` and `%` on `<img>` tags. LaTeX -allows for several others. So, my XSLT file allows for other units to be used, -even if they screw up the XHTML version. You have to choose appropriate units -for your purpose. Unfortunately, the only way around this is to make sure that -all of your images contain actual dimension information, and then remove the -`\resizebox` part from the XSLT.* - -## Anchor and Image Attributes ## - -Adding attributes to links and images has been requested for a long time on -the Markdown discussion list. I was fairly opposed to this, as most of the -proposals really disrupted the readability of the syntax. I consider myself a -"Markdown purist", meaning that I took John's introduction to heart: - -> The overriding design goal for Markdown's formatting syntax is to make -> it as readable as possible. The idea is that a Markdown-formatted -> document should be publishable as-is, as plain text, without looking -> like it's been marked up with tags or formatting instructions. While -> Markdown's syntax has been influenced by several existing text-to-HTML -> filters, the single biggest source of inspiration for Markdown's -> syntax is the format of plain text email. - -Because there was not a syntax proposal that I felt fit this goal, I was generally opposed to the idea. - -Then, Choan C. Gálvez [proposed][galvez] a brilliantly simple syntax that -stayed out of the way. By simply appending the attributes to the link -reference information, which is already removed from the text itself, it -doesn't disturb the readability. - -[galvez]: http://six.pairlist.net/pipermail/markdown-discuss/2005-October/001578.html - -For example: - - This is a formatted ![image][] and a [link][] with attributes. - - [image]: http://path.to/image "Image title" width=40px height=400px - [link]: http://path.to/link.html "Some Link" class=external - style="border: solid black 1px;" - -This will generate width and height attributes for the image, and a border -around the link. And while it can be argued that it does look "like it's been -marked up with tags [and] formatting instructions", even I can't argue too -strongly against it. The link and the title in quotes already look like some -form of markup, and the the additional tags are hardly that intrusive, and -they offer a great deal of functionality. They might even be useful in further -functions (citations?). - -The attributes must continue after the other link/image data, and may contain -newlines, but must start at the beginning of the line. The format is -`attribute=value` or `attribute="multi word value"`. Currently, MultiMarkdown -does not attempt to interpret or make any use of any of these attributes. -Also, you can't have a multiword attribute span a newline. - - -## WikiLinks (Deprecated)## - - - -**Note:** The WikiLinks feature was more trouble than it was -worth, and has been removed. One can still use the wiki software -to manage these links. For example, my [MultiMarkdown Extension] for [Oddmuse] -supports Oddmuse styled WikiLinks. - -[MultiMarkdown Extension]: http://www.oddmuse.org/cgi-bin/wiki/Markdown_Extension - -## Footnotes ## - - -I have added support for footnotes to MultiMarkdown, using the syntax proposed -by John Gruber. Note that there is no official support for footnotes yet, so -the output format may change, but the input format sounds fairly stable. - -To create a footnote, enter something like the following: - - Here is some text containing a footnote.[^somesamplefootnote] - - [^somesamplefootnote]: Here is the text of the footnote itself. - - [somelink]:http://somelink.com - - -The footnote itself must be at the start of a line, just like links by -reference. If you want a footnote to have multiple paragraphs, lists, etc., -then the subsequent paragraphs need an extra tab preceding them. You may have -to experiment to get this just right, and please let me know of any issues you -find. - -This is what the final result looks like: - -> Here is some text containing a footnote.[^somesamplefootnote] - -[^somesamplefootnote]: Here is the text of the footnote itself. - -## Tables ## - - -I have implemented a syntax for tables similar to that used by Michael -Fortin's [PHP Markdown Extra][]. - -[PHP Markdown Extra]: http://www.michelf.com/projects/php-markdown/extra - -Basically, it allows you to turn: - - | | Grouping || - First Header | Second Header | Third Header | - ------------ | :-----------: | -----------: | - Content | *Long Cell* || - Content | **Cell** | Cell | - - New section | More | Data | - And more | And more | - [Prototype table] - -into a [table][Prototype Table]. - -| | Grouping || -First Header | Second Header | Third Header | -| ---------- | :-----------: | -----------: | -Content | *Long Cell* || -Content | **Cell** | Cell | - -New section | More | Data | -And more | And more || -[Prototype table] - - -The requirements are: - -* There must be at least one `|` per line -* The second line must contain only `|`,`-`,`:`,`.`, or spaces -* Cell content must be on one line only -* Columns are separated by `|` -* The first line of the table, and the alignment/divider line, must start at - the beginning of the line - -Other notes: - -* It is optional whether you have `|`'s at the beginning and end of lines. - -* To set alignment, you can use a colon to designate left or right alignment, - or a colon at each end to designate center alignment, as above. If no colon - is present, the default alignment of your system is selected (left in most - cases). If you use a period character (`.`), then `char` alignment is used - - in the future this will allow columns of decimal formatted numbers to be - aligned on the decimal character. Browsers do not currently support this - feature, so it is somewhat useless at the moment. It could be used in an - XSLT stylesheet for other output formats (e.g. LaTeX). - -* To indicate that a cell should span multiple columns, there simply add - additional pipes (`|`) at the end of the cell, as shown in the example. If - the cell in question is at the end of the row, then of course that means - that pipes are not optional at the end of that row.... - -* You can use normal Markdown markup within the table cells. - -* Captions are optional, but if present must be at the beginning of the line - immediately preceding or following the table, start with `[`, and end with - `]`. If you have a caption before and after the table, only the first match - will be used. - -* If you have a caption, you can also have a label, allowing you to create - anchors pointing to the table. If there is no label, then the caption acts - as the label - -* Cells can be empty. - -* You can create multiple `<tbody>` tags within a table by having a **single** - empty line between rows of the table. This allows your CSS to place - horizontal borders to emphasize different sections of the table. - -* If there is no header for the first column, then cells in that column will - be treated as headers, and formatted as such. - - -## Bibliography Support ## - -I have included support for *basic* bibliography features in this version of -MultiMarkdown. Please give me feedback on ways to improve this but keep the -following in mind: - -1. Bibliography support in MultiMarkdown is rudimentary. The goal is to offer -a basic standalone feature, that can be changed using the tool of your choice -to a more robust format (e.g. BibTeX, CiteProc). My XSLT files demonstrate how -to make this format compatible with BibTeX, but I am not planning on -personally providing compatibility with other tools. Feel free to post your -ideas and tools to the wiki. - -2. Those needing more detailed function sets for their bibliographies may need -customized tools to provide those services. This is a basic tool that should -work for most people. Reference librarians will probably not be satisfied -however. - - -To use citations in MultiMarkdown, you use a syntax much like that for -anchors: - - This is a statement that should be attributed to - its source[p. 23][#Doe:2006]. - - And following is the description of the reference to be - used in the bibliography. - - [#Doe:2006]: John Doe. *Some Big Fancy Book*. Vanity Press, 2006. - -The XHTML that is generated is as follows: - - <p>This is a statement that should be attributed to its source - <span class="markdowncitation"> (<a href="#Doe:2006">1</a>, <span - class="locator">p. 23</span>)</span>.</p> - - <p>And following is the description of the reference to be used - in the bibliography.</p> - - <div class="bibliography"> - <hr /> - <p>Bibliography</p> - - <div id="Doe:2006"><p>[1] John Doe. <em>Some Big Fancy Book</em>. - Vanity Press, 2006.</p></div> - - </div> - -You are not required to use a locator (e.g. `p. 23`), and there are no special -rules on what can be used as a locator if you choose to use one. - -There are no rules on the citation key format that you use (e.g. `Doe:2006`), -but it must be preceded by a `#`, just like footnotes use `^`. - -As for the reference description, you can use Markup code within this section, -and I recommend leaving a blank line afterwards to prevent concatenation of -several references. Note that there is no way to reformat these references in -different bibliography styles; for this you need a program designed for that -purpose (e.g. BibTeX). - -If you want to include a source in your bibliography that was not cited, you -may use the following: - - [Not cited][#citekey] - -The `Not cited` bit is not case sensitive. - - -### MultiMarkdown References ### - -If you define your references (as in the example above), MultiMarkdown will -automatically append a basic bibliography to the end of your document. The -citations will of the form: - - <span class="markdowncitation"> (<a href="#citekey"># - </a>, <span class="locator">p. 23</span>)</span> - -If you don't define a locator, you will get: - - <span class="markdowncitation"> (<a href="#citekey"># - </a>)</span> - -When you click on the `#` (which is replaced with the specific reference -number), it takes you to the appropriate point in the Bibliography. Unlike -footnotes, there is no reverse link. - - -### External References ### - -If you do not define references, then MultiMarkdown will substitute different -markup that can be used by XSLT to transform it into markup for an external -tool, e.g. BibTeX. - - <span class="externalcitation"> (<a id="citekey">citekey</a>, <span - class="locator">p. 23</span>)</span> - -If you don't define a locator, you will get: - - <span class="externalcitation"> (<a id="citekey">citekey</a>)</span> - - -Obviously, the citekey that you use in MultiMarkdown must match that used by -your external tool. - -[MultiMarkdownDragAndDrop]: http://fletcherpenney.net/Applications_That_Support_MultiMarkdown#multimarkdowndraganddrop "MultiMarkdown Drag and Drop" - -### Multiple Citations ### - -When you need to combine multiple citations together, simply add them -serially: - - [p. 3][#Doe:1996][p. 10][#Smith:2005] - -giving the output: - - (1, p. 3) (2, p. 10) - -I recognize that this is not really a standardized format, but again I remind -you that the bibliography support in MultiMarkdown is minimal. If you want -more control, or adherence to proper style rules, you need a more powerful -bibliography tool. - -I have written a perl script that will join these serial citations into one, -`cleancites.pl`. It is run by default by the default MultiMarkdown usage -scripts. - -### BibTeX Support ### - -If you are a user of BibTeX, you may use it to control your references. Simply -set the `Bibtex` and `Bibliographystyle` metadata as described in the section -on [Metadata][], and use my xhtml2latex XSLT files as examples. - -If you use this, you are not required to define your references within your -MultiMarkdown document. - -### Advanced Citations with natbib ### - -Advanced LaTeX users are probably familiar with the -[natbib](http://www.ctan.org/tex-archive/help/Catalogue/entries/natbib.html) -package, which adds additional features for bibliographic citations. It offers -two new citation commands, `\citet` and `\citep`. - -To use the advanced natbib features: - -1. You must have the natbib package installed for LaTeX -2. You must use an appropriate XSLT file that enables the natbib package (`memoir-natbib.xslt` is an example - you can make your own) - - -By default, citations occur using the `\citep` command. - -To use a `\citet` citation, follow the example below: - - In their seminal paper, [Smith and Jones; p 42][#Smith1990] argue - convincingly that.... - - [#Smith1990]: Smith, R, and Jones, K. *Some Fancy Article* etc... - -The text before the semi-colon indicates that we want a textual citation. In -the XHTML version, the text you enter becomes the text in the sentence. When -converted to LaTeX, your text is actually removed and the natbib package -handles it for you. The text after the semi-colon is the usual locator text -(if you don't want a locator, just leave it blank after the semi-colon). - -If you don't include a semi-colon, then the `\citep` command is used in the -usual fashion. - -## Math Syntax ## - -### Introduction to Math support ### - - -**Note**: *Math support within MultiMarkdown is created using MathML. MathML -is not fully supported in many browsers, so your mileage may vary (I honestly -don't care whether Internet Explorer works --- get a real browser. Support -within Firefox is pretty good, but not perfect.) This feature is quite useful, -however, when generating a PDF via LaTeX.* - -*To view a file with MathML properly in Firefox, it must have the file ending -".xhtml". I don't know why, and it seems dumb that file extensions are so -important in 2007. But for now, that's the way it is.* - -MultiMarkdown supports [ASCIIMathML](http://en.wikipedia.org/wiki/ASCIIMathML) -a syntax for converting mathematical equations from plain text into -[MathML](http://en.wikipedia.org/wiki/MathML). MathML can be used within -properly formatted XHTML documents to display well typeset mathematical -formula. - -The conversion used to managed by -[ASCIIMathPHP](http://www.jcphysics.com/ASCIIMath/), which was a PHP script -that had to be run separately from MultiMarkdown itself. As of version -2.0b.b4, however, I am using the -[Text::ASCIIMathML](http://search.cpan.org/~nodine/Text-ASCIIMathML-0.5/) Perl -module for support built into the MultiMarkdown script. - -### MultiMarkdown Math Syntax ### - -Basically, use use `<<` and `>>` as delimiters to indicate that you are -including math in your document. You can use this to create an inline formula, -or you can create independent equations, each in it's own paragraph. These can -also then be converted properly into LaTeX math environments. - -Additionally, you can include a `[label]` tag at the end of the equation to -allow you to reference it elsewhere in your text with the label. For example: - - << e^(i pi) + 1 = 0 [Euler's identity]>> - - << x_(1,2) = (-b+-sqrt(b^2-4ac))/(2a) [quadratic equation solution]>> - - You can also include formulas within a sentence, such as - <<x^2 + y^2 = 1>>. You can then make a reference to - [Euler's identity]. - -is converted into: - -> << e^(i pi) + 1 = 0 [Euler's identity]>> - -> << x_(1,2) = (-b+-sqrt(b^2-4ac))/(2a) [quadratic equation solution]>> - -> You can also include formulas within a sentence, such as -> << x^2 + y^2 = 1>>. You can then make a reference to [Euler's identity]. - -### Superscripts ### - -By using the math mode above, you can include superscripts and the like in -MultiMarkdown documents that don't necessarily have to be separate formulas. -For example: - - <<2^pi>> - -becomes - -> <<2^pi>>. - -This is, of course, subject to the same limitations as MathML in general. - -### MathML Difficulties ### - -There are some glitches in this process. First, many browsers don't fully -support MathML, and sometimes you have to go through great lengths to get the -browser to recognize it properly. Firefox, for instance, requires an `.xhtml` -extension to properly recognize the file as `XHTML` instead of `HTML`. This -may not be an ideal solution for everybody, but it **does** allow you to use a -plain english syntax to represent mathematical formulas and symbols within -Markdown documents, which was my goal. Others may prefer to use custom -solutions using raw LaTeX source, but I didn't want to have to learn the LaTeX -math syntax. - -On the up side, however, this does give wonderful output when combined with my -XSLT scripts to generate LaTeX documents and PDF's. I am open to input on this -feature, and suspect it will become increasingly useful as browser support for -MathML improves. - -For more information on supporting MathML in web browsers, I have written a -brief introduction to -[Supporting MathML](http://fletcherpenney.net/Supporting_MathML) on my web -site. - - -## Definition Lists ## - -MultiMarkdown has support for definition lists using the same syntax used in -[PHP Markdown Extra][]. Specifically: - - Apple - : Pomaceous fruit of plants of the genus Malus in - the family Rosaceae. - : An american computer company. - - Orange - : The fruit of an evergreen tree of the genus Citrus. - - -becomes: - -> Apple -> : Pomaceous fruit of plants of the genus Malus in -> the family Rosaceae. -> : An american computer company. -> -> Orange -> : The fruit of an evergreen tree of the genus Citrus. - -You can have more than one term per definition by placing each term on a -separate line. Each definition starts with a colon, and you can have more than -one definition per term. You may optionally have a blank line between the last -term and the first definition. - -Definitions may contain other block level elements, such as lists, -blockquotes, or other definition lists. - -Unlike PHP Markdown Extra, all definitions are wrapped in `<p>` tags. First, I -was unable to get Markdown *not* to create paragraphs. Second, I didn't see -where it mattered - the only difference seems to be aesthetic, and I actually -prefer the `<p>` tags in place. Let me know if this is a problem. - -See the [PHP Markdown Extra][] page for more information. - -## Appendices ## - -If you want to designate the final subgroup of chapters as appendices, you can include an `h1` or `h2` level header (as appropriate based on your document) with the title `Appendices`. The chapters that follow would be considered appendices when the document is converted to LaTeX using the memoir class. Since XHTML doesn't have a concept of appendices, it has no real meaning, but would at least designate this to the reader. - -## Glossaries ## - -MultiMarkdown has a feature that allows footnotes to be specified as glossary -terms. It doesn't do much for XHTML documents, but the XSLT file that converts -the document into LaTeX is designed to convert these special footnotes into -glossary entries. - -The glossary format for the footnotes is: - - [^glossaryfootnote]: glossary: term (optional sort key) - The actual definition belongs on a new line, and can continue on - just as other footnotes. - -The `term` is the item that belongs in the glossary. The `sort key` is -optional, and is used to specify that the term should appear somewhere else in -the glossary (which is sorted in alphabetical order). - -Unfortunately, it takes an extra step to generate the glossary when creating a -pdf from a latex file: - -1. You need to have the `basic.gst` file installed, which comes with the -memoir class. - -2. You need to run a special makeindex command to generate the `.glo` file: - ``makeindex -s `kpsewhich basic.gst` -o "filename.gls" "filename.glo"`` - -3. Then you run the usual pdflatex command again a few times. - -Alternatively, you can use the code below to create an engine file for TeXShop -(it belongs in `~/Library/TeXShop/Engines`). You can name it something like -`MemoirGlossary.engine`. Then, when processing a file that needs a glossary, -you typeset your document once with this engine, and then continue to process -it normally with the usual LaTeX engine. Your glossary should be compiled -appropriately. If you use [TeXShop][], this is the way to go. - -**Note**: *Getting glossaries to work is a slightly more advanced LaTeX -feature, and might take some trial and error the first few times.* - - - #!/bin/ - - set path = ($path /usr/local/teTeX/bin/powerpc-apple-darwin-current - /usr/local/bin) # This is actually a continuation of the line above - - set basefile = `basename "$1" .tex` - - makeindex -s `kpsewhich basic.gst` -o "${basefile}.gls" "${basefile}.glo" - - -[TeXShop]: http://www.uoregon.edu/~koch/texshop/ "TeXShop Homepage" - -## Poetry Mode ## - -By default, when you have a section of text indented with a tab, MultiMarkdown -interprets this as a code block. This allows you to more exactly control the -spacing and line endings, but it also applies a monospace font in both the -XHTML and LaTeX outputs. This is the usual way of demonstrating source code in -documents. - -Some authors, however, don't write about source code, but would like a way to -control line endings (when writing poetry, for example). - -To accomplish this, there are several alternate XSLT files included within the -MultiMarkdown distribution that are labelled with a `poetry` filename. These -XSLT files handle the code blocks in a slightly different way to make them -more suitable for text, rather than code. I encourage you to give this a try. - -At the current time, there is no way to use both formats within the same -document, except to format them manually. This may change in the future, -depending on some decisions John Gruber needs to make about the standard -Markdown syntax. - -## Miscellanea ## - -In addition to what is mentioned elsewhere in this document, MultiMarkdown -does a few things slightly differently: - -* `©` entities are converted to `©` so that they can pass through an - XSLT parser - -* `*` and `_` are not interpreted as `<strong>` or `<em>` when they occur in - the middle of words. This caused too many problems with URL's. - -MultiMarkdown supports the conversion of colored spans of text from XHTML to -LaTeX using the xcolor package. For example: - - <span style="color:#888888">net</span> - -becomes: - - {\color[HTML]{888888} net} - -There is not currently a syntax shortcut for this, you have to manually add -the `<span>` information. This technique is used to support annotations from -Scrivener, for example. - -[PHP Markdown Extra]: http://www.michelf.com/projects/php-markdown/extra/ - -# MultiMarkdown and LaTeX # - -[LaTeX](http://www.latex-project.org/) is a professional quality typesetting -system that can be used to take plain text markup and produce a high quality -pdf, complete with table of contents, index, glosssary, etc. It's a fairly -complicated program, but capable of doing most of the work for you. One of my -goals with MultiMarkdown was to make it even easier to create a LaTeX -document, with minimal knowledge of the LaTeX syntax. In fact, you can create -fairly complex documents without any understanding of how LaTeX works, as long -as you have it installed correctly. - - -That said, MultiMarkdown is not simply a preprocessor for LaTeX files, so -there will always be LaTeX commands that are just not available from within -MultiMarkdown. If you're a LaTeX expert, you might find that after -MultiMarkdown runs, you want to go and hand tweak a few parts to get things -just right. But for the average user and average document, I suspect the -default output will be just fine. - -The settings to pay particular attention to: - -* You must choose an XSLT file to convert the MultiMarkdown-generated XHTML - into LaTeX; you do this by setting the `LaTeX XSLT` metadata. If you do not - choose one, the default is `memoir.xslt`. Most of my XSLT files are based - around the `memoir` package --- it's the one I'm familiar with, it's very - flexible, and has high quality output, and lots of features. That said, you - are welcome to create your own XSLT files to use whatever packages you - prefer. The beauty of the XSLT transformation process is that it can be - completely reconfigured however you like. - -* Depending on what sort of document you are creating, you may need to set the - `Base Header Level` metadata. For example, if you are creating a `memoir` - based document, and wish for your top-level section to be a chapter, rather - than a "part", you could set `Base Header Level` to 2. It's easier to do - than explain, but basically it moves all levels of your structure by the - specified number of steps. - -* You likely will want to set as much of the basic metadata as possible (e.g. - `Title`, `Author`, `Date`, `Keywords`, etc) as most of this is converted to - a format that is used in the resulting PDF. - -Also, MultiMarkdown has support for -[BibTeX](http://en.wikipedia.org/wiki/BibTeX), glossaries, html links, -internal links between sections of the document, math formatting, etc. Most of -the "major" features of LaTeX are available using the standard MultiMarkdown -syntaxes. If there is something you don't see, just ask --- it may exist, or I -might be able to add it if appropriate. - -The general process of creating a PDF via LaTeX is the same as the normal use -of MultiMarkdown, with one additional step: - -1. Create your text source file - -2. Using your method of choice, convert the text file to XHTML, and then -convert the XHTML to LaTeX (most of my tools will do this as a single step as -far as the user is concerned). - -3. Convert the LaTeX source file to PDF using the tool of your choice (my Drag -and Drop [application](http://fletcherpenney.net/MultiMarkdown_Drag_and_Drop), -[TeXShop], [latexmk](http://www.phys.psu.edu/~collins/software/latexmk-jcc/), -manually, etc.) - -Due to the complexity of the LaTeX source, it can be hard to troubleshoot when -using an automatic tool. If something doesn't work, I recommend first trying -to get your MultiMarkdown text file converted to XHTML and verify that it is -correct. Then convert the XHTML to LaTeX and be sure that you can watch the -status messages that occur during processing of the LaTeX file - they will -usually give you a hint as to where the problem lies. Remember, just because -the XHTML version of a MultiMarkdown document is valid XHTML does not mean the -resulting LaTeX will be totally valid. - -[TeXShop]: http://www.uoregon.edu/~koch/texshop/ "TeXShop Homepage" - - -# Advanced Features and Customization # - -I believe that MultiMarkdown works pretty well "out of the box" for the vast -majority of users (of course, I'm not biased or anything...) But more advanced -users will eventually start thinking about features that they wish existed. -Some of these features are very specific to their own documents and style, but -others are more general and would be of use to everyone. - -## How do I find out about feature x? ## - -My recommended approach is: - -1. Make sure you check through the documentation on the web site (there is a -search feature). An increasing number of feature requests are for things that -already exist. - -2. Check the MultiMarkdown discussion list to see if someone has already -suggested your feature, or better yet, has already solved it. - -3. Decide whether it's something you could try and do yourself, or whether you -need to ask for help to accomplish it. Either way, the results can be shared -on my web site to help others. - -## How do I customize MultiMarkdown? ## - -The first step in trying to customize MultiMarkdown is to figure out where in -the workflow the customization needs to occur: - -1. Does the MultiMarkdown perl script need to be modified to add a new syntax, -or change the way the output is generated? There should be fewer and fewer -necessary changes in this step as the MultiMarkdown syntax matures. Also, note -that I am hesitant to add new features at this level that increase the -complexity of markup. It's not impossible, but I will definitely need to be -convinced it's the only way to go. - -2. Can the desired feature be implemented through a modification of one of the -XSLT files? XSLT is a powerful tool, and can be used to really customize the -XHTML or LaTeX output from a MMD document. (*Many users would likely benefit -from a generic XHTML to RTF XSLT stylesheet - I have been unable to locate one -that would work, and I have no need of RTF documents. This would be too much -work for too little gain for me, but I am sure someone out there needs exactly -this sort of tool.*) Browse through the `XSLT` directory and look to see if -there is a stylesheet that could be modified to do what you want. The XSLT -syntax is not that complicated, but does take some getting used to. As -examples, the `xhtml-toc.xslt` script parses the header tags in the XHTML -output, and creates an automatic table of contents at the top of the XHTML -file. The `xhtml-poetry-support.xslt` file looks for code blocks that start -with `[poetry]` and changes them to a poetry mode, rather than code (basically -removing the monospace font). - -3. Does the desired feature need to be implemented in a separate -post-processing script? For example, for LaTeX documents I use a script called -`cleancites.pl` that looks for strings of multiple citations to shorten the -syntax. You could easily create a script to do whatever you like and -incorporate it into your work flow. - - -In summary, a great many features and customizations can be added to -MultiMarkdown by users. I also recommend that you consider sharing any of your -customizations back to the MultiMarkdown community - I am happy to put any -files or links on my site, if you are interested. - -## Where do I dig in the MultiMarkdown package to find out more? ## - - -Again, places to look for inspiration: - -* MultiMarkdown/bin - this is where the "glue" scripts live that manage - different MultiMarkdown workflow patterns. You can create your own shell - scripts that can add additional steps to your workflow here. - -* MultiMarkdown/Utilities - a couple of utility scripts and the - `cleancites.pl` post-processing script live here; you can add files here and - incorporate them into your work flow. - -* MultiMarkdown/XSLT - XSLT files for modifying XHTML files or creating LaTeX - files go here. Lots of examples for different styles of output or - customizing the way various features work. - -* <http://fletcherpenney.net/XSLT_Files> - this is where I will place various - user submitted files that may be of interest, or offer a starting point for - further customization. Please consider submitting your own improvements here - as well. - -# Component Software # - -The MultiMarkdown system is actually a patchwork of multiple programs, which -are run in a specific order by shell scripts. I have written the glue -utilities, and the MultiMarkdown modifications to John Gruber's original -Markdown program, but I can't take credit for the rest. - - -## MultiMarkdown [MMD] ## - -* by Fletcher T. Penney -* <http://fletcherpenney.net/MultiMarkdown> - -MultiMarkdown is my update to John Gruber's -[Markdown](http://daringfireball.net/projects/markdown/) software. It is what -this bundle is based on. To learn more about why you would want to use this -bundle, check out the web page for MultiMarkdown. - -## SmartyPants ## - -* by John Gruber -* <http://daringfireball.net/projects/smartypants/> - -SmartyPants is another program by John Gruber, and is designed to add "smart" -typography to HTML documents, including proper quotes, dashes, and ellipses. -Additionally, there are several variations of the SmartyPants files to handle -different localizations (specifically, Dutch, French, German, and Swedish). -These localizations were provided by Joakim Hertze. - -## Text::ASCIIMathML ## - -* by Mark Nodine -* <http://search.cpan.org/~nodine/> - -This perl module adds support for converting the ASCIIMathML syntax into -MathML markup suitable for inclusion in XHTML documents. - -## ASCIIMathPHP (Deprecated)## - -* by Kee-Lin Steven Chan -* <http://www.jcphysics.com/ASCIIMath/> - -This bundle includes the MultiMarkdown specific variant of the original -ASCIIMathPHP. It allows you to use the ASCIIMath syntax to describe -mathematical formulas in plain text language. - -This software has been replaced by Text::ASCIIMathML. - -## XSLTMathML ## - -* by Vasil Yaroshevich -* <http://www.raleigh.ru/MathML/mmltex/index.php?lang=en> - -This bundle includes the MultiMarkdown specific variant of the original -XSLTMathML. It converts XHTML with MathML markup into LaTeX math environment -code. Very handy for making well typeset documents that are math-heavy. - -# Applications That Support MultiMarkdown # - -There are several applications and utilities out there that include support -for MultiMarkdown, that can make it even easier to create your output -documents. - -If you know of something not included here, please let me know. - - -## Movable Type ## - -MultiMarkdown can be used with Movable Type. To install: - -1. Place `MultiMarkdown.pl` in the `mt/plugins/Markdown` directory -2. Copy `ASCIIMathML.pm` into the same directory -3. Make sure `SmartyPants.pl` is also there - -Now MultiMarkdown should be working with Movable Type. For some reason, -however, it seems somewhat temperamental at times. I haven't been able to -figure out why, but it works for me on my local machine and on my host's -server. It has also worked for other users. - - -## MultiMarkdown Drag and Drop ## - -Early on, as MultiMarkdown became increasingly powerful (and complex) I -realized that most people would want something a little easier to use than -what had become a rather complicated command line string. - -The first solution was a set of Drag and Drop applications created using -[Platypus]. These were designed to allow you to drop a MultiMarkdown text file -on the application icon, and they spit out a .xhtml, .pdf, .rtf, or .tex file, -depending on which application you used. - -These utilities are still available, and have been updated to work with the -"Common" MultiMarkdown Installation: - -* <http://files.fletcherpenney.net/MultiMarkdownDragAndDrop.zip> - - -[Platypus]: http://sveinbjorn.sytes.net/platypus "Platypus Homepage" - -## Scrivener ## - -[Scrivener] is a: - -> ... project management tool for writers that acts like your own -> little writing shed at the bottom of the garden, where you have -> cork notice-boards, ring-binders, photos, clippings paperclipped -> to jottings, notebooks and reams of typewritten pages piling up -> - along with a secretary who keeps it all in neat piles and uses -> his speed-reading skills to find what you need as soon as you need -> it. [#Blount][] - -As of beta 3, Scrivener has the ability to export to a MultiMarkdown text -file, or to run the conversion utilities to create XHTML, RTF, or LaTeX files. -It also has support for MultiMarkdown metadata. - -Scrivener's strengths, as they relate to MultiMarkdown, included the ability -to arrange and re-arrange your document as desired using its outliner view, -cork-board, and other features. It also has some limited ability to convert -RTF bold and italic formatting into MultiMarkdown syntax, which can be useful -when converting documents from other formats. - -Scrivener is primarily focused towards creative writing, but when combined -with MultiMarkdown it is very useful for academic and technical writing where -a LaTeX file is highly desirable. - -Keith Blount has done a great job with Scrivener, and I was happy to be able -to help implement support for MultiMarkdown. I look forward to helping to -continue to use and refine this program myself. - -At this time, Scrivener is in public beta, and should be available for -purchase towards the end of 2006 or beginning of 2007. But the beta is very -usable as is, and gives you until Jan 2007 or so to try it out. - -For more information, I have created a User's Guide to MultiMarkdown and -Scrivener: - -* <http://fletcherpenney.net/Using_MultiMarkdown_with_Scrivener> - -[#Blount]: Literate and Latte - Scrivener. -<http://www.literatureandlatte.com/scrivener.html> - -## OmniOutliner ## - -I have written an export plugin for OmniOutliner that allows you to craft your -MultiMarkdown documents within OmniOutliner, and then export to a text file -(or folder with text file and images), that can then be processed with -Markdown or MultiMarkdown. - -<http://fletcherpenney.net/multimarkdown/multimarkdown_and_omnioutliner/> - -## TextMate ## - -[TextMate][] is a powerful text editor that: - -> brings Apple's approach to operating systems into the world of text -> editors. By bridging UNIX underpinnings and GUI, TextMate cherry-picks -> the best of both worlds to the benefit of expert scripters and novice -> users alike.... - -> Created by a closet UNIX geek who was lured to the Mac platform by -> its ease of use and elegance, TextMate has been referred to as the -> culmination of Emacs and OS X and has resulted in countless requests -> for both a Windows and Linux port, but TextMate remains exclusive for -> the Mac, and that is how we like it![#macromates][] - -TextMate is somewhere between a text editor for programmers, and a writing -tool. If you like being able to customize your writing environment, and like -fancy tools to handle the formatting for you, then TextMate might be the app -for you. - -Allan Odgaard created an initial Bundle that added Markdown support to -TextMate. It included some basic MultiMarkdown support as well. But to be -honest, *I* had trouble getting it to work. And if I had difficulty, I can -only imagine how much trouble others had. - -So I created my own Bundle. It includes a lot of features that automatically -format metadata, lists, tables, headers, etc. It can clean up the text to make -it look as presentable as possible in plain text, and it can then -automatically convert your text into XHTML, RTF, Word, or LaTeX/PDF. - -I have subsequently rewritten this bundle as a fork of the original on github. -This should make it easier to incorporate changes, and possibly to merge the -two projects into a single bundle. - -* <http://fletcher.github.com/markdown.tmbundle/> - - -[#macromates]: TextMate --- The Missing Editor for Mac OS X. -<http://macromates.com/> - - -## Using Scrivener and TextMate Together ## - -It is possible, using the "Edit in TextMate" feature from TextMate. Basically, -it adds the ability to edit any Cocoa based text editor view in TextMate. This -allows you to edit the text from a Scrivener document in TextMate, in order to -take advantage of the automatic formatting, while still retaining the -organizational features of Scrivener. - -This feature has its limitations (it breaks the undo stack in Scrivener) and -is only for advanced users. I take no responsibility for it, as I didn't write -Scrivener or TextMate. But it can be useful... - -To learn more, check out the information on Cocoa Text Fields: - -* <http://macromates.com/textmate/manual/using_textmate_from_terminal> - -## The "Common" MultiMarkdown approach ## - -During beta testing of the MultiMarkdown support with Scrivener, it was -proposed that having a standard location for MultiMarkdown could make it easy -to integrate with various applications, and to allow the user a single place -to update their MultiMarkdown files, independent of the application it was -being used with. - -For Mac OS X users, this boils down to allowing a MultiMarkdown installation -to be placed in one of two locations, where it is available to any application -that knows to look for it there: - -* ~/Library/Application Support/MultiMarkdown - -* /Library/Application Support/MultiMarkdown - -The first is available only to the user, and the second is available to anyone -on that computer. - -When Scrivener, or another application that supports this feature is run, it -checks to see if a MultiMarkdown installation is available in either of those -places. If not (the first time you run the program, for instance), then some -programs might install a version of MultiMarkdown here; others might simply -use an a copy of MultiMarkdown embedded within the application bundle. - -The benefit of this approach is that if I update MultiMarkdown, you can simply -replace the updated files in the Application Support folder, without having to -update the other applications. - -Please let me know if you have suggestions on improving this feature, or if -you are interested in including support for MultiMarkdown in your own -application. - -Naturally, this approach only works with Mac OS X. If anyone is interested in -working on a similar feature for other operating systems, please let me know. - -## Create Your Own ## - -Between shell scripts, applescripting, Automator, and other tools, you can -usually find an easy way to incorporate MultiMarkdown into your own workflow. -If you find something that you think should be added here, let me know! - - - -# Technical Issues # - -The MultiMarkdown system is actually a fairly complex group of programs, which -includes multiple perl utilities, a PHP program, and multiple XSLT files. With -some hand waving, I try to make it look like a single coherent program, but it -actually uses multiple utilities written by multiple people. - -This section is designed to address some of these issues, and implications -they may have for users, programmers, etc. - - -## XML Namespace Issues ## - -As of version 2.0.a3, there has been a complete overhaul of the way XML -namespaces are handled. This required changing all of the XSLT files to use an -"html" alias for the "http://www.w3.org/1999/xhtml" namespace. - -It appears to be working, including support for MathML. - -If you have any custom XSLT files, you will need to make the same changes, -specifically: - -Make your stylesheet declaration look like: - - <xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - -And relabel any references to XHTML elements, so that they are preceeded by "html:", e.g. - - <xsl:template match="/"> - <xsl:apply-templates select="html/head"/> - <xsl:apply-templates select="html/body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - -should look like this: - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - -I have left the `-novalid` and `-nonet` options in place to prevent -unnecessary errors when you are not connected to the internet, but these could -be removed if desired. - -## XeLaTeX Tips ## - -If you are using XeLaTeX to process your document (useful for utilizing Mac OS X fonts in your document), you want to use font declarations like this: - - \font\addressbold="Garamond Bold:mapping=tex-text" at 8pt - -By including the ":mapping=tex-text" portion, you regain use of smart quotes, en- and em- dashes, etc. I'm sure most XeLaTeX users know this, but it took me a bit of trial and error to discover it.... - - -# Acknowledgments # - -Thanks to the individuals and groups below for their contributions to -improving Markdown and MultiMarkdown: - -* John Gruber -* Michel Fortin -* Jonathan Weber -* Mark Eli Kalderon -* Choan C. Gálvez -* Dr. Drang -* Robert McGonegal -* David Green -* Trey Pickard -* Saleem -* Melinda Norris -* Sean Wallace -* Allan Odgaard -* Stefan Brantschen -* Keith Blount -* Amber Vaesca -* Gerd Knops -* John Purnell -* Jonathan Coulombe -* Jason Bandlow -* Joakim Hertze -* Kee-Lin Steven Chan -* Vasil Yaroshevich -* Matt Neuburg -* James Howison -* Edward Nixon -* etherean -* Özgür Gökmen -* Chad Schmidt -* Greg (gr) -* Ben Jennings -* Silvan Kaiser -* Tomas Doran -* Rob Walton -* Dan Rolander -* Duoyi wu -* Dan Dascalescu -* Ingolf Schäfer -* Chris Bunch -* Oblomov -* Alex Melhuish -* Stephan Mueller -* Josh Brown -* Rob Person -* Matthew D. Rankin - -and others I have surely forgotten.... - - - -# Known Issues # - -* The `<<...>>` syntax can cause only the first `<` to be encoded as `<` if - there is no trailing space (e.g. `<<something>>` vs. `<< something >>`). I - suspect that I will have to manually look for any `<<` and convert them. I - guess this is technically an issue with Markdown and not MultiMarkdown, but - it has apparently not come up before. - -* I tried to remove dependence on the `varwidth` package. This screws up the - formatting of footnotes in tables, and also RTF exporting of tables. I'm not - sure what to do - varwidth is incompatible with xcolor and is not a standard - package. Suggestions welcome. - -* Creating a link to an image by label doesn't work properly anymore - -* I'm having difficulty with getting the glossary feature to work in the - non-memoir classes. At some point I will look into this, but if someone else - out there can point out what I'm doing wrong, let me know. - -* RTF support currently only exists for Mac OS X. Conversion from XHTML to RTF - happens via Apples `textutil` tool. It is possible to write an XSLT file - that converts from XHTML to RTF, but I have little to no interest in - writing this myself, as I don't really use the RTF format very often. If - someone were interested in developing this, I would help out. An added - benefit would be that the XSLT could actually do a better job than Apple's - tool in terms of footnote support and internal links. Contact me if - you're interested. In the meantime, I suggest using [Google Docs][] to - import the XHTML file, and then export as an RTF. It does a much better - job. - -* The sample MMD file creates two copies of the footnote in the `MultiMarkdown - vs. Crayons` table, even though I only call for one. Not sure where the `a` - footnote comes from.... Any help in tracking this down would be appreciated, - as it didn't used to do this. - - -[Google Docs]: http://docs.google.com/ - - -# Things to Do # - -* Add a syntax to allow comments that can be stripped before passing the - output to the parser - -* write a routine (that would be separate from MultiMarkdown) to download - linked images, save them to a tmp directory, and then convert them for use - within a pdf. - -* Decide on appropriate management of alignment when a cell spans multiple - columns. Currently, the alignment of the first cell is used. (If Markdown - goes to a whitespace-based alignment option, that could be used in this - instance.) - -* Consider whether there is a reasonable syntax for table cells that span - multiple rows. - -* Consider a syntax for superscripts (this has been discussed before) - could - convert it to MathML syntax? Or just use math markup instead as described in - [Superscripts]. - -* Certain markup gets processed within headers and shouldn't, e.g. `<img>` - -* Consider whether to incorporate the definition list syntax into a footnote - to specify a glossary entry (or perhaps even without the footnote), or - whether to leave well enough alone. - - -# Version History # - -> Release early, release often! -> > Linus Torvalds - -* 2.0.b6 - Fix support for base header level with Setext-style headers (thanks - to Rob Walton); improve Windows support; - -* 2.0.b5 - spaces at end of xslt filenames won't cause failure; use `\url{}` - for "non-referenced" url's in LaTeX to allow linebreaks (though they still - don't always break correctly --- this is a problem with `hyperref` not MMD); - don't convert `^` to exponents in the `clean-text-allow-latex.xslt` file so - that math code works properly; the S5 XSLT file at least partially works - again now; update the TextMate bundle to work with Leopard; updated the - envelope and letterhead files; include `6x9book-real-poetry` XSLT that uses - memoir's poetry features fairly well; rework the `clean-text` files to make - them easier to update in the future and more modular; XHTML comments are now - passed through as raw LaTeX; unescape encoding within comments; - -* 2.0.b4 - empty labels for headers now produce valid XHTML (e.g. no `id=""`); - fix bug in `clean-text.xslt` that caused a problem with closing double - quotes; the `.xslt` extension is no longer required in metadata; added - customizable letterhead XSLT; fix bug in table support that choked on extra - spaces at end of lines; *Major Change*: switched to Text::ASCIIMathML for - math support, meaning that everything is once again perl based (this enables - math features on web sites using MultiMarkdown, for example); fix bug that - occurred when 'Abstract' was not the first chapter; - -* 2.0.b3 - move the `clean-text` routine from `xhtml2latex.xslt` into it's own - file (to allow easier modification by users); create alternate version that - does not protect certain characters in order to allow raw LaTeX code to be - passed through; added `latex-snippet.xslt` stylesheet for inclusion in - outside LaTeX template systems; added `xhtml-poetry-support.xslt` and - `xhtml-toc.xslt` to demonstrate how to extend MMD functionality for XHTML - output with new system; fix bug in SmartyPants that processed typography - within `<style>` sections (thanks AmberV); fix handling of links by - reference in headers and handling of attributes when links are referenced - multiple times (thanks to Edward Nixon); fix bug in epigraphs (thanks - etherean); improve id generation for footnotes - e.g. match behavior of PHP - Markdown Extra (thanks to Özgür Gökmen); fix bug in id generation for ToC - for XHTML documents; fix problem with `\ldots` command (thanks to etherean - and James Howison); fix issue with ` ` and tilde character; fix bug - where footnote special characters were not unescaped (thanks to Chad - Schmidt); clean up documentation a bit; - -* 2.0.b2 - fix processing of footnotes so that ending in a blockquote doesn't - break validity; fix bug in `letter.xslt`; overhaul XSLT system to allow for - different XSLT files for different output formats (e.g. HTML, RTF, LaTeX); - -* 2.0.b1 - fix bug in `_StripLinkDefinitions` that prevented detection of - single character labels; change `\textwidth` to `\linewidth` in LaTeX export - XSLT files (let me know if this causes problems); add Windoze compatibility - to the perl scripts (thanks to Jason Bandlow for pointing out this problem, - as well as for suggesting a fix);fix issues with glossary support and - document the process; complete overhaul of the way namespaces are handled - (`stripnamespace.pl` is no longer needed, XSLT files are rewritten, `-nonet` - and `-novalid` should be optional for xsltproc); update the Drag and Drop - applications to use the "Common" MMD Installation; update to Markdown - 1.0.2b8 codebase; add support for natbib and `\citep` and `\citet`; - -* 2.0.a2 - fix some minor problems with XSLTMathML; allow math to be enclosed - in parentheses; change matching for bottomrule in tables; improve handling - of tables with no header row (only a header column); - -* 2.0.a1 - strip spaces from metadata keys for XHTML validity; make XHTML - footnote output more compatible with Gruber's website and PHP Markdown - Extra; update XSLT to address these changes (*Note*: this breaks - compatibility with prior versions); add support for definition lists; fix - bug when escaping WikiWords in code; add `XHTML Header` metadata, and update - XSLT to ignore `<style>` tags; add support for the `XSLT File` metadata tag, - which allows a single command to parse any MultiMarkdown file; add - additional XSLT files; add the multimarkdown2XHTML.pl and related commands; - article XSLT now uses the article option in memoir, rather than the article - class; delete the report class (use memoir instead); fix a **lot** of - "minor" bugs; add the "6x9book.xslt" option; allow custom cross-reference - labels to headers; give preference to defined links over automatic - cross-references; add "poetry" versions of several XSLT files (treat code - blocks as formatted text, rather than code --- useful for formatting poetry) - -* 2.0.a - New version numbering scheme; update to Markdown.pl 1.0.2b7 code; - add support for `[link reference]` shortcut syntax (i.e. no trailing `[]`) - for MultiMarkdown crossrefs; add an extra newline in verbatims to add space - before the next paragraph; synchronize numbering schemes of all related - MultiMarkdown tools to make it easier to ensure compatibility; add revision - numbers to source documents to help track incompatibilities; add LaTeX - support for `i.e.` and `e.g.`; TextMate MultiMarkdown bundle available; - update MultiMarkdownDragAndDrop tools to new codebase; now distributed as a - zipfile. - -* 1.0.1Multi19.4 - major update; fix issue where cross-references to images - defined by alt text had to follow the image in the document; add support for - MathML via ASCIIMathPHP; change `name` to `id` for footnotes; move - _DoHeaders in front of _DoTables to allow cross-references inside tables; - fix handling of citations without locator; a table with no header titles and - no column alignment row is interpreted as a pull-quote - this is - experimental and may be changed; the `Bibliography Title` metadata field is - available for LaTeX to rename the bibliography section; multiple changes to - XSLT files to improve compatibility; support for `<< math >>` syntax using - ASCIIMathPHP; change `HeaderLevel` to `Base Header Level` and process it in - XSLT rather than in the OmniOutliner tool; support for `Affiliation` - metadata element; add equation label to possible cross-reference list; - compatible with epigraph feature for XSLT conversion to LaTeX; document - table labeling feature and default to caption if no label present; - -* 1.0.1Multi19.2 - require leading space before unescaping \WikiWord; fixed - bug where attributes not included with images; add `Bibliography Title` - metadata key; fix bug with invalid leading characters in header id - attributes; allow '-' and '_' in metadata; fix handling of citations in - footnotes; fix issue with quotes in link attributes. - -* 1.0.1Multi19.1 - minor change to bibliography formatting to allow - translation into a \BibTeX compatible format *without* the use of a `.bib` - file; - -* 1.0.1Multi19 - Major update; fix bugs discovered by testing with - MarkdownTest 1.0; don't add leading blank line if no metadata exists; fix - parsing of link definitions, including attribute parsing; various clean- ups - to code and documentation; improve cross-reference handling of special - characters; fix bug in handling of wiki links (`/` is not automatically - added any more); fix bug in `title` attributes of images; re-enable the - inclusion of `DOCTYPE` in complete documents (this requires the use of the - `-nonet` and `-novalid` options in xsltproc; fix bug in handling of `**`; - fix bug where WikiWords in code blocks and spans were not unescaped; fix bug - where digits were not allowed in metadata keys; fix numbering of footnotes - so that they remain in proper order; add basic citation and bibliography - features; major bug fixes and testing to precede the release of version 20 - (2.0) - -* 1.0.1Multi18 - further work to make WikiWord escaping work properly... - -* 1.0.1Multi17 - add support for "char" alignment in table columns (**NOTE**: - browsers do not currently support this); fix bug with `\` in code spans when - WikiWords are disabled; fix bug in bold/italic detection - -* 1.0.1Multi16 - can now optionally have header in first cell of each row; fix - bug in footnote counting (thanks to Mark Eli Kalderon for pointing this - out); - -* 1.0.1Multi15 - allow for multiple `<tbody>` span's within a table; ensure - that the variable`$g_empty_element_suffix` is used everywhere; protect code - spans from table parsing - -* 1.0.1Multi14 - captions can now be before or after table; add syntax for - column spanning within tables (body and header) - -* 1.0.1Multi13 - added support for CSS metadata key; allow no alignment option - on table cells; support for captions for tables - -* 1.0.1Multi12 - added support for image/link attributes; fixed bug in table - handling - -* 1.0.1Multi11 - added support for table syntax - -* 1.0.1Multi10 - allow emphasis at beginning of line - -* 1.0.1Multi9 - fix bug in metadata parsing - -* 1.0.1Multi8 - first draft of fix for "underscore within a word" problem that - causes so many errors with URL's. Now a leading whitespace is required in - front of the "opening" `_` or `*` for it to be interpreted as emphasis or - strong. - -* 1.0.1Multi7 - add Wiki Links support - -* 1.0.1Multi6 - correct bug in footnote id handling (Thanks to Jonathan Weber - for pointing this out) - -* 1.0.1Multi5 - allow disabling of metadata feature - -* 1.0.1Multi4 - convert `©` entities to `©` (compatible with XSLT); - generate cross-refs for images - -* 1.0.1Multi3 - fix metadata parsing in the event a key was empty - -* 1.0.1Multi2 - add support for footnotes. **Major** change - no longer use - templates, but rather will focus on using XSLT to convert from XHTML output - to other formats. I think this will be more flexible and less error prone. - -* 1.0.1M - initial release - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/SmartyPants Readme.txt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/SmartyPants Readme.txt deleted file mode 100755 index 8ad3b3e6..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Documentation/SmartyPants Readme.txt +++ /dev/null @@ -1,681 +0,0 @@ -SmartyPants -=========== - -by John Gruber -http://daringfireball.net/ - -Version 1.5.1 - Fri 12 Mar 2004 - - -SmartyPants is a free web publishing plug-in for Movable Type, Blosxom, -and BBEdit that easily translates plain ASCII punctuation characters -into "smart" typographic punctuation HTML entities. SmartyPants can also -be invoked as a standalone Perl script. - -SmartyPants can perform the following transformations: - -* Straight quotes (`"` and `'`) into "curly" quote HTML entities - -* Backtick-style quotes (` ``like this'' `) into "curly" quote HTML - entities - -* Dashes (`--` and `---`) into en- and em-dash entities - -* Three consecutive dots (`...`) into an ellipsis entity - -This means you can write, edit, and save your posts using plain old -ASCII straight quotes, plain dashes, and plain dots, but your published -posts (and final HTML output) will appear with smart quotes, em-dashes, -and proper ellipses. - -SmartyPants is a combination plug-in -- the same file works with Movable -Type, Blosxom, and BBEdit. It can also be used from a Unix-style -command-line. Version requirements and installation instructions for -each of these tools can be found in the corresponding sub-section under -"Installation", below. - -SmartyPants does not modify characters within `<pre>`, `<code>`, -`<kbd>`, or `<script>` tag blocks. Typically, these tags are used to -display text where smart quotes and other "smart punctuation" would not -be appropriate, such as source code or example markup. - - -### Backslash Escapes ### - -If you need to use literal straight quotes (or plain hyphens and -periods), SmartyPants accepts the following backslash escape sequences -to force non-smart punctuation. It does so by transforming the escape -sequence into a decimal-encoded HTML entity: - - - Escape Value Character - ------ ----- --------- - \\ \ \ - \" " " - \' ' ' - \. . . - \- - - - \` ` ` - - -This is useful, for example, when you want to use straight quotes as -foot and inch marks: - - 6\'2\" tall - -translates into: - - 6'2" tall - -in SmartyPants's HTML output. Which, when rendered by a web browser, -looks like: - - 6'2" tall - - -### Markdown and MT-Textile Integration ### - -Movable Type users should also note that SmartyPants can be used in -conjunction with two text filtering plug-ins: [Markdown] [1] and Brad -Choate's [MT-Textile] [2]. - - [1]: http://daringfireball.net/projects/markdown/ - [2]: http://www.bradchoate.com/mt-plugins/textile - -Markdown is my text-to-HTML filter, and is intended to be an -easy-to-write and easy-to-read structured text format for writing for -the web. You write plain text; Markdown turns it into HTML. This readme -file is formatted in Markdown. - -When Markdown and SmartyPants are both present in the same Movable Type -installation, the "Markdown With SmartyPants" filter will be available -from MT's Text Formatting pop-up menu. The "Markdown With SmartyPants" -filter automatically applies SmartyPants to the bodies of your entries; -the regular "Markdown" filter does not. See the Markdown web page for -more details. - -MT-Textile is a port of Dean Allen's original [Textile] [3] project to -Perl and Movable Type. MT-Textile by itself only translates Textile -markup to HTML. However, if SmartyPants is also installed, MT-Textile -will call on SmartyPants to educate quotes, dashes, and ellipses, -automatically. Textile is Dean Allen's "humane web text generator", -another easy-to-write and easy-to-read shorthand for web writing. An -[online Textile web application] [3] is available at Mr. Allen's site. - - [3]: http://textism.com/tools/textile/ - -Using SmartyPants in conjunction with MT-Textile or the "Markdown With -SmartyPants" filter requires no modifications to your Movable Type -templates. You simply choose the appropriate filter from the Text -Formatting menu, on a per-post basis. However, note that as of this -writing, Movable Type does not apply text filters to article titles or -excerpts; you'll need to edit your templates to get SmartyPants -processing for those fields. - -You'll also need to invoke SmartyPants from your templates if you want -to use non-default settings, such as en-dash support. For explicit -control, I recommend using the regular "Markdown" text filter, and -invoking SmartyPants from your templates. - - -Installation ------------- - -### Movable Type ### - -SmartyPants works with Movable Type version 2.5 or later. - -1. Copy the "SmartyPants.pl" file into your Movable Type "plugins" - directory. The "plugins" directory should be in the same directory - as "mt.cgi"; if it doesn't already exist, use your FTP program to - create it. Your installation should look like this: - - (mt home)/plugins/SmartyPants.pl - -2. If you're using SmartyPants with Markdown or MT-Textile, you're - done. - - If not, or if you want explicit control over SmartyPants's behavior, - you need to edit your MT templates. The easiest way is to add the - "smarty_pants" attribute to each MT template tag whose contents you - wish to apply SmartyPants's transformations. Obvious tags would - include `MTEntryTitle`, `MTEntryBody`, and `MTEntryMore`. - SmartyPants should work within any MT content tag. - - For example, to apply SmartyPants to your entry titles: - - <$MTEntryTitle smarty_pants="1"$> - - The value passed to the `smarty_pants` attribute specifies the way - SmartyPants works. See "Options", below, for full details on all of - the supported options. - - -### Blosxom ### - -SmartyPants works with Blosxom version 2.0 or later. - -1. Rename the "SmartyPants.pl" plug-in to "SmartyPants" (case is - important). Movable Type requires plug-ins to have a ".pl" - extension; Blosxom forbids it (at least as of this writing). - -2. Copy the "SmartyPants" plug-in file to your Blosxom plug-ins folder. - If you're not sure where your Blosxom plug-ins folder is, see the - Blosxom documentation for information. - -3. That's it. The entries in your weblog should now automatically have - SmartyPants's default transformations applied. - -4. If you wish to configure SmartyPants's behavior, open the - "SmartyPants" plug-in, and edit the value of the `$smartypants_attr` - configuration variable, located near the top of the script. The - default value is 1; see "Options", below, for the full list of - supported values. - - -### BBEdit ### - -SmartyPants works with BBEdit 6.1 or later on Mac OS X; and BBEdit 5.1 -or later on Mac OS 9 or earlier (provided you have MacPerl installed). - -1. Copy the "SmartyPants.pl" file to appropriate filters folder in your - "BBEdit Support" folder. On Mac OS X, this should be: - - BBEdit Support/Unix Support/Unix Filters/ - - On Mac OS 9 or earlier, this should be: - - BBEdit Support:MacPerl Support:Perl Filters: - - See the BBEdit documentation for more details on the location of - these folders. - - You can rename "SmartyPants.pl" to whatever you wish. - -2. That's it. To use SmartyPants, select some text in a BBEdit - document, then choose SmartyPants from the Filters sub-menu or the - Filters floating palette. On Mac OS 9, the Filters sub-menu is in - the "Camel" menu; on Mac OS X, it is in the "#!" menu. - -3. If you wish to configure SmartyPants's behavior, open the SmartyPants - file and edit the value of the `$smartypants_attr` configuration - variable, located near the top of the script. The default value is - 1; see "Options", below, for the full list of supported values. - - -### Perl ### - -SmartyPants works as a standalone Perl script. You can invoke it from a -Unix-style command line, passing input as a file argument or as piped -input via STDIN. See the POD documentation for information on the -command-line switches SmartyPants accepts. - - -Options and Configuration -------------------------- - -For MT users, the `smarty_pants` template tag attribute is where you -specify configuration options. For Blosxom and BBEdit users, settings -are specified by editing the value of the `$smartypants_attr` variable in -the script itself. - -Numeric values are the easiest way to configure SmartyPants's behavior: - -"0" - Suppress all transformations. (Do nothing.) - -"1" - Performs default SmartyPants transformations: quotes (including - backticks-style), em-dashes, and ellipses. `--` (dash dash) is - used to signify an em-dash; there is no support for en-dashes. - -"2" - Same as smarty_pants="1", except that it uses the old-school - typewriter shorthand for dashes: `--` (dash dash) for en-dashes, - `---` (dash dash dash) for em-dashes. - -"3" - Same as smarty_pants="2", but inverts the shorthand for dashes: `--` - (dash dash) for em-dashes, and `---` (dash dash dash) for en-dashes. - -"-1" - Stupefy mode. Reverses the SmartyPants transformation process, - turning the HTML entities produced by SmartyPants into their ASCII - equivalents. E.g. `“` is turned into a simple double-quote - (`"`), `—` is turned into two dashes, etc. This is useful if you - are using SmartyPants from Brad Choate's MT-Textile text filter, but - wish to suppress smart punctuation in specific MT templates, such as - RSS feeds. Text filters do their work before templates are - processed; but you can use smarty_pants="-1" to reverse the - transformations in specific templates. - -The following single-character attribute values can be combined to -toggle individual transformations from within the smarty_pants -attribute. For example, to educate normal quotes and em-dashes, but not -ellipses or backticks-style quotes: - - <$MTFoo smarty_pants="qd"$> - -"q" - Educates normal quote characters: (`"`) and (`'`). - -"b" - Educates ` ``backticks'' ` double quotes. - -"B" - Educates backticks-style double quotes and ` `single' ` quotes. - -"d" - Educates em-dashes. - -"D" - Educates em-dashes and en-dashes, using old-school typewriter - shorthand: (dash dash) for en-dashes, (dash dash dash) for - em-dashes. - -"i" - Educates em-dashes and en-dashes, using inverted old-school - typewriter shorthand: (dash dash) for em-dashes, (dash dash dash) - for en-dashes. - -"e" - Educates ellipses. - -"w" - Translates any instance of `"` into a normal double-quote - character. This should be of no interest to most people, but of - particular interest to anyone who writes their posts using - Dreamweaver, as Dreamweaver inexplicably uses this entity to - represent a literal double-quote character. SmartyPants only - educates normal quotes, not entities (because ordinarily, entities - are used for the explicit purpose of representing the specific - character they represent). The "w" option must be used in - conjunction with one (or both) of the other quote options ("q" or - "b"). Thus, if you wish to apply all SmartyPants transformations - (quotes, en- and em-dashes, and ellipses) and also translate - `"` entities into regular quotes so SmartyPants can educate - them, you should pass the following to the smarty_pants attribute: - - <$MTFoo smarty_pants="qDew"$> - - For Blosxom and BBEdit users, set: - - my $smartypants_attr = "qDew"; - - -### Deprecated MT Attributes ### - -Older versions of SmartyPants supplied optional `smart_quotes`, -`smart_dashes`, and `smart_ellipses` MT template attributes. These -attributes are now officially deprecated. - - -### Version Info Tag ### - -If you include this tag in a Movable Type template: - - <$MTSmartyPantsVersion$> - -it will be replaced with a string representing the version number of the -installed version of SmartyPants, e.g. "1.5". - - -Caveats -------- - -### Why You Might Not Want to Use Smart Quotes in Your Weblog ### - -For one thing, you might not care. - -Most normal, mentally stable individuals do not take notice of proper -typographic punctuation. Many design and typography nerds, however, -break out in a nasty rash when they encounter, say, a restaurant sign -that uses a straight apostrophe to spell "Joe's". - -If you're the sort of person who just doesn't care, you might well want -to continue not caring. Using straight quotes -- and sticking to the -7-bit ASCII character set in general -- is certainly a simpler way to -live. - -Even if you *do* care about accurate typography, you still might want to -think twice before educating the quote characters in your weblog. One -side effect of publishing curly quote HTML entities is that it makes -your weblog a bit harder for others to quote from using copy-and-paste. -What happens is that when someone copies text from your blog, the copied -text contains the 8-bit curly quote characters (as well as the 8-bit -characters for em-dashes and ellipses, if you use these options). These -characters are not standard across different text encoding methods, -which is why they need to be encoded as HTML entities. - -People copying text from your weblog, however, may not notice that -you're using curly quotes, and they'll go ahead and paste the unencoded -8-bit characters copied from their browser into an email message or -their own weblog. When pasted as raw "smart quotes", these characters -are likely to get mangled beyond recognition. - -That said, my own opinion is that any decent text editor or email client -makes it easy to stupefy smart quote characters into their 7-bit -equivalents, and I don't consider it my problem if you're using an -indecent text editor or email client. - -### Algorithmic Shortcomings ### - -One situation in which quotes will get curled the wrong way is when -apostrophes are used at the start of leading contractions. For example: - - 'Twas the night before Christmas. - -In the case above, SmartyPants will turn the apostrophe into an opening -single-quote, when in fact it should be a closing one. I don't think -this problem can be solved in the general case -- every word processor -I've tried gets this wrong as well. In such cases, it's best to use the -proper HTML entity for closing single-quotes (`’` or `’`) by -hand. - - -Bugs ----- - -To file bug reports or feature requests (other than topics listed in the -Caveats section above) please send email to: - - smartypants@daringfireball.net - -If the bug involves quotes being curled the wrong way, please send -example text to illustrate. - - -Version History ---------------- - -1.5.1: Fri 12 Mar 2004 - -* Fixed a goof where if you had SmartyPants 1.5.0 installed, - but didn't have Markdown installed, when SmartyPants checked - for Markdown's presence, it created a blank entry in MT's - global hash of installed text filters. This showed up in MT's - Text Formatting pop-up menu as a blank entry. - - -1.5: Mon 29 Dec 2003 - -* Integration with Markdown. If Markdown is already loaded - when SmartyPants loads, SmartyPants will add a new global - text filter, "Markdown With Smartypants". - -* Preliminary command-line options parsing. -1 -2 -3 - -v -V - -* dot-space-dot-space-dot now counts as an ellipsis. - This is the style used by Project Gutenberg: - http://www.gutenberg.net/faq/index.shtml#V.110 - (Thanks to Fred Condo for the patch.) - -* Added `<math>` to the list of tags to skip (pre, code, etc.). - - -1.4.1: Sat 8 Nov 2003 - -* The bug fix from 1.4 for dashes followed by quotes with no - intervening spaces now actually works. - -* ` ` now counts as whitespace where necessary. (Thanks to - Greg Knauss for the patch.) - - -1.4: Mon 30 Jun 2003 - -* Improved the HTML tokenizer so that it will parse nested <> pairs - up to five levels deep. Previously, it only parsed up to two - levels. What we *should* do is allow for any arbitrary level of - nesting, but to do so, we would need to use Perl's `??` construct - (see Fried's "Mastering Regular Expressions", 2nd Ed., pp. - 328-331), and sadly, this would only work in Perl 5.6 or later. - SmartyPants still supports Perl 5.00503. I suppose we could test - for the version and build a regex accordingly, but I don't think - I want to maintain two separate patterns. - -* Thanks to Stepan Riha, the tokenizer now handles HTML comments: - - <!-- comment --> - - and PHP-style processor instructions: - - <?php code ?> - -* The quote educator now handles situations where dashes are used - without whitespace, e.g.: - - "dashes"--without spaces--"are tricky" - -* Special case for decade abbreviations like this: `the '80s`. - This only works for the sequence appostrophe-digit-digit-s. - - -1.3: Tue 13 May 2003 - -* Plugged the biggest hole in SmartyPants's smart quotes algorithm. - Previous versions were hopelessly confused by single-character - quote tokens, such as: - - <p>"<i>Tricky!</i>"</p> - - The problem was that the EducateQuotes() function works on each - token separately, with no means of getting surrounding context - from the previous or next tokens. The solution is to curl these - single-character quote tokens as a special case, *before* calling - EducateQuotes(). - -* New single-quotes backtick mode for smarty_pants attribute. - The only way to turn it on is to include "B" in the configuration - string, e.g. to translate backtick quotes, dashes, and ellipses: - - smarty_pants="Bde" - -* Fixed a bug where an opening quote would get curled the wrong way - if the quote started with three dots, e.g.: - - <p>"...meanwhile"</p> - -* Fixed a bug where opening quotes would get curled the wrong way - if there were double sets of quotes within each other, e.g.: - - <p>"'Some' people."</p> - -* Due to popular demand, four consecutive dots (....) will now be - turned into an ellipsis followed by a period. Previous versions - would turn this into a period followed by an ellipsis. If you - really want a period-then-ellipsis sequence, escape the first - period with a backslash: \.... - -* Removed `&` from our home-grown punctuation class, since it - denotes an entity, not a literal ampersand punctuation - character. This fixes a bug where SmartyPants would mis-curl - the opening quote in something like this: - - "…whatever" - -* SmartyPants has always had a special case where it looks for - "'s" in situations like this: - - <i>Custer</i>'s Last Stand - - This special case is now case-insensitive. - - -1.2.2: Thu Mar 13, 2003 - -* 1.2.1 contained a boneheaded addition which prevented SmartyPants - from compiling under Perl 5.005. This has been remedied, and is - the only change from 1.2.1. - - -1.2.1: Mon Mar 10, 2003 - -* New "stupefy mode" for smarty_pants attribute. If you set - - smarty_pants="-1" - - SmartyPants will perform reverse transformations, turning HTML - entities into plain ASCII equivalents. E.g. "“" is turned - into a simple double-quote ("), "—" is turned into two - dashes, etc. This is useful if you are using SmartyPants from Brad - Choate's MT-Textile text filter, but wish to suppress smart - punctuation in specific MT templates, such as RSS feeds. Text - filters do their work before templates are processed; but you can - use smarty_pants="-1" to reverse the transformations in specific - templates. - -* Replaced the POSIX-style regex character class `[:punct:]` with an - ugly hard-coded normal character class of all punctuation; POSIX - classes require Perl 5.6 or later, but SmartyPants still supports - back to 5.005. - -* Several small changes to allow SmartyPants to work when Blosxom - is running in static mode. - - -1.2: Thu Feb 27, 2003 - -* SmartyPants is now a combination plug-in, supporting both - Movable Type (2.5 or later) and Blosxom (2.0 or later). - It also works as a BBEdit text filter and standalone - command-line Perl program. Thanks to Rael Dornfest for the - initial Blosxom port (and for the excellent Blosxom plug-in - API). - -* SmartyPants now accepts the following backslash escapes, - to force non-smart punctuation. It does so by transforming - the escape sequence into a decimal-encoded HTML entity: - - Escape Value Character - ------ ----- --------- - \\ \ \ - \" " " - \' ' ' - \. . . - \- - - - \` ` ` - - Note that this could produce different results than previous - versions of SmartyPants, if for some reason you have an article - containing one or more of these sequences. (Thanks to Charles - Wiltgen for the suggestion.) - -* Added a new option to support inverted en- and em-dash notation: - `--` for em-dashes, `---` for en-dashes. This is compatible with - SmartyPants's original `--` syntax for em-dashes, but also allows - you to specify en-dashes. It can be invoked by using - smart_dashes="3", smarty_pants="3", or smarty_pants="i". - (Suggested by Aaron Swartz.) - -* Added a new option to automatically convert `"` entities into - regular double-quotes before sending text to EducateQuotes() for - processing. This is mainly for the benefit of people who write - posts using Dreamweaver, which substitutes this entity for any - literal quote char. The one and only way to invoke this option - is to use the letter shortcuts for the smarty_pants attribute; - the shortcut for this option is "w" (for Dream_w_eaver). - (Suggested by Jonathon Delacour.) - -* Added `<script>` to the list of tags in which SmartyPants doesn't - touch the contents. - -* Fixed a very subtle bug that would occur if a quote was the very - last character in a body of text, preceded immediately by a tag. - Lacking any context, previous versions of SmartyPants would turn - this into an opening quote mark. It's now correctly turned into - a closing one. - -* Opening quotes were being curled the wrong way when the - subsequent character was punctuation. E.g.: "a '.foo' file". - Fixed. - -* New MT global template tag: `<$MTSmartyPantsVersion$>` - Prints the version number of SmartyPants, e.g. "1.2". - - -1.1: Wed Feb 5, 2003 - -* The smart_dashes template attribute now offers an option to - use `--` for *en* dashes, and `---` for *em* dashes. - -* The default smart_dashes behavior now simply translates `--` - (dash dash) into an em-dash. Previously, it would look for - ` -- ` (space dash dash space), which was dumb, since many - people do not use spaces around their em dashes. - -* Using the smarty_pants attribute with a value of "2" will - do the same thing as smarty_pants="1", with one difference: - it will use the new shortcuts for en- and em-dashes. - -* Closing quotes (single and double) were incorrectly curled in - situations like this: - - "<a>foo</a>", - - where the comma could be just about any punctuation character. - Fixed. - -* Added `<kbd>` to the list of tags in which text shouldn't be - educated. - - -1.0: Wed Nov 13, 2002 - -* Initial release. - - -Author ------- - -John Gruber -http://daringfireball.net - - -Additional Credits ------------------- - -Portions of this plug-in are based on Brad Choate's nifty MTRegex -plug-in. Brad Choate also contributed a few bits of source code to this -plug-in. Brad Choate is a fine hacker indeed. (http://bradchoate.com/) - -Jeremy Hedley (http://antipixel.com/) and Charles Wiltgen -(http://playbacktime.com/) deserve mention for exemplary beta testing. - -Rael Dornfest (http://raelity.org/) ported SmartyPants to Blosxom. - - -Copyright and License ---------------------- - -Copyright (c) 2004 John Gruber -(http://daringfireball.net/) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "SmartyPants" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/README b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/README deleted file mode 100755 index a98ef86e..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/README +++ /dev/null @@ -1,103 +0,0 @@ -(NOTE: mmltex.xsl was modified slightly to put an `\equation` tag around -mathml that is in a paragraph by itself, as well as to allow labels for -equations -- Fletcher T. Penney) - -README for the XSLT MathML Library - -MultiMarkdown Version - 2.0.b6 - -XSLT MathML Library is a set of XSLT stylesheets to transform -MathML 2.0 to LaTeX. - -For more information, see -http://www.raleigh.ru/MathML/mmltex/index.php?lang=en - -Manifest --------- - -README this file -mmltex.xsl -tokens.xsl -glayout.xsl -scripts.xsl -tables.xsl -entities.xsl -cmarkup.xsl - -Use ---- - -There are two ways of using the library: - - * Use a local copy of the library. - - 1. Download the distribution (see below). - - 2. Unpack the distribution, using unzip. - - 3. In your stylesheet import or include either the main - stylesheet, mmltex.xsl, or the stylesheet module you - wish to use, such as tokens.xsl. This example assumes - that the distribution has been extracted into the same - directory as your own stylesheet: - - <xsl:import href="mmltex.xsl"/> - - * Import or include either the main stylesheet, or the - stylesheet module you wish to use, directly from the library - website; http://www.raleigh.ru/MathML/mmltex/. For example: - - <xsl:import href="http://www.raleigh.ru/MathML/mmltex/mmltex.xsl"/> - -Obtaining The Library ---------------------- - -The XSLT MathML Library is available for download as: - - * Zip file: http://www.raleigh.ru/MathML/mmltex/xsltml_2.1.2.zip - -Copyright ---------- - -Copyright (C) 2001-2003 Vasil Yaroshevich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the ``Software''), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Except as contained in this notice, the names of individuals -credited with contribution to this software shall not be used in -advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization -from the individuals in question. - -Any stylesheet derived from this Software that is publically -distributed will be identified with a different name and the -version strings in any derived Software will be changed so that -no possibility of confusion between the derived package and this -Software will exist. - -Warranty --------- - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER -CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Contacting the Author ---------------------- - -These stylesheets are maintained by Vasil Yaroshevich, <yarosh@raleigh.ru>. diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/cmarkup.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/cmarkup.xsl deleted file mode 100755 index b64a973b..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/cmarkup.xsl +++ /dev/null @@ -1,1107 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: cmarkup.xsl 149 2006-09-12 21:23:53Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<!-- 4.4.1.1 cn --> -<xsl:template match="m:cn"><xsl:apply-templates/></xsl:template> - -<xsl:template match="m:cn[@type='complex-cartesian']"> - <xsl:apply-templates select="text()[1]"/> - <xsl:text>+</xsl:text> - <xsl:apply-templates select="text()[2]"/> - <xsl:text>i</xsl:text> -</xsl:template> - -<xsl:template match="m:cn[@type='rational']"> - <xsl:apply-templates select="text()[1]"/> - <xsl:text>/</xsl:text> - <xsl:apply-templates select="text()[2]"/> -</xsl:template> - -<xsl:template match="m:cn[@type='integer' and @base!=10]"> - <xsl:apply-templates/> - <xsl:text>_{</xsl:text><xsl:value-of select="@base"/><xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:cn[@type='complex-polar']"> - <xsl:apply-templates select="text()[1]"/> - <xsl:text>e^{i </xsl:text> - <xsl:apply-templates select="text()[2]"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:cn[@type='e-notation']"> - <xsl:apply-templates select="text()[1]"/> - <xsl:text>E</xsl:text> - <xsl:apply-templates select="text()[2]"/> -</xsl:template> - -<!-- 4.4.1.1 ci 4.4.1.2 csymbol --> -<xsl:template match="m:ci | m:csymbol"> - <xsl:choose> - <xsl:when test="string-length(normalize-space(text()))>1"> - <xsl:text>\mathrm{</xsl:text><xsl:apply-templates/><xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise><xsl:apply-templates/></xsl:otherwise> - </xsl:choose> -</xsl:template> - -<!-- 4.4.2.1 apply 4.4.2.2 reln --> -<xsl:template match="m:apply | m:reln"> - <xsl:apply-templates select="*[1]"> - <!-- <? --> - <xsl:with-param name="p" select="10"/> - </xsl:apply-templates> - <!-- ?> --> - <xsl:text>(</xsl:text> - <xsl:for-each select="*[position()>1]"> - <xsl:apply-templates select="."/> - <xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if> - </xsl:for-each> - <xsl:text>)</xsl:text> -</xsl:template> - -<!-- 4.4.2.3 fn --> -<xsl:template match="m:fn[m:apply[1]]"> <!-- for m:fn using default rule --> - <xsl:text>(</xsl:text><xsl:apply-templates/><xsl:text>)</xsl:text> -</xsl:template> - -<!-- 4.4.2.4 interval --> -<xsl:template match="m:interval[*[2]]"> - <xsl:choose> - <xsl:when test="@closure='open' or @closure='open-closed'"> - <xsl:text>\left(</xsl:text> - </xsl:when> - <xsl:otherwise><xsl:text>\left[</xsl:text></xsl:otherwise> - </xsl:choose> - <xsl:apply-templates select="*[1]"/> - <xsl:text> , </xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:choose> - <xsl:when test="@closure='open' or @closure='closed-open'"> - <xsl:text>\right)</xsl:text> - </xsl:when> - <xsl:otherwise><xsl:text>\right]</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:interval"> - <xsl:text>\left\{</xsl:text><xsl:apply-templates/><xsl:text>\right\}</xsl:text> -</xsl:template> - -<!-- 4.4.2.5 inverse --> -<xsl:template match="m:apply[*[1][self::m:inverse]]"> - <xsl:apply-templates select="*[2]"/><xsl:text>^{(-1)}</xsl:text> -</xsl:template> - -<!-- 4.4.2.6 sep 4.4.2.7 condition --> -<xsl:template match="m:sep | m:condition"><xsl:apply-templates/></xsl:template> - -<!-- 4.4.2.9 lambda --> -<xsl:template match="m:lambda"> - <xsl:apply-templates select="m:bvar/*"/> - <xsl:text>\mapsto </xsl:text> - <xsl:apply-templates select="*[last()]"/> -<!-- Other variant - <xsl:text>\mathrm{lambda}\: </xsl:text> - <xsl:apply-templates select="m:bvar/*"/> - <xsl:text>.\: </xsl:text> - <xsl:apply-templates select="*[last()]"/> --> -</xsl:template> - -<!-- 4.4.2.10 compose --> -<xsl:template match="m:apply[*[1][self::m:compose]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\circ </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.2.11 ident --> -<xsl:template match="m:ident"><xsl:text>\mathrm{id}</xsl:text></xsl:template> - -<!-- 4.4.2.12 domain 4.4.2.13 codomain 4.4.2.14 image 4.4.3.21 arg 4.4.3.24 lcm - 4.4.5.9 grad 4.4.5.10 curl 4.4.9.4 median 4.4.9.5 mode--> -<xsl:template match="m:domain | m:codomain | m:image | m:arg | m:lcm | m:grad | - m:curl | m:median | m:mode"> - <xsl:text>\mathop{\mathrm{</xsl:text> - <xsl:value-of select="local-name()"/> - <xsl:text>}}</xsl:text> -</xsl:template> - -<!-- 4.4.2.15 domainofapplication --> -<xsl:template match="m:domainofapplication"/> - -<!-- 4.4.2.16 piecewise --> -<xsl:template match="m:piecewise"> - <xsl:text>\begin{cases}</xsl:text> - <xsl:apply-templates select="m:piece"/> - <xsl:apply-templates select="m:otherwise"/> - <xsl:text>\end{cases}</xsl:text> -</xsl:template> - -<xsl:template match="m:piece"> - <xsl:apply-templates select="*[1]"/> - <xsl:text> & \text{if $</xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>$}</xsl:text> - <xsl:if test="not(position()=last()) or ../m:otherwise"><xsl:text>\\ </xsl:text></xsl:if> -</xsl:template> - -<xsl:template match="m:otherwise"> - <xsl:apply-templates select="*[1]"/> - <xsl:text> & \text{otherwise}</xsl:text> -</xsl:template> - -<!-- 4.4.3.1 quotient --> -<xsl:template match="m:apply[*[1][self::m:quotient]]"> - <xsl:text>\left\lfloor\frac{</xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="*[3]"/> - <xsl:text>}\right\rfloor </xsl:text> -</xsl:template> - -<!-- 4.4.3.2 factorial --> -<xsl:template match="m:apply[*[1][self::m:factorial]]"> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> - <xsl:text>!</xsl:text> -</xsl:template> - -<!-- 4.4.3.3 divide --> -<xsl:template match="m:apply[*[1][self::m:divide]]"> - <xsl:param name="p" select="0"/> - <xsl:param name="this-p" select="3"/> - <xsl:if test="$this-p < $p"><xsl:text>\left(</xsl:text></xsl:if> - <xsl:text>\frac{</xsl:text> - <xsl:apply-templates select="*[2]"/> -<!-- <xsl:with-param name="p" select="$this-p"/> - </xsl:apply-templates>--> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="*[3]"/> -<!-- <xsl:with-param name="p" select="$this-p"/> - </xsl:apply-templates>--> - <xsl:text>}</xsl:text> - <xsl:if test="$this-p < $p"><xsl:text>\right)</xsl:text></xsl:if> -</xsl:template> - -<!-- 4.4.3.4 max min --> -<xsl:template match="m:apply[*[1][self::m:max or self::m:min]]"> - <xsl:text>\</xsl:text> - <xsl:value-of select="local-name(*[1])"/> - <xsl:text>\{</xsl:text> - <xsl:choose> - <xsl:when test="m:condition"> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>\mid </xsl:text> - <xsl:apply-templates select="m:condition/node()"/> - </xsl:when> - <xsl:otherwise> - <xsl:for-each select="*[position() > 1]"> - <xsl:apply-templates select="."/> - <xsl:if test="position() !=last()"><xsl:text> , </xsl:text></xsl:if> - </xsl:for-each> - </xsl:otherwise> - </xsl:choose> - <xsl:text>\}</xsl:text> -</xsl:template> - -<!-- 4.4.3.5 minus--> -<xsl:template match="m:apply[*[1][self::m:minus] and count(*)=2]"> - <xsl:text>-</xsl:text> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="5"/> - </xsl:apply-templates> -</xsl:template> - -<xsl:template match="m:apply[*[1][self::m:minus] and count(*)>2]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo">-</xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="2"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.6 plus--> -<xsl:template match="m:apply[*[1][self::m:plus]]"> - <xsl:param name="p" select="0"/> - <xsl:if test="$p > 2"> - <xsl:text>(</xsl:text> - </xsl:if> - <xsl:for-each select="*[position()>1]"> - <xsl:if test="position() > 1"> - <xsl:choose> - <xsl:when test="self::m:apply[*[1][self::m:times] and - *[2][self::m:apply/*[1][self::m:minus] or self::m:cn[not(m:sep) and - (number(.) < 0)]]]">-</xsl:when> - <xsl:otherwise>+</xsl:otherwise> - </xsl:choose> - </xsl:if> - <xsl:choose> - <xsl:when test="self::m:apply[*[1][self::m:times] and - *[2][self::m:cn[not(m:sep) and (number(.) <0)]]]"> - <xsl:value-of select="-(*[2])"/> - <xsl:apply-templates select="."> - <xsl:with-param name="first" select="2"/> - <xsl:with-param name="p" select="2"/> - </xsl:apply-templates> - </xsl:when> - <xsl:when test="self::m:apply[*[1][self::m:times] and - *[2][self::m:apply/*[1][self::m:minus]]]"> - <xsl:apply-templates select="./*[2]/*[2]"/> - <xsl:apply-templates select="."> - <xsl:with-param name="first" select="2"/> - <xsl:with-param name="p" select="2"/> - </xsl:apply-templates> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates select="."> - <xsl:with-param name="p" select="2"/> - </xsl:apply-templates> - </xsl:otherwise> - </xsl:choose> - </xsl:for-each> - <xsl:if test="$p > 2"> - <xsl:text>)</xsl:text> - </xsl:if> -</xsl:template> - -<!-- 4.4.3.7 power --> -<xsl:template match="m:apply[*[1][self::m:power]]"> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="5"/> - </xsl:apply-templates> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="*[3]"> - <xsl:with-param name="p" select="5"/> - </xsl:apply-templates> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.3.8 remainder --> -<xsl:template match="m:apply[*[1][self::m:rem]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo">\mod </xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="3"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.9 times--> -<xsl:template match="m:apply[*[1][self::m:times]]" name="times"> - <xsl:param name="p" select="0"/> - <xsl:param name="first" select="1"/> - <xsl:if test="$p > 3"><xsl:text>(</xsl:text></xsl:if> - <xsl:for-each select="*[position()>1]"> - <xsl:if test="position() > 1"> - <xsl:choose> - <xsl:when test="self::m:cn">\times <!-- times --></xsl:when> - <xsl:otherwise><!--invisible times--></xsl:otherwise> - </xsl:choose> - </xsl:if> - <xsl:if test="position()>= $first"> - <xsl:apply-templates select="."> - <xsl:with-param name="p" select="3"/> - </xsl:apply-templates> - </xsl:if> - </xsl:for-each> - <xsl:if test="$p > 3"><xsl:text>)</xsl:text></xsl:if> -</xsl:template> - -<!-- 4.4.3.10 root --> -<xsl:template match="m:apply[*[1][self::m:root]]"> - <xsl:text>\sqrt</xsl:text> - <xsl:if test="m:degree!=2"> - <xsl:text>[</xsl:text> - <xsl:apply-templates select="m:degree/*"/> - <xsl:text>]</xsl:text> - </xsl:if> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="*[position()>1 and not(self::m:degree)]"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.3.11 gcd --> -<xsl:template match="m:gcd"><xsl:text>\gcd </xsl:text></xsl:template> - -<!-- 4.4.3.12 and --> -<xsl:template match="m:apply[*[1][self::m:and]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\land <!-- and --></xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.13 or --> -<xsl:template match="m:apply[*[1][self::m:or]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="3"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\lor </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.14 xor --> -<xsl:template match="m:apply[*[1][self::m:xor]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="3"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\mathop{\mathrm{xor}}</xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.15 not --> -<xsl:template match="m:apply[*[1][self::m:not]]"> - <xsl:text>\neg </xsl:text> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<!-- 4.4.3.16 implies --> -<xsl:template match="m:apply[*[1][self::m:implies]] | m:reln[*[1][self::m:implies]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo">\implies </xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="3"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.3.17 forall 4.4.3.18 exists --> -<xsl:template match="m:apply[*[1][self::m:forall or self::m:exists]]"> - <xsl:text>\</xsl:text> - <xsl:value-of select="local-name(*[1])"/> - <xsl:text> </xsl:text> - <xsl:apply-templates select="m:bvar"/> - <xsl:if test="m:condition"> - <xsl:text>, </xsl:text><xsl:apply-templates select="m:condition"/> - </xsl:if> - <xsl:if test="*[last()][local-name()!='condition'][local-name()!='bvar']"> - <xsl:text>\colon </xsl:text> - <xsl:apply-templates select="*[last()]"/> - </xsl:if> -</xsl:template> - -<!-- 4.4.3.19 abs --> -<xsl:template match="m:apply[*[1][self::m:abs]]"> - <xsl:text>\left|</xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>\right|</xsl:text> -</xsl:template> - -<!-- 4.4.3.20 conjugate --> -<xsl:template match="m:apply[*[1][self::m:conjugate]]"> - <xsl:text>\overline{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.3.22 real --> -<xsl:template match="m:real"><xsl:text>\Re </xsl:text></xsl:template> - -<!-- 4.4.3.23 imaginary --> -<xsl:template match="m:imaginary"><xsl:text>\Im </xsl:text></xsl:template> - -<!-- 4.4.3.25 floor --> -<xsl:template match="m:apply[*[1][self::m:floor]]"> - <xsl:text>\lfloor </xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>\rfloor </xsl:text> -</xsl:template> - -<!-- 4.4.3.25 ceiling --> -<xsl:template match="m:apply[*[1][self::m:ceiling]]"> - <xsl:text>\lceil </xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>\rceil </xsl:text> -</xsl:template> - -<!-- 4.4.4.1 eq --> -<xsl:template match="m:apply[*[1][self::m:eq]] | m:reln[*[1][self::m:eq]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">=</xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.2 neq --> -<xsl:template match="m:apply[*[1][self::m:neq]] | m:reln[*[1][self::m:neq]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\neq </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.3 gt --> -<xsl:template match="m:apply[*[1][self::m:gt]] | m:reln[*[1][self::m:gt]]"> -<xsl:param name="p" select="0"/> -<xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">> </xsl:with-param> -</xsl:call-template> -</xsl:template> - -<!-- 4.4.4.4 lt --> -<xsl:template match="m:apply[*[1][self::m:lt]] | m:reln[*[1][self::m:lt]]"> -<xsl:param name="p" select="0"/> -<xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">< </xsl:with-param> -</xsl:call-template> -</xsl:template> - -<!-- 4.4.4.5 geq --> -<xsl:template match="m:apply[*[1][self::m:geq]] | m:reln[*[1][self::m:geq]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\ge </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.6 leq --> -<xsl:template match="m:apply[*[1][self::m:leq]] | m:reln[*[1][self::m:leq]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\le </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.7 equivalent --> -<xsl:template match="m:apply[*[1][self::m:equivalent]] | m:reln[*[1][self::m:equivalent]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\equiv </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.8 approx --> -<xsl:template match="m:apply[*[1][self::m:approx]] | m:reln[*[1][self::m:approx]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="1"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\approx </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.4.9 factorof --> -<xsl:template match="m:apply[*[1][self::m:factorof]] | m:reln[*[1][self::m:factorof]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo"> | </xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="3"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.5.1 int --> -<xsl:template match="m:apply[*[1][self::m:int]]"> - <xsl:text>\int</xsl:text> - <xsl:if test="m:lowlimit/*|m:interval/*[1]|m:condition/*"> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="m:lowlimit/*|m:interval/*[1]|m:condition/*"/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="m:uplimit/*|m:interval/*[2]"> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="m:uplimit/*|m:interval/*[2]"/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:text> </xsl:text> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>\,d </xsl:text> - <xsl:apply-templates select="m:bvar"/> -</xsl:template> - -<!-- 4.4.5.2 diff --> -<xsl:template match="m:apply[*[1][self::m:diff] and m:ci and count(*)=2]" priority="2"> - <xsl:apply-templates select="*[2]"/> - <xsl:text>^\prime </xsl:text> -</xsl:template> - -<xsl:template match="m:apply[*[1][self::m:diff]]" priority="1"> - <xsl:text>\frac{</xsl:text> - <xsl:choose> - <xsl:when test="m:bvar/m:degree"> - <xsl:text>d^{</xsl:text> - <xsl:apply-templates select="m:bvar/m:degree/node()"/> - <xsl:text>}</xsl:text> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>}{d</xsl:text> - <xsl:apply-templates select="m:bvar/node()"/> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="m:bvar/m:degree/node()"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>d </xsl:text> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>}{d </xsl:text> - <xsl:apply-templates select="m:bvar"/> - </xsl:otherwise> - </xsl:choose> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.5.3 partialdiff --> -<xsl:template match="m:apply[*[1][self::m:partialdiff] and m:list and m:ci and count(*)=3]" priority="2"> - <xsl:text>D_{</xsl:text> - <xsl:for-each select="m:list[1]/*"> - <xsl:apply-templates select="."/> - <xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if> - </xsl:for-each> - <xsl:text>}</xsl:text> - <xsl:apply-templates select="*[3]"/> -</xsl:template> - -<xsl:template match="m:apply[*[1][self::m:partialdiff]]" priority="1"> - <xsl:text>\frac{\partial^{</xsl:text> - <xsl:choose> - <xsl:when test="m:degree"> - <xsl:apply-templates select="m:degree/node()"/> - </xsl:when> - <xsl:when test="m:bvar/m:degree[string(number(.))='NaN']"> - <xsl:for-each select="m:bvar/m:degree"> - <xsl:apply-templates select="node()"/> - <xsl:if test="position()<last()"><xsl:text>+</xsl:text></xsl:if> - </xsl:for-each> - <xsl:if test="count(m:bvar[not(m:degree)])>0"> - <xsl:text>+</xsl:text> - <xsl:value-of select="count(m:bvar[not(m:degree)])"/> - </xsl:if> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="sum(m:bvar/m:degree)+count(m:bvar[not(m:degree)])"/> - </xsl:otherwise> - </xsl:choose> - <xsl:text>}</xsl:text> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>}{</xsl:text> - <xsl:for-each select="m:bvar"> - <xsl:text>\partial </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:if test="m:degree"> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="m:degree/node()"/> - <xsl:text>}</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.2.8 declare 4.4.5.4 lowlimit 4.4.5.5 uplimit 4.4.5.7 degree 4.4.9.5 momentabout --> -<xsl:template match="m:declare | m:lowlimit | m:uplimit | m:degree | m:momentabout"/> - -<!-- 4.4.5.6 bvar--> -<xsl:template match="m:bvar"> - <xsl:apply-templates/> - <xsl:if test="following-sibling::m:bvar"><xsl:text>, </xsl:text></xsl:if> -</xsl:template> - -<!-- 4.4.5.8 divergence--> -<xsl:template match="m:divergence"><xsl:text>\mathop{\mathrm{div}}</xsl:text></xsl:template> - -<!-- 4.4.5.11 laplacian--> -<xsl:template match="m:laplacian"><xsl:text>\nabla^2 </xsl:text></xsl:template> - -<!-- 4.4.6.1 set --> -<xsl:template match="m:set"> - <xsl:text>\{</xsl:text><xsl:call-template name="set"/><xsl:text>\}</xsl:text> -</xsl:template> - -<!-- 4.4.6.2 list --> -<xsl:template match="m:list"> - <xsl:text>\left[</xsl:text><xsl:call-template name="set"/><xsl:text>\right]</xsl:text> -</xsl:template> - -<xsl:template name="set"> - <xsl:choose> - <xsl:when test="m:condition"> - <xsl:apply-templates select="m:bvar/*[not(self::bvar or self::condition)]"/> - <xsl:text>\colon </xsl:text> - <xsl:apply-templates select="m:condition/node()"/> - </xsl:when> - <xsl:otherwise> - <xsl:for-each select="*"> - <xsl:apply-templates select="."/> - <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if> - </xsl:for-each> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<!-- 4.4.6.3 union --> -<xsl:template match="m:apply[*[1][self::m:union]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\cup </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.4 intersect --> -<xsl:template match="m:apply[*[1][self::m:intersect]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="3"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\cap </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.5 in --> -<xsl:template match="m:apply[*[1][self::m:in]] | m:reln[*[1][self::m:in]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo">\in </xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="3"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.6 notin --> -<xsl:template match="m:apply[*[1][self::m:notin]] | m:reln[*[1][self::m:notin]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="mo">\notin </xsl:with-param> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="this-p" select="3"/> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.7 subset --> -<xsl:template match="m:apply[*[1][self::m:subset]] | m:reln[*[1][self::m:subset]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\subseteq </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.8 prsubset --> -<xsl:template match="m:apply[*[1][self::m:prsubset]] | m:reln[*[1][self::m:prsubset]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\subset </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.9 notsubset --> -<xsl:template match="m:apply[*[1][self::m:notsubset]] | m:reln[*[1][self::m:notsubset]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\nsubseteq </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.10 notprsubset --> -<xsl:template match="m:apply[*[1][self::m:notprsubset]] | m:reln[*[1][self::m:notprsubset]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\not\subset </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.11 setdiff --> -<xsl:template match="m:apply[*[1][self::m:setdiff]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="binary"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\setminus </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.6.12 card --> -<xsl:template match="m:apply[*[1][self::m:card]]"> - <xsl:text>|</xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>|</xsl:text> -</xsl:template> - -<!-- 4.4.6.13 cartesianproduct 4.4.10.6 vectorproduct --> -<xsl:template match="m:apply[*[1][self::m:cartesianproduct or self::m:vectorproduct]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\times </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<xsl:template -match="m:apply[*[1][self::m:cartesianproduct][count(following-sibling::m:reals)=count(following-sibling::*)]]" -priority="2"> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="5"/> - </xsl:apply-templates> - <xsl:text>^{</xsl:text> - <xsl:value-of select="count(*)-1"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.7.1 sum --> -<xsl:template match="m:apply[*[1][self::m:sum]]"> - <xsl:text>\sum</xsl:text><xsl:call-template name="series"/> -</xsl:template> - -<!-- 4.4.7.2 product --> -<xsl:template match="m:apply[*[1][self::m:product]]"> - <xsl:text>\prod</xsl:text><xsl:call-template name="series"/> -</xsl:template> - -<xsl:template name="series"> - <xsl:if test="m:lowlimit/*|m:interval/*[1]|m:condition/*"> - <xsl:text>_{</xsl:text> - <xsl:if test="not(m:condition)"> - <xsl:apply-templates select="m:bvar"/> - <xsl:text>=</xsl:text> - </xsl:if> - <xsl:apply-templates select="m:lowlimit/*|m:interval/*[1]|m:condition/*"/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="m:uplimit/*|m:interval/*[2]"> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="m:uplimit/*|m:interval/*[2]"/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:text> </xsl:text> - <xsl:apply-templates select="*[last()]"/> -</xsl:template> - -<!-- 4.4.7.3 limit --> -<xsl:template match="m:apply[*[1][self::m:limit]]"> - <xsl:text>\lim_{</xsl:text> - <xsl:apply-templates select="m:lowlimit|m:condition/*"/> - <xsl:text>}</xsl:text> - <xsl:apply-templates select="*[last()]"/> -</xsl:template> - -<xsl:template match="m:apply[m:limit]/m:lowlimit" priority="3"> - <xsl:apply-templates select="../m:bvar/node()"/> - <xsl:text>\to </xsl:text> - <xsl:apply-templates/> -</xsl:template> - -<!-- 4.4.7.4 tendsto --> -<xsl:template match="m:apply[*[1][self::m:tendsto]] | m:reln[*[1][self::m:tendsto]]"> - <xsl:param name="p"/> - <xsl:call-template name="binary"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo"> - <xsl:choose> - <xsl:when test="*[1][@type='above']">\searrow </xsl:when> - <xsl:when test="*[1][@type='below']">\nearrow </xsl:when> - <xsl:when test="*[1][@type='two-sided']">\rightarrow </xsl:when> - <xsl:otherwise>\to </xsl:otherwise> - </xsl:choose> - </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.8.1 common tringonometric functions 4.4.8.3 natural logarithm --> -<xsl:template match="m:apply[*[1][ - self::m:sin or self::m:cos or self::m:tan or self::m:sec or - self::m:csc or self::m:cot or self::m:sinh or self::m:cosh or - self::m:tanh or self::m:coth or self::m:arcsin or self::m:arccos or - self::m:arctan or self::m:ln]]"> - <xsl:text>\</xsl:text> - <xsl:value-of select="local-name(*[1])"/> - <xsl:text> </xsl:text> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<xsl:template match="m:sin | m:cos | m:tan | m:sec | m:csc | - m:cot | m:sinh | m:cosh | m:tanh | m:coth | - m:arcsin | m:arccos | m:arctan | m:ln"> - <xsl:text>\</xsl:text> - <xsl:value-of select="local-name(.)"/> - <xsl:text> </xsl:text> -</xsl:template> - -<xsl:template match="m:apply[*[1][ - self::m:sech or self::m:csch or self::m:arccosh or - self::m:arccot or self::m:arccoth or self::m:arccsc or - self::m:arccsch or self::m:arcsec or self::m:arcsech or - self::m:arcsinh or self::m:arctanh]]"> - <xsl:text>\mathrm{</xsl:text> - <xsl:value-of select="local-name(*[1])"/> - <xsl:text>\,}</xsl:text> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<xsl:template match="m:sech | m:csch | m:arccosh | m:arccot | - m:arccoth | m:arccsc |m:arccsch |m:arcsec | - m:arcsech | m:arcsinh | m:arctanh"> - <xsl:text>\mathrm{</xsl:text> - <xsl:value-of select="local-name(.)"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.8.2 exp --> -<xsl:template match="m:apply[*[1][self::m:exp]]"> - <xsl:text>e^{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.8.4 log --> -<xsl:template match="m:apply[*[1][self::m:log]]"> - <xsl:text>\lg </xsl:text> - <xsl:apply-templates select="*[last()]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<xsl:template match="m:apply[*[1][self::m:log] and m:logbase != 10]"> - <xsl:text>\log_{</xsl:text> - <xsl:apply-templates select="m:logbase/node()"/> - <xsl:text>}</xsl:text> - <xsl:apply-templates select="*[last()]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<!-- 4.4.9.1 mean --> -<xsl:template match="m:apply[*[1][self::m:mean]]"> - <xsl:text>\langle </xsl:text> - <xsl:for-each select="*[position()>1]"> - <xsl:apply-templates select="."/> - <xsl:if test="position() !=last()"><xsl:text>, </xsl:text></xsl:if> - </xsl:for-each> - <xsl:text>\rangle </xsl:text> -</xsl:template> - -<!-- 4.4.9.2 sdef --> -<xsl:template match="m:sdev"><xsl:text>\sigma </xsl:text></xsl:template> - -<!-- 4.4.9.3 variance --> -<xsl:template match="m:apply[*[1][self::m:variance]]"> - <xsl:text>\sigma(</xsl:text> - <xsl:apply-templates select="*[2]"/> - <xsl:text>)^2</xsl:text> -</xsl:template> - -<!-- 4.4.9.5 moment --> -<xsl:template match="m:apply[*[1][self::m:moment]]"> - <xsl:text>\langle </xsl:text> - <xsl:apply-templates select="*[last()]"/> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="m:degree/node()"/> - <xsl:text>}\rangle</xsl:text> - <xsl:if test="m:momentabout"> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="m:momentabout/node()"/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:text> </xsl:text> -</xsl:template> - -<!-- 4.4.10.1 vector --> -<xsl:template match="m:vector"> - <xsl:text>\left(\begin{array}{c}</xsl:text> - <xsl:for-each select="*"> - <xsl:apply-templates select="."/> - <xsl:if test="position()!=last()"><xsl:text>\\ </xsl:text></xsl:if> - </xsl:for-each> - <xsl:text>\end{array}\right)</xsl:text> -</xsl:template> - -<!-- 4.4.10.2 matrix --> -<xsl:template match="m:matrix"> - <xsl:text>\begin{pmatrix}</xsl:text> - <xsl:apply-templates/> - <xsl:text>\end{pmatrix}</xsl:text> -</xsl:template> - -<!-- 4.4.10.3 matrixrow --> -<xsl:template match="m:matrixrow"> - <xsl:for-each select="*"> - <xsl:apply-templates select="."/> - <xsl:if test="position()!=last()"><xsl:text> & </xsl:text></xsl:if> - </xsl:for-each> - <xsl:if test="position()!=last()"><xsl:text>\\ </xsl:text></xsl:if> -</xsl:template> - -<!-- 4.4.10.4 determinant --> -<xsl:template match="m:apply[*[1][self::m:determinant]]"> - <xsl:text>\det </xsl:text> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> -</xsl:template> - -<xsl:template match="m:apply[*[1][self::m:determinant]][*[2][self::m:matrix]]" priority="2"> - <xsl:text>\begin{vmatrix}</xsl:text> - <xsl:apply-templates select="m:matrix/*"/> - <xsl:text>\end{vmatrix}</xsl:text> -</xsl:template> - -<!-- 4.4.10.5 transpose --> -<xsl:template match="m:apply[*[1][self::m:transpose]]"> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> - <xsl:text>^T</xsl:text> -</xsl:template> - -<!-- 4.4.10.6 selector --> -<xsl:template match="m:apply[*[1][self::m:selector]]"> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="7"/> - </xsl:apply-templates> - <xsl:text>_{</xsl:text> - <xsl:for-each select="*[position()>2]"> - <xsl:apply-templates select="."/> - <xsl:if test="position() !=last()"><xsl:text>, </xsl:text></xsl:if> - </xsl:for-each> - <xsl:text>}</xsl:text> -</xsl:template> - -<!-- 4.4.10.8 scalarproduct --> -<xsl:template match="m:apply[*[1][self::m:scalarproduct]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\cdot </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.10.9 outerproduct --> -<xsl:template match="m:apply[*[1][self::m:outerproduct]]"> - <xsl:param name="p" select="0"/> - <xsl:call-template name="infix"> - <xsl:with-param name="this-p" select="2"/> - <xsl:with-param name="p" select="$p"/> - <xsl:with-param name="mo">\otimes </xsl:with-param> - </xsl:call-template> -</xsl:template> - -<!-- 4.4.11.2 semantics --> -<xsl:template match="m:semantics"><xsl:apply-templates select="*[1]"/></xsl:template> - -<xsl:template match="m:semantics[m:annotation/@encoding='TeX']"> - <xsl:apply-templates select="m:annotation[@encoding='TeX']/node()"/> -</xsl:template> - -<!-- 4.4.12.1 integers --> -<xsl:template match="m:integers"><xsl:text>\mathbb{Z}</xsl:text></xsl:template> - -<!-- 4.4.12.2 reals --> -<xsl:template match="m:reals"><xsl:text>\mathbb{R}</xsl:text></xsl:template> - -<!-- 4.4.12.3 rationals --> -<xsl:template match="m:rationals"><xsl:text>\mathbb{Q}</xsl:text></xsl:template> - -<!-- 4.4.12.4 naturalnumbers --> -<xsl:template match="m:naturalnumbers"><xsl:text>\mathbb{N}</xsl:text></xsl:template> - -<!-- 4.4.12.5 complexes --> -<xsl:template match="m:complexes"><xsl:text>\mathbb{C}</xsl:text></xsl:template> - -<!-- 4.4.12.6 primes --> -<xsl:template match="m:primes"><xsl:text>\mathbb{P}</xsl:text></xsl:template> - -<!-- 4.4.12.7 exponentiale --> -<xsl:template match="m:exponentiale"><xsl:text>e</xsl:text></xsl:template> - -<!-- 4.4.12.8 imaginaryi --> -<xsl:template match="m:imaginaryi"><xsl:text>i</xsl:text></xsl:template> - -<!-- 4.4.12.9 notanumber --> -<xsl:template match="m:notanumber"><xsl:text>NaN</xsl:text></xsl:template> - -<!-- 4.4.12.10 true --> -<xsl:template match="m:true"><xsl:text>\mbox{true}</xsl:text></xsl:template> - -<!-- 4.4.12.11 false --> -<xsl:template match="m:false"><xsl:text>\mbox{false}</xsl:text></xsl:template> - -<!-- 4.4.12.12 emptyset --> -<xsl:template match="m:emptyset"><xsl:text>\emptyset </xsl:text></xsl:template> - -<!-- 4.4.12.13 pi --> -<xsl:template match="m:pi"><xsl:text>\pi </xsl:text></xsl:template> - -<!-- 4.4.12.14 eulergamma --> -<xsl:template match="m:eulergamma"><xsl:text>\gamma </xsl:text></xsl:template> - -<!-- 4.4.12.15 infinity --> -<xsl:template match="m:infinity"><xsl:text>\infty </xsl:text></xsl:template> - -<!-- ****************************** --> -<xsl:template name="infix" > - <xsl:param name="mo"/> - <xsl:param name="p" select="0"/> - <xsl:param name="this-p" select="0"/> - <xsl:if test="$this-p < $p"><xsl:text>(</xsl:text></xsl:if> - <xsl:for-each select="*[position()>1]"> - <xsl:if test="position() > 1"> - <xsl:copy-of select="$mo"/> - </xsl:if> - <xsl:apply-templates select="."> - <xsl:with-param name="p" select="$this-p"/> - </xsl:apply-templates> - </xsl:for-each> - <xsl:if test="$this-p < $p"><xsl:text>)</xsl:text></xsl:if> -</xsl:template> - -<xsl:template name="binary" > - <xsl:param name="mo"/> - <xsl:param name="p" select="0"/> - <xsl:param name="this-p" select="0"/> - <xsl:if test="$this-p < $p"><xsl:text>(</xsl:text></xsl:if> - <xsl:apply-templates select="*[2]"> - <xsl:with-param name="p" select="$this-p"/> - </xsl:apply-templates> - <xsl:value-of select="$mo"/> - <xsl:apply-templates select="*[3]"> - <xsl:with-param name="p" select="$this-p"/> - </xsl:apply-templates> - <xsl:if test="$this-p < $p"><xsl:text>)</xsl:text></xsl:if> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/entities.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/entities.xsl deleted file mode 100755 index 1d39b9f6..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/entities.xsl +++ /dev/null @@ -1,460 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: entities.xsl 149 2006-09-12 21:23:53Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<xsl:template name="replaceEntities"> - <xsl:param name="content"/> - <xsl:if test="string-length($content)>0"> - <xsl:choose> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select="'\; '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> - <xsl:when test="starts-with($content,'ɛ')"><xsl:value-of select="'\varepsilon '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ɛ')"/></xsl:call-template></xsl:when> <!--/varepsilon --> - <xsl:when test="starts-with($content,'˙')"><xsl:value-of select="'\dot{}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '˙')"/></xsl:call-template></xsl:when> <!--/DiacriticalDot --> -<!-- ====================================================================== --> -<!-- Unicode 3.2 - C1 Controls and Latin-1 Supplement - Range: 0080-00FF - http://www.unicode.org/charts/PDF/U0080.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'£')"><xsl:value-of select="'\pounds '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '£')"/></xsl:call-template></xsl:when> <!--pound sign --> - <xsl:when test="starts-with($content,'¥')"><xsl:value-of select="'\yen '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '¥')"/></xsl:call-template></xsl:when> <!--/yen =yen sign --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'§')"><xsl:value-of select="'\S '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '§')"/></xsl:call-template></xsl:when> <!--section sign --> - <xsl:when test="starts-with($content,'©')"><xsl:value-of select="'\copyright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '©')"/></xsl:call-template></xsl:when> <!--copyright sign --> - <xsl:when test="starts-with($content,'¬')"><xsl:value-of select="'\neg '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '¬')"/></xsl:call-template></xsl:when> <!--/neg /lnot =not sign --> - <xsl:when test="starts-with($content,'®')"><xsl:value-of select="'\circledR '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '®')"/></xsl:call-template></xsl:when> <!--/circledR =registered sign --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'±')"><xsl:value-of select="'\pm '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '±')"/></xsl:call-template></xsl:when> <!--/pm B: =plus-or-minus sign --> - <xsl:when test="starts-with($content,'µ')"><xsl:value-of select="'\mu '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'µ')"/></xsl:call-template></xsl:when> <!--=micro sign --> - <xsl:when test="starts-with($content,'¶')"><xsl:value-of select="'\P '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '¶')"/></xsl:call-template></xsl:when> <!--pilcrow (paragraph sign) --> - <xsl:when test="starts-with($content,'Å')"><xsl:value-of select="'\AA '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Å')"/></xsl:call-template></xsl:when> <!--capital A, ring --> <!-- invalid in math mode --> - <xsl:when test="starts-with($content,'Æ')"><xsl:value-of select="'\AE '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Æ')"/></xsl:call-template></xsl:when> <!--capital AE diphthong (ligature) --> <!-- invalid in math mode --> - <xsl:when test="starts-with($content,'×')"><xsl:value-of select="'\times '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '×')"/></xsl:call-template></xsl:when> <!--/times B: =multiply sign --> - <xsl:when test="starts-with($content,'æ')"><xsl:value-of select="'\ae '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'æ')"/></xsl:call-template></xsl:when> <!--small ae diphthong (ligature) --> <!-- invalid in math mode --> - -<!-- ====================================================================== --> -<!-- Unicode 3.2 - Greek - Range: 0370-03FF - http://www.unicode.org/charts/PDF/U0370.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'Α')"><xsl:value-of select="'{\rm A}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Α')"/></xsl:call-template></xsl:when> <!--greek capital letter alpha --> - <xsl:when test="starts-with($content,'Β')"><xsl:value-of select="'{\rm B}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Β')"/></xsl:call-template></xsl:when> <!-- greek capital letter beta --> - <xsl:when test="starts-with($content,'Γ')"><xsl:value-of select="'\Gamma '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Γ')"/></xsl:call-template></xsl:when> <!--/Gamma capital Gamma, Greek --> - <xsl:when test="starts-with($content,'Δ')"><xsl:value-of select="'\Delta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Δ')"/></xsl:call-template></xsl:when> <!--/Delta capital Delta, Greek --> - <xsl:when test="starts-with($content,'Ε')"><xsl:value-of select="'{\rm E}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ε')"/></xsl:call-template></xsl:when> <!-- greek capital letter epsilon --> - <xsl:when test="starts-with($content,'Ζ')"><xsl:value-of select="'{\rm Z}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ζ')"/></xsl:call-template></xsl:when> <!-- greek capital letter zeta --> - <xsl:when test="starts-with($content,'Η')"><xsl:value-of select="'{\rm H}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Η')"/></xsl:call-template></xsl:when> <!-- greek capital letter eta --> - <xsl:when test="starts-with($content,'Θ')"><xsl:value-of select="'\Theta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Θ')"/></xsl:call-template></xsl:when> <!--/Theta capital Theta, Greek --> - <xsl:when test="starts-with($content,'Ι')"><xsl:value-of select="'{\rm I}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ι')"/></xsl:call-template></xsl:when> <!-- greek capital letter iota --> - <xsl:when test="starts-with($content,'Κ')"><xsl:value-of select="'{\rm K}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Κ')"/></xsl:call-template></xsl:when> <!-- greek capital letter kappa --> - <xsl:when test="starts-with($content,'Λ')"><xsl:value-of select="'\Lambda '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Λ')"/></xsl:call-template></xsl:when> <!--/Lambda capital Lambda, Greek --> - <xsl:when test="starts-with($content,'Μ')"><xsl:value-of select="'{\rm M}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Μ')"/></xsl:call-template></xsl:when> <!-- greek capital letter mu --> - <xsl:when test="starts-with($content,'Ν')"><xsl:value-of select="'{\rm N}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ν')"/></xsl:call-template></xsl:when> <!-- greek capital letter nu --> - <xsl:when test="starts-with($content,'Ξ')"><xsl:value-of select="'\Xi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ξ')"/></xsl:call-template></xsl:when> <!--/Xi capital Xi, Greek --> - <xsl:when test="starts-with($content,'Ο')"><xsl:value-of select="'{\rm O}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ο')"/></xsl:call-template></xsl:when> <!-- greek capital letter omicron --> - <xsl:when test="starts-with($content,'Π')"><xsl:value-of select="'\Pi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Π')"/></xsl:call-template></xsl:when> <!--/Pi capital Pi, Greek --> - <xsl:when test="starts-with($content,'Ρ')"><xsl:value-of select="'{\rm P}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ρ')"/></xsl:call-template></xsl:when> <!-- greek capital letter rho --> - <xsl:when test="starts-with($content,'Σ')"><xsl:value-of select="'\Sigma '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Σ')"/></xsl:call-template></xsl:when> <!--/Sigma capital Sigma, Greek --> - <xsl:when test="starts-with($content,'Τ')"><xsl:value-of select="'{\rm T}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Τ')"/></xsl:call-template></xsl:when> <!-- greek capital letter tau --> - <xsl:when test="starts-with($content,'Υ')"><xsl:value-of select="'{\rm Y}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Υ')"/></xsl:call-template></xsl:when> <!-- greek capital letter upsilon --> - <xsl:when test="starts-with($content,'Φ')"><xsl:value-of select="'\Phi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Φ')"/></xsl:call-template></xsl:when> <!--/Phi capital Phi, Greek --> - <xsl:when test="starts-with($content,'Χ')"><xsl:value-of select="'{\rm X}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Χ')"/></xsl:call-template></xsl:when> <!-- greek capital letter chi --> - <xsl:when test="starts-with($content,'Ψ')"><xsl:value-of select="'\Psi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ψ')"/></xsl:call-template></xsl:when> <!--/Psi capital Psi, Greek --> - <xsl:when test="starts-with($content,'Ω')"><xsl:value-of select="'\Omega '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ω')"/></xsl:call-template></xsl:when> <!--/Omega capital Omega, Greek --> - <xsl:when test="starts-with($content,'α')"><xsl:value-of select="'\alpha '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'α')"/></xsl:call-template></xsl:when> <!--/alpha small alpha, Greek --> - <xsl:when test="starts-with($content,'β')"><xsl:value-of select="'\beta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'β')"/></xsl:call-template></xsl:when> <!--/beta small beta, Greek --> - <xsl:when test="starts-with($content,'γ')"><xsl:value-of select="'\gamma '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'γ')"/></xsl:call-template></xsl:when> <!--/gamma small gamma, Greek --> - <xsl:when test="starts-with($content,'δ')"><xsl:value-of select="'\delta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'δ')"/></xsl:call-template></xsl:when> <!--/delta small delta, Greek --> - <xsl:when test="starts-with($content,'ε')"><xsl:value-of select="'\epsilon '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ε')"/></xsl:call-template></xsl:when> <!--/straightepsilon, small epsilon, Greek --> - <xsl:when test="starts-with($content,'ζ')"><xsl:value-of select="'\zeta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ζ')"/></xsl:call-template></xsl:when> <!--/zeta small zeta, Greek --> - <xsl:when test="starts-with($content,'η')"><xsl:value-of select="'\eta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'η')"/></xsl:call-template></xsl:when> <!--/eta small eta, Greek --> - <xsl:when test="starts-with($content,'θ')"><xsl:value-of select="'\theta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'θ')"/></xsl:call-template></xsl:when> <!--/theta straight theta, small theta, Greek --> - <xsl:when test="starts-with($content,'ι')"><xsl:value-of select="'\iota '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ι')"/></xsl:call-template></xsl:when> <!--/iota small iota, Greek --> - <xsl:when test="starts-with($content,'κ')"><xsl:value-of select="'\kappa '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'κ')"/></xsl:call-template></xsl:when> <!--/kappa small kappa, Greek --> - <xsl:when test="starts-with($content,'λ')"><xsl:value-of select="'\lambda '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'λ')"/></xsl:call-template></xsl:when> <!--/lambda small lambda, Greek --> - <xsl:when test="starts-with($content,'μ')"><xsl:value-of select="'\mu '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'μ')"/></xsl:call-template></xsl:when> <!--/mu small mu, Greek --> - <xsl:when test="starts-with($content,'ν')"><xsl:value-of select="'\nu '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ν')"/></xsl:call-template></xsl:when> <!--/nu small nu, Greek --> - <xsl:when test="starts-with($content,'ξ')"><xsl:value-of select="'\xi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ξ')"/></xsl:call-template></xsl:when> <!--/xi small xi, Greek --> - <xsl:when test="starts-with($content,'ο')"><xsl:value-of select="'o'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ο')"/></xsl:call-template></xsl:when> <!--small omicron, Greek --> - <xsl:when test="starts-with($content,'π')"><xsl:value-of select="'\pi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'π')"/></xsl:call-template></xsl:when> <!--/pi small pi, Greek --> - <xsl:when test="starts-with($content,'ρ')"><xsl:value-of select="'\rho '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ρ')"/></xsl:call-template></xsl:when> <!--/rho small rho, Greek --> - <xsl:when test="starts-with($content,'ς')"><xsl:value-of select="'\varsigma '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ς')"/></xsl:call-template></xsl:when> <!--/varsigma --> - <xsl:when test="starts-with($content,'σ')"><xsl:value-of select="'\sigma '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'σ')"/></xsl:call-template></xsl:when> <!--/sigma small sigma, Greek --> - <xsl:when test="starts-with($content,'τ')"><xsl:value-of select="'\tau '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'τ')"/></xsl:call-template></xsl:when> <!--/tau small tau, Greek --> - <xsl:when test="starts-with($content,'υ')"><xsl:value-of select="'\upsilon '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'υ')"/></xsl:call-template></xsl:when> <!--/upsilon small upsilon, Greek --> - <xsl:when test="starts-with($content,'φ')"><xsl:value-of select="'\phi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'φ')"/></xsl:call-template></xsl:when> <!--/straightphi - small phi, Greek --> - <xsl:when test="starts-with($content,'χ')"><xsl:value-of select="'\chi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'χ')"/></xsl:call-template></xsl:when> <!--/chi small chi, Greek --> - <xsl:when test="starts-with($content,'ψ')"><xsl:value-of select="'\psi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ψ')"/></xsl:call-template></xsl:when> <!--/psi small psi, Greek --> - <xsl:when test="starts-with($content,'ω')"><xsl:value-of select="'\omega '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ω')"/></xsl:call-template></xsl:when> <!--/omega small omega, Greek --> - <xsl:when test="starts-with($content,'ϑ')"><xsl:value-of select="'\vartheta '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϑ')"/></xsl:call-template></xsl:when> <!--/vartheta - curly or open theta --> - <xsl:when test="starts-with($content,'ϒ')"><xsl:value-of select="'\Upsilon '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϒ')"/></xsl:call-template></xsl:when> <!--/Upsilon capital Upsilon, Greek --> - <xsl:when test="starts-with($content,'ϕ')"><xsl:value-of select="'\varphi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϕ')"/></xsl:call-template></xsl:when> <!--/varphi - curly or open phi --> - <xsl:when test="starts-with($content,'ϖ')"><xsl:value-of select="'\varpi '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϖ')"/></xsl:call-template></xsl:when> <!--/varpi --> - <xsl:when test="starts-with($content,'ϰ')"><xsl:value-of select="'\varkappa '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϰ')"/></xsl:call-template></xsl:when> <!--/varkappa --> - <xsl:when test="starts-with($content,'ϱ')"><xsl:value-of select="'\varrho '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ϱ')"/></xsl:call-template></xsl:when> <!--/varrho --> - -<!-- ====================================================================== --> -<!-- Unicode 3.2 - General Punctuation - Range: 2000-206F - http://www.unicode.org/charts/PDF/U2000.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.5em}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- en space (1/2-em) --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{1em}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- emsp - space of width 1em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.33em}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- emsp13 - space of width 1/3 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.25em}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- ThickSpace - space of width 1/4 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.17em}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- ThinSpace - space of width 3/18 em --> - <xsl:when test="starts-with($content,'​')"><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '​')"/></xsl:call-template></xsl:when> <!--zero width space --> - <xsl:when test="starts-with($content,'‖')"><xsl:value-of select="'\Vert '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '‖')"/></xsl:call-template></xsl:when> <!--/Vert dbl vertical bar --> - <xsl:when test="starts-with($content,'…')"><xsl:value-of select="'\dots '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '…')"/></xsl:call-template></xsl:when> <!--horizontal ellipsis = three dot leader --> - <xsl:when test="starts-with($content,'′')"><xsl:value-of select="'\prime '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '′')"/></xsl:call-template></xsl:when> <!--/prime prime or minute --> - <xsl:when test="starts-with($content,'⁡')"><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⁡')"/></xsl:call-template></xsl:when> <!-- ApplyFunction --> - <xsl:when test="starts-with($content,'⁢')"><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⁢')"/></xsl:call-template></xsl:when> <!-- InvisibleTimes --> - <xsl:when test="starts-with($content,'⁣')"><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⁣')"/></xsl:call-template></xsl:when> <!-- InvisibleComma, used as a separator, e.g., in indices --> -<!-- ====================================================================== --> -<!-- Unicode 3.2 - Letterlike Symbols - Range: 2100-214F - http://www.unicode.org/charts/PDF/U2100.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'ℋ')"><xsl:value-of select="'\mathscr{H}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℋ')"/></xsl:call-template></xsl:when> <!--H Hamiltonian --> - <xsl:when test="starts-with($content,'ℏ︀')"><xsl:value-of select="'\hbar '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℏ︀')"/></xsl:call-template></xsl:when> <!--/hbar - Planck's over 2pi --> - <xsl:when test="starts-with($content,'ℏ')"><xsl:value-of select="'\hslash '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℏ')"/></xsl:call-template></xsl:when> <!--/hslash - variant Planck's over 2pi --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ℑ')"><xsl:value-of select="'\Im '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℑ')"/></xsl:call-template></xsl:when> <!--/Im - imaginary --> - <xsl:when test="starts-with($content,'ℓ')"><xsl:value-of select="'\ell '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℓ')"/></xsl:call-template></xsl:when> <!--/ell - cursive small l --> - <xsl:when test="starts-with($content,'ℕ')"><xsl:value-of select="'\mathbb{N}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℕ')"/></xsl:call-template></xsl:when> <!--the semi-ring of natural numbers --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'℘')"><xsl:value-of select="'\wp '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '℘')"/></xsl:call-template></xsl:when> <!--/wp - Weierstrass p --> - <xsl:when test="starts-with($content,'ℙ')"><xsl:value-of select="'\mathbb{P}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℙ')"/></xsl:call-template></xsl:when> <!--the prime natural numbers --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ℚ')"><xsl:value-of select="'\mathbb{Q}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℚ')"/></xsl:call-template></xsl:when> <!--the field of rational numbers --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ℜ')"><xsl:value-of select="'\Re '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℜ')"/></xsl:call-template></xsl:when> <!--/Re - real --> - <xsl:when test="starts-with($content,'ℤ')"><xsl:value-of select="'\mathbb{Z}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℤ')"/></xsl:call-template></xsl:when> <!--the ring of integers --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'Ω')"><xsl:value-of select="'\Omega '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'Ω')"/></xsl:call-template></xsl:when> <!--ohm sign --> - <xsl:when test="starts-with($content,'℧')"><xsl:value-of select="'\mho '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '℧')"/></xsl:call-template></xsl:when> <!--/mho - conductance --> - <xsl:when test="starts-with($content,'ℵ')"><xsl:value-of select="'\aleph '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℵ')"/></xsl:call-template></xsl:when> <!--/aleph aleph, Hebrew --> - <xsl:when test="starts-with($content,'ℶ')"><xsl:value-of select="'\beth '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℶ')"/></xsl:call-template></xsl:when> <!--/beth - beth, Hebrew --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ℷ')"><xsl:value-of select="'\gimel '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℷ')"/></xsl:call-template></xsl:when> <!--/gimel - gimel, Hebrew --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ℸ')"><xsl:value-of select="'\daleth '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ℸ')"/></xsl:call-template></xsl:when> <!--/daleth - daleth, Hebrew --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'ⅅ')"><xsl:value-of select="'D'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ⅅ')"/></xsl:call-template></xsl:when> <!--D for use in differentials, e.g., within integrals --> - <xsl:when test="starts-with($content,'ⅆ')"><xsl:value-of select="'d'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ⅆ')"/></xsl:call-template></xsl:when> <!--d for use in differentials, e.g., within integrals --> - <xsl:when test="starts-with($content,'ⅇ')"><xsl:value-of select="'e'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ⅇ')"/></xsl:call-template></xsl:when> <!--e use for the exponential base of the natural logarithms --> - <xsl:when test="starts-with($content,'ⅈ')"><xsl:value-of select="'i'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ⅈ')"/></xsl:call-template></xsl:when> <!--i for use as a square root of -1 --> - <xsl:when test="starts-with($content,'ⅉ')"><xsl:value-of select="'j'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, 'ⅉ')"/></xsl:call-template></xsl:when> - -<!-- ====================================================================== --> -<!-- Unicode 3.2 - Arrows - Range: 2190-21FF - http://www.unicode.org/charts/PDF/U2190.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'←')"><xsl:value-of select="'\leftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '←')"/></xsl:call-template></xsl:when> <!--/leftarrow /gets A: =leftward arrow --> - <xsl:when test="starts-with($content,'↑')"><xsl:value-of select="'\uparrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↑')"/></xsl:call-template></xsl:when> <!--/uparrow A: =upward arrow --> - <xsl:when test="starts-with($content,'→')"><xsl:value-of select="'\to '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '→')"/></xsl:call-template></xsl:when> <!--/rightarrow /to A: =rightward arrow --> - <xsl:when test="starts-with($content,'↓')"><xsl:value-of select="'\downarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↓')"/></xsl:call-template></xsl:when> <!--/downarrow A: =downward arrow --> - <xsl:when test="starts-with($content,'↔')"><xsl:value-of select="'\leftrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↔')"/></xsl:call-template></xsl:when> <!--/leftrightarrow A: l&r arrow --> - <xsl:when test="starts-with($content,'↕')"><xsl:value-of select="'\updownarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↕')"/></xsl:call-template></xsl:when> <!--/updownarrow A: up&down arrow --> - <xsl:when test="starts-with($content,'↖')"><xsl:value-of select="'\nwarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↖')"/></xsl:call-template></xsl:when> <!--/nwarrow A: NW pointing arrow --> - <xsl:when test="starts-with($content,'↗')"><xsl:value-of select="'\nearrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↗')"/></xsl:call-template></xsl:when> <!--/nearrow A: NE pointing arrow --> - <xsl:when test="starts-with($content,'↘')"><xsl:value-of select="'\searrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↘')"/></xsl:call-template></xsl:when> <!--/searrow A: SE pointing arrow --> - <xsl:when test="starts-with($content,'↙')"><xsl:value-of select="'\swarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↙')"/></xsl:call-template></xsl:when> <!--/swarrow A: SW pointing arrow --> - <xsl:when test="starts-with($content,'↚')"><xsl:value-of select="'\nleftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↚')"/></xsl:call-template></xsl:when> <!--/nleftarrow A: not left arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↛')"><xsl:value-of select="'\nrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↛')"/></xsl:call-template></xsl:when> <!--/nrightarrow A: not right arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↝')"><xsl:value-of select="'\rightsquigarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↝')"/></xsl:call-template></xsl:when> <!--/rightsquigarrow A: rt arrow-wavy --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↞')"><xsl:value-of select="'\twoheadleftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↞')"/></xsl:call-template></xsl:when> <!--/twoheadleftarrow A: --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↠')"><xsl:value-of select="'\twoheadrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↠')"/></xsl:call-template></xsl:when> <!--/twoheadrightarrow A: --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↢')"><xsl:value-of select="'\leftarrowtail '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↢')"/></xsl:call-template></xsl:when> <!--/leftarrowtail A: left arrow-tailed --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↣')"><xsl:value-of select="'\rightarrowtail '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↣')"/></xsl:call-template></xsl:when> <!--/rightarrowtail A: rt arrow-tailed --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↦')"><xsl:value-of select="'\mapsto '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↦')"/></xsl:call-template></xsl:when> <!--/mapsto A: --> - <xsl:when test="starts-with($content,'↩')"><xsl:value-of select="'\hookleftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↩')"/></xsl:call-template></xsl:when> <!--/hookleftarrow A: left arrow-hooked --> - <xsl:when test="starts-with($content,'↪')"><xsl:value-of select="'\hookrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↪')"/></xsl:call-template></xsl:when> <!--/hookrightarrow A: rt arrow-hooked --> - <xsl:when test="starts-with($content,'↫')"><xsl:value-of select="'\looparrowleft '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↫')"/></xsl:call-template></xsl:when> <!--/looparrowleft A: left arrow-looped --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↬')"><xsl:value-of select="'\looparrowright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↬')"/></xsl:call-template></xsl:when> <!--/looparrowright A: rt arrow-looped --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↭')"><xsl:value-of select="'\leftrightsquigarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↭')"/></xsl:call-template></xsl:when> <!--/leftrightsquigarrow A: l&r arr-wavy --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↮')"><xsl:value-of select="'\nleftrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↮')"/></xsl:call-template></xsl:when> <!--/nleftrightarrow A: not l&r arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↰')"><xsl:value-of select="'\Lsh '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↰')"/></xsl:call-template></xsl:when> <!--/Lsh A: --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↱')"><xsl:value-of select="'\Rsh '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↱')"/></xsl:call-template></xsl:when> <!--/Rsh A: --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↶')"><xsl:value-of select="'\curvearrowleft '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↶')"/></xsl:call-template></xsl:when> <!--/curvearrowleft A: left curved arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↷')"><xsl:value-of select="'\curvearrowright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↷')"/></xsl:call-template></xsl:when> <!--/curvearrowright A: rt curved arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↺')"><xsl:value-of select="'\circlearrowleft '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↺')"/></xsl:call-template></xsl:when> <!--/circlearrowleft A: l arr in circle --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↻')"><xsl:value-of select="'\circlearrowright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↻')"/></xsl:call-template></xsl:when> <!--/circlearrowright A: r arr in circle --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↼')"><xsl:value-of select="'\leftharpoonup '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↼')"/></xsl:call-template></xsl:when> <!--/leftharpoonup A: left harpoon-up --> - <xsl:when test="starts-with($content,'↽')"><xsl:value-of select="'\leftharpoondown '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↽')"/></xsl:call-template></xsl:when> <!--/leftharpoondown A: l harpoon-down --> - <xsl:when test="starts-with($content,'↾')"><xsl:value-of select="'\upharpoonright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↾')"/></xsl:call-template></xsl:when> <!--/upharpoonright /restriction A: up harp-r --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'↿')"><xsl:value-of select="'\upharpoonleft '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '↿')"/></xsl:call-template></xsl:when> <!--/upharpoonleft A: up harpoon-left --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇀')"><xsl:value-of select="'\rightharpoonup '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇀')"/></xsl:call-template></xsl:when> <!--/rightharpoonup A: rt harpoon-up --> - <xsl:when test="starts-with($content,'⇁')"><xsl:value-of select="'\rightharpoondown '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇁')"/></xsl:call-template></xsl:when> <!--/rightharpoondown A: rt harpoon-down --> - <xsl:when test="starts-with($content,'⇂')"><xsl:value-of select="'\downharpoonright '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇂')"/></xsl:call-template></xsl:when> <!--/downharpoonright A: down harpoon-rt --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇃')"><xsl:value-of select="'\downharpoonleft '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇃')"/></xsl:call-template></xsl:when> <!--/downharpoonleft A: dn harpoon-left --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇄')"><xsl:value-of select="'\rightleftarrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇄')"/></xsl:call-template></xsl:when> <!--/rightleftarrows A: r arr over l arr --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇆')"><xsl:value-of select="'\leftrightarrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇆')"/></xsl:call-template></xsl:when> <!--/leftrightarrows A: l arr over r arr --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇇')"><xsl:value-of select="'\leftleftarrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇇')"/></xsl:call-template></xsl:when> <!--/leftleftarrows A: two left arrows --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇈')"><xsl:value-of select="'\upuparrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇈')"/></xsl:call-template></xsl:when> <!--/upuparrows A: two up arrows --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇉')"><xsl:value-of select="'\rightrightarrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇉')"/></xsl:call-template></xsl:when> <!--/rightrightarrows A: two rt arrows --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇊')"><xsl:value-of select="'\downdownarrows '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇊')"/></xsl:call-template></xsl:when> <!--/downdownarrows A: two down arrows --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇋')"><xsl:value-of select="'\leftrightharpoons '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇋')"/></xsl:call-template></xsl:when> <!--/leftrightharpoons A: l harp over r --> - <xsl:when test="starts-with($content,'⇌')"><xsl:value-of select="'\rightleftharpoons '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇌')"/></xsl:call-template></xsl:when> <!--/rightleftharpoons A: r harp over l --> - <xsl:when test="starts-with($content,'⇍')"><xsl:value-of select="'\nLeftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇍')"/></xsl:call-template></xsl:when> <!--/nLeftarrow A: not implied by --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇎')"><xsl:value-of select="'\nLeftrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇎')"/></xsl:call-template></xsl:when> <!--/nLeftrightarrow A: not l&r dbl arr --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇏')"><xsl:value-of select="'\nRightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇏')"/></xsl:call-template></xsl:when> <!--/nRightarrow A: not implies --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇐')"><xsl:value-of select="'\Leftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇐')"/></xsl:call-template></xsl:when> <!--/Leftarrow A: is implied by --> - <xsl:when test="starts-with($content,'⇑')"><xsl:value-of select="'\Uparrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇑')"/></xsl:call-template></xsl:when> <!--/Uparrow A: up dbl arrow --> - <xsl:when test="starts-with($content,'⇒')"><xsl:value-of select="'\Rightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇒')"/></xsl:call-template></xsl:when> <!--/Rightarrow A: implies --> - <xsl:when test="starts-with($content,'⇓')"><xsl:value-of select="'\Downarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇓')"/></xsl:call-template></xsl:when> <!--/Downarrow A: down dbl arrow --> -<!-- <xsl:when test="starts-with($content,'⇔')"><xsl:value-of select="'\Leftrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇔')"/></xsl:call-template></xsl:when> /Leftrightarrow A: l&r dbl arrow --> - <xsl:when test="starts-with($content,'⇔')"><xsl:value-of select="'\iff '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇔')"/></xsl:call-template></xsl:when> <!--/iff if and only if --> - <xsl:when test="starts-with($content,'⇕')"><xsl:value-of select="'\Updownarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇕')"/></xsl:call-template></xsl:when> <!--/Updownarrow A: up&down dbl arrow --> - <xsl:when test="starts-with($content,'⇚')"><xsl:value-of select="'\Lleftarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇚')"/></xsl:call-template></xsl:when> <!--/Lleftarrow A: left triple arrow --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⇛')"><xsl:value-of select="'\Rrightarrow '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⇛')"/></xsl:call-template></xsl:when> <!--/Rrightarrow A: right triple arrow --> <!-- Required amssymb --> - -<!-- ====================================================================== --> -<!-- Unicode 3.2 - Mathematical Operators - Range: 2200-22FF - http://www.unicode.org/charts/PDF/U2200.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'∀')"><xsl:value-of select="'\forall '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∀')"/></xsl:call-template></xsl:when> <!--/forall for all --> - <xsl:when test="starts-with($content,'∁')"><xsl:value-of select="'\complement '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∁')"/></xsl:call-template></xsl:when> <!--/complement - complement sign --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∂')"><xsl:value-of select="'\partial '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∂')"/></xsl:call-template></xsl:when> <!--/partial partial differential --> - <xsl:when test="starts-with($content,'∃')"><xsl:value-of select="'\exists '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∃')"/></xsl:call-template></xsl:when> <!--/exists at least one exists --> - <xsl:when test="starts-with($content,'∄')"><xsl:value-of select="'\nexists '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∄')"/></xsl:call-template></xsl:when> <!--/nexists - negated exists --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∅︀')"><xsl:value-of select="'\emptyset '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∅︀')"/></xsl:call-template></xsl:when> <!--/emptyset - zero, slash --> - <xsl:when test="starts-with($content,'∅')"><xsl:value-of select="'\varnothing '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∅')"/></xsl:call-template></xsl:when> <!--/varnothing - circle, slash --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'∆')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∆')"/></xsl:call-template></xsl:when>--> - <xsl:when test="starts-with($content,'∇')"><xsl:value-of select="'\nabla '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∇')"/></xsl:call-template></xsl:when> <!--/nabla del, Hamilton operator --> - <xsl:when test="starts-with($content,'∈')"><xsl:value-of select="'\in '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∈')"/></xsl:call-template></xsl:when> <!--/in R: set membership --> - <xsl:when test="starts-with($content,'∉')"><xsl:value-of select="'\notin '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∉')"/></xsl:call-template></xsl:when> <!--/notin N: negated set membership --> - <xsl:when test="starts-with($content,'∋')"><xsl:value-of select="'\ni '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∋')"/></xsl:call-template></xsl:when> <!--/ni /owns R: contains --> - <xsl:when test="starts-with($content,'∌')"><xsl:value-of select="'\not\ni '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∌')"/></xsl:call-template></xsl:when> <!--negated contains --> - <xsl:when test="starts-with($content,'∏')"><xsl:value-of select="'\prod '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∏')"/></xsl:call-template></xsl:when> <!--/prod L: product operator --> - <xsl:when test="starts-with($content,'∐')"><xsl:value-of select="'\coprod '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∐')"/></xsl:call-template></xsl:when> <!--/coprod L: coproduct operator --> - <xsl:when test="starts-with($content,'∑')"><xsl:value-of select="'\sum '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∑')"/></xsl:call-template></xsl:when> <!--/sum L: summation operator --> - <xsl:when test="starts-with($content,'−')"><xsl:value-of select="'-'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '−')"/></xsl:call-template></xsl:when> <!--B: minus sign --> - <xsl:when test="starts-with($content,'∓')"><xsl:value-of select="'\mp '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∓')"/></xsl:call-template></xsl:when> <!--/mp B: minus-or-plus sign --> - <xsl:when test="starts-with($content,'∔')"><xsl:value-of select="'\dotplus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∔')"/></xsl:call-template></xsl:when> <!--/dotplus B: plus sign, dot above --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'∕')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∕')"/></xsl:call-template></xsl:when>--> - <xsl:when test="starts-with($content,'∖')"><xsl:value-of select="'\setminus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∖')"/></xsl:call-template></xsl:when> <!--/setminus B: reverse solidus --> - <xsl:when test="starts-with($content,'∗')"><xsl:value-of select="'\ast '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∗')"/></xsl:call-template></xsl:when> <!--low asterisk --> - <xsl:when test="starts-with($content,'∘')"><xsl:value-of select="'\circ '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∘')"/></xsl:call-template></xsl:when> <!--/circ B: composite function (small circle) --> - <xsl:when test="starts-with($content,'∙')"><xsl:value-of select="'\bullet '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∙')"/></xsl:call-template></xsl:when> - <xsl:when test="starts-with($content,'√')"><xsl:value-of select="'\surd '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '√')"/></xsl:call-template></xsl:when> <!--/surd radical --> - <xsl:when test="starts-with($content,'∝')"><xsl:value-of select="'\propto '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∝')"/></xsl:call-template></xsl:when> <!--/propto R: is proportional to --> - <xsl:when test="starts-with($content,'∞')"><xsl:value-of select="'\infty '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∞')"/></xsl:call-template></xsl:when> <!--/infty infinity --> -<!-- <xsl:when test="starts-with($content,'∟')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∟')"/></xsl:call-template></xsl:when> right (90 degree) angle --> - <xsl:when test="starts-with($content,'∠')"><xsl:value-of select="'\angle '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∠')"/></xsl:call-template></xsl:when> <!--/angle - angle --> - <xsl:when test="starts-with($content,'∡')"><xsl:value-of select="'\measuredangle '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∡')"/></xsl:call-template></xsl:when> <!--/measuredangle - angle-measured --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∢')"><xsl:value-of select="'\sphericalangle '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∢')"/></xsl:call-template></xsl:when><!--/sphericalangle angle-spherical --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∣')"><xsl:value-of select="'\mid '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∣')"/></xsl:call-template></xsl:when> <!--/mid R: --> - <xsl:when test="starts-with($content,'∤︀')"><xsl:value-of select="'\nshortmid '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∤︀')"/></xsl:call-template></xsl:when> <!--/nshortmid --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∤')"><xsl:value-of select="'\nmid '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∤')"/></xsl:call-template></xsl:when> <!--/nmid --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∥')"><xsl:value-of select="'\parallel '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∥')"/></xsl:call-template></xsl:when> <!--/parallel R: parallel --> - <xsl:when test="starts-with($content,'∦︀')"><xsl:value-of select="'\nshortparallel '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∦︀')"/></xsl:call-template></xsl:when> <!--/nshortparallel N: not short par --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∦')"><xsl:value-of select="'\nparallel '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∦')"/></xsl:call-template></xsl:when> <!--/nparallel N: not parallel --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∧')"><xsl:value-of select="'\wedge '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∧')"/></xsl:call-template></xsl:when> <!--/wedge /land B: logical and --> - <xsl:when test="starts-with($content,'∨')"><xsl:value-of select="'\vee '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∨')"/></xsl:call-template></xsl:when> <!--/vee /lor B: logical or --> - <xsl:when test="starts-with($content,'∩')"><xsl:value-of select="'\cap '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∩')"/></xsl:call-template></xsl:when> <!--/cap B: intersection --> - <xsl:when test="starts-with($content,'∪')"><xsl:value-of select="'\cup '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∪')"/></xsl:call-template></xsl:when> <!--/cup B: union or logical sum --> - <xsl:when test="starts-with($content,'∫')"><xsl:value-of select="'\int '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∫')"/></xsl:call-template></xsl:when> <!--/int L: integral operator --> - <xsl:when test="starts-with($content,'∬')"><xsl:value-of select="'\iint '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∬')"/></xsl:call-template></xsl:when> <!--double integral operator --> <!-- Required amsmath --> - <xsl:when test="starts-with($content,'∭')"><xsl:value-of select="'\iiint '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∭')"/></xsl:call-template></xsl:when> <!--/iiint triple integral operator --> <!-- Required amsmath --> - <xsl:when test="starts-with($content,'∮')"><xsl:value-of select="'\oint '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∮')"/></xsl:call-template></xsl:when> <!--/oint L: contour integral operator --> -<!-- <xsl:when test="starts-with($content,'∯')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∯')"/></xsl:call-template></xsl:when>--> -<!-- <xsl:when test="starts-with($content,'∰')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∰')"/></xsl:call-template></xsl:when>--> -<!-- <xsl:when test="starts-with($content,'∱')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∱')"/></xsl:call-template></xsl:when>--> -<!-- <xsl:when test="starts-with($content,'∲')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∲')"/></xsl:call-template></xsl:when>--> -<!-- <xsl:when test="starts-with($content,'∳')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∳')"/></xsl:call-template></xsl:when>--> - <xsl:when test="starts-with($content,'∴')"><xsl:value-of select="'\therefore '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∴')"/></xsl:call-template></xsl:when> <!--/therefore R: therefore --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'∵')"><xsl:value-of select="'\because '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∵')"/></xsl:call-template></xsl:when> <!--/because R: because --> <!-- Required amssymb --> -<!-- ? --> <xsl:when test="starts-with($content,'∶')"><xsl:value-of select="':'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∶')"/></xsl:call-template></xsl:when> <!--/ratio --> -<!-- ? --> <xsl:when test="starts-with($content,'∷')"><xsl:value-of select="'\colon\colon '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∷')"/></xsl:call-template></xsl:when> <!--/Colon, two colons --> -<!-- ? --> <xsl:when test="starts-with($content,'∸')"><xsl:value-of select="'\dot{-}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∸')"/></xsl:call-template></xsl:when> <!--/dotminus B: minus sign, dot above --> -<!-- <xsl:when test="starts-with($content,'∹')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∹')"/></xsl:call-template></xsl:when> --> -<!-- <xsl:when test="starts-with($content,'∺')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∺')"/></xsl:call-template></xsl:when> minus with four dots, geometric properties --> -<!-- <xsl:when test="starts-with($content,'∻')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∻')"/></xsl:call-template></xsl:when> homothetic --> - <xsl:when test="starts-with($content,'∼')"><xsl:value-of select="'\sim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∼')"/></xsl:call-template></xsl:when> <!--/sim R: similar --> - <xsl:when test="starts-with($content,'∽')"><xsl:value-of select="'\backsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∽')"/></xsl:call-template></xsl:when> <!--/backsim R: reverse similar --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'∾')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∾')"/></xsl:call-template></xsl:when> most positive --> -<!-- <xsl:when test="starts-with($content,'∿')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '∿')"/></xsl:call-template></xsl:when> ac current --> - <xsl:when test="starts-with($content,'≀')"><xsl:value-of select="'\wr '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≀')"/></xsl:call-template></xsl:when> <!--/wr B: wreath product --> - <xsl:when test="starts-with($content,'≁')"><xsl:value-of select="'\nsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≁')"/></xsl:call-template></xsl:when> <!--/nsim N: not similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≂')"><xsl:value-of select="'\eqsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≂')"/></xsl:call-template></xsl:when> <!--/esim R: equals, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≃')"><xsl:value-of select="'\simeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≃')"/></xsl:call-template></xsl:when> <!--/simeq R: similar, equals --> - <xsl:when test="starts-with($content,'≄')"><xsl:value-of select="'\not\simeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≄')"/></xsl:call-template></xsl:when> <!--/nsimeq N: not similar, equals --> - <xsl:when test="starts-with($content,'≅')"><xsl:value-of select="'\cong '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≅')"/></xsl:call-template></xsl:when> <!--/cong R: congruent with --> -<!-- <xsl:when test="starts-with($content,'≆')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≆')"/></xsl:call-template></xsl:when> similar, not equals --> - <xsl:when test="starts-with($content,'≇')"><xsl:value-of select="'\ncong '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≇')"/></xsl:call-template></xsl:when> <!--/ncong N: not congruent with --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≈')"><xsl:value-of select="'\approx '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≈')"/></xsl:call-template></xsl:when> <!--/approx R: approximate --> -<!-- <xsl:when test="starts-with($content,'≉̸')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≉̸')"/></xsl:call-template></xsl:when> not, vert, approximate --> - <xsl:when test="starts-with($content,'≉')"><xsl:value-of select="'\not\approx '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≉')"/></xsl:call-template></xsl:when> <!--/napprox N: not approximate --> - <xsl:when test="starts-with($content,'≊')"><xsl:value-of select="'\approxeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≊')"/></xsl:call-template></xsl:when> <!--/approxeq R: approximate, equals --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'≋')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≋')"/></xsl:call-template></xsl:when> approximately identical to --> -<!-- <xsl:when test="starts-with($content,'≌')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≌')"/></xsl:call-template></xsl:when> /backcong R: reverse congruent --> - <xsl:when test="starts-with($content,'≍')"><xsl:value-of select="'\asymp '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≍')"/></xsl:call-template></xsl:when> <!--/asymp R: asymptotically equal to --> - <xsl:when test="starts-with($content,'≎')"><xsl:value-of select="'\Bumpeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≎')"/></xsl:call-template></xsl:when> <!--/Bumpeq R: bumpy equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≏')"><xsl:value-of select="'\bumpeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≏')"/></xsl:call-template></xsl:when> <!--/bumpeq R: bumpy equals, equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≐')"><xsl:value-of select="'\doteq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≐')"/></xsl:call-template></xsl:when> <!--/doteq R: equals, single dot above --> - <xsl:when test="starts-with($content,'≑')"><xsl:value-of select="'\doteqdot '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≑')"/></xsl:call-template></xsl:when> <!--/doteqdot /Doteq R: eq, even dots --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≒')"><xsl:value-of select="'\fallingdotseq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≒')"/></xsl:call-template></xsl:when> <!--/fallingdotseq R: eq, falling dots --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≓')"><xsl:value-of select="'\risingdotseq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≓')"/></xsl:call-template></xsl:when> <!--/risingdotseq R: eq, rising dots --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'≔')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≔')"/></xsl:call-template></xsl:when> /coloneq R: colon, equals --> -<!-- <xsl:when test="starts-with($content,'≕')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≕')"/></xsl:call-template></xsl:when> /eqcolon R: equals, colon --> - <xsl:when test="starts-with($content,'≖')"><xsl:value-of select="'\eqcirc '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≖')"/></xsl:call-template></xsl:when> <!--/eqcirc R: circle on equals sign --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≗')"><xsl:value-of select="'\circeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≗')"/></xsl:call-template></xsl:when> <!--/circeq R: circle, equals --> <!-- Required amssymb --> -<!-- ? --> <xsl:when test="starts-with($content,'≘')"><xsl:value-of select="'\stackrel{\frown}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≘')"/></xsl:call-template></xsl:when> -<!-- ? --> <xsl:when test="starts-with($content,'≙')"><xsl:value-of select="'\stackrel{\wedge}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≙')"/></xsl:call-template></xsl:when> <!--/wedgeq R: corresponds to (wedge, equals) --> -<!-- ? --> <xsl:when test="starts-with($content,'≚')"><xsl:value-of select="'\stackrel{\vee}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≚')"/></xsl:call-template></xsl:when> <!--logical or, equals --> -<!-- ? --> <xsl:when test="starts-with($content,'≛')"><xsl:value-of select="'\stackrel{\star}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≛')"/></xsl:call-template></xsl:when> <!--equal, asterisk above --> - <xsl:when test="starts-with($content,'≜')"><xsl:value-of select="'\triangleq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≜')"/></xsl:call-template></xsl:when> <!--/triangleq R: triangle, equals --> <!-- Required amssymb --> -<!-- ? --> <xsl:when test="starts-with($content,'≝')"><xsl:value-of select="'\stackrel{\scriptscriptstyle\mathrm{def}}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≝')"/></xsl:call-template></xsl:when> -<!-- ? --> <xsl:when test="starts-with($content,'≞')"><xsl:value-of select="'\stackrel{\scriptscriptstyle\mathrm{m}}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≞')"/></xsl:call-template></xsl:when> -<!-- ? --> <xsl:when test="starts-with($content,'≟')"><xsl:value-of select="'\stackrel{?}{=}'" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≟')"/></xsl:call-template></xsl:when> <!--/questeq R: equal with questionmark --> -<!-- <xsl:when test="starts-with($content,'≠︀')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≠︀')"/></xsl:call-template></xsl:when> not equal, dot --> - <xsl:when test="starts-with($content,'≠')"><xsl:value-of select="'\ne '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≠')"/></xsl:call-template></xsl:when> <!--/ne /neq R: not equal --> -<!-- <xsl:when test="starts-with($content,'≡⃥')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≡⃥')"/></xsl:call-template></xsl:when> reverse not equivalent --> - <xsl:when test="starts-with($content,'≡')"><xsl:value-of select="'\equiv '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≡')"/></xsl:call-template></xsl:when> <!--/equiv R: identical with --> - <xsl:when test="starts-with($content,'≢')"><xsl:value-of select="'\not\equiv '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≢')"/></xsl:call-template></xsl:when> <!--/nequiv N: not identical with --> -<!-- <xsl:when test="starts-with($content,'≣')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≣')"/></xsl:call-template></xsl:when> --> - <xsl:when test="starts-with($content,'≤')"><xsl:value-of select="'\le '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≤')"/></xsl:call-template></xsl:when> <!--/leq /le R: less-than-or-equal --> - <xsl:when test="starts-with($content,'≥')"><xsl:value-of select="'\ge '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≥')"/></xsl:call-template></xsl:when> <!--/geq /ge R: greater-than-or-equal --> - <xsl:when test="starts-with($content,'≦')"><xsl:value-of select="'\leqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≦')"/></xsl:call-template></xsl:when> <!--/leqq R: less, double equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≧')"><xsl:value-of select="'\geqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≧')"/></xsl:call-template></xsl:when> <!--/geqq R: greater, double equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≨')"><xsl:value-of select="'\lneqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≨')"/></xsl:call-template></xsl:when> <!--/lneqq N: less, not double equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≩')"><xsl:value-of select="'\gneqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≩')"/></xsl:call-template></xsl:when> <!--/gneqq N: greater, not dbl equals --> <!-- Required amssymb --> -<!-- <xsl:when test="starts-with($content,'≪̸︀')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≪̸︀')"/></xsl:call-template></xsl:when> not much less than, variant --> -<!-- <xsl:when test="starts-with($content,'≪̸')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≪̸')"/></xsl:call-template></xsl:when> not, vert, much less than --> - <xsl:when test="starts-with($content,'≪')"><xsl:value-of select="'\ll '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≪')"/></xsl:call-template></xsl:when> <!--/ll R: double less-than sign --> -<!-- <xsl:when test="starts-with($content,'≫̸︀')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≫̸︀')"/></xsl:call-template></xsl:when> not much greater than, variant --> -<!-- <xsl:when test="starts-with($content,'≫̸')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≫̸')"/></xsl:call-template></xsl:when> not, vert, much greater than --> - <xsl:when test="starts-with($content,'≫')"><xsl:value-of select="'\gg '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≫')"/></xsl:call-template></xsl:when> <!--/gg R: dbl greater-than sign --> - <xsl:when test="starts-with($content,'≬')"><xsl:value-of select="'\between '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≬')"/></xsl:call-template></xsl:when> <!--/between R: between --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≭')"><xsl:value-of select="'\not\asymp '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≭')"/></xsl:call-template></xsl:when> - <xsl:when test="starts-with($content,'≮')"><xsl:value-of select="'\nless '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≮')"/></xsl:call-template></xsl:when> <!--/nless N: not less-than --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≯')"><xsl:value-of select="'\ngtr '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≯')"/></xsl:call-template></xsl:when> <!--/ngtr N: not greater-than --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≰⃥')"><xsl:value-of select="'\nleq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≰⃥')"/></xsl:call-template></xsl:when> <!--/nleq N: not less-than-or-equal --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≰')"><xsl:value-of select="'\nleqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≰')"/></xsl:call-template></xsl:when> <!--/nleqq N: not less, dbl equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≱⃥')"><xsl:value-of select="'\ngeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≱⃥')"/></xsl:call-template></xsl:when> <!--/ngeq N: not greater-than-or-equal --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≱')"><xsl:value-of select="'\ngeqq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≱')"/></xsl:call-template></xsl:when> <!--/ngeqq N: not greater, dbl equals --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≲')"><xsl:value-of select="'\lesssim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≲')"/></xsl:call-template></xsl:when> <!--/lesssim R: less, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≳')"><xsl:value-of select="'\gtrsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≳')"/></xsl:call-template></xsl:when> <!--/gtrsim R: greater, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≴')"><xsl:value-of select="'\not\lesssim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≴')"/></xsl:call-template></xsl:when> <!--not less, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≵')"><xsl:value-of select="'\not\gtrsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≵')"/></xsl:call-template></xsl:when> <!--not greater, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≶')"><xsl:value-of select="'\lessgtr '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≶')"/></xsl:call-template></xsl:when> <!--/lessgtr R: less, greater --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≷')"><xsl:value-of select="'\gtrless '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≷')"/></xsl:call-template></xsl:when> <!--/gtrless R: greater, less --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≸')"><xsl:value-of select="'\not\lessgtr '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≸')"/></xsl:call-template></xsl:when> <!--not less, greater --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≹')"><xsl:value-of select="'\not\gtrless '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≹')"/></xsl:call-template></xsl:when> <!--not greater, less --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≺')"><xsl:value-of select="'\prec '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≺')"/></xsl:call-template></xsl:when> <!--/prec R: precedes --> - <xsl:when test="starts-with($content,'≻')"><xsl:value-of select="'\succ '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≻')"/></xsl:call-template></xsl:when> <!--/succ R: succeeds --> - <xsl:when test="starts-with($content,'≼')"><xsl:value-of select="'\preccurlyeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≼')"/></xsl:call-template></xsl:when> <!--/preccurlyeq R: precedes, curly eq --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≽')"><xsl:value-of select="'\succcurlyeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≽')"/></xsl:call-template></xsl:when> <!--/succcurlyeq R: succeeds, curly eq --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≾')"><xsl:value-of select="'\precsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≾')"/></xsl:call-template></xsl:when> <!--/precsim R: precedes, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'≿')"><xsl:value-of select="'\succsim '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '≿')"/></xsl:call-template></xsl:when> <!--/succsim R: succeeds, similar --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⊀')"><xsl:value-of select="'\nprec '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊀')"/></xsl:call-template></xsl:when> <!--/nprec N: not precedes --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⊁')"><xsl:value-of select="'\nsucc '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊁')"/></xsl:call-template></xsl:when> <!--/nsucc N: not succeeds --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⊂')"><xsl:value-of select="'\subset '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊂')"/></xsl:call-template></xsl:when> <!--/subset R: subset or is implied by --> - <xsl:when test="starts-with($content,'⊃')"><xsl:value-of select="'\supset '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊃')"/></xsl:call-template></xsl:when> <!--/supset R: superset or implies --> - <xsl:when test="starts-with($content,'⊄')"><xsl:value-of select="'\not\subset '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊄')"/></xsl:call-template></xsl:when> <!--not subset --> - <xsl:when test="starts-with($content,'⊅')"><xsl:value-of select="'\not\supset '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊅')"/></xsl:call-template></xsl:when> <!--not superset --> - <xsl:when test="starts-with($content,'⊆')"><xsl:value-of select="'\subseteq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊆')"/></xsl:call-template></xsl:when> <!--/subseteq R: subset, equals --> - <xsl:when test="starts-with($content,'⊇')"><xsl:value-of select="'\supseteq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊇')"/></xsl:call-template></xsl:when> <!--/supseteq R: superset, equals --> - <xsl:when test="starts-with($content,'⊎')"><xsl:value-of select="'\uplus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊎')"/></xsl:call-template></xsl:when> <!--/uplus B: plus sign in union --> - <xsl:when test="starts-with($content,'⊓')"><xsl:value-of select="'\sqcap '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊓')"/></xsl:call-template></xsl:when> <!--/sqcap B: square intersection --> - <xsl:when test="starts-with($content,'⊔')"><xsl:value-of select="'\bigsqcup '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊔')"/></xsl:call-template></xsl:when> <!--/sqcup B: square union --> - <xsl:when test="starts-with($content,'⊕')"><xsl:value-of select="'\oplus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊕')"/></xsl:call-template></xsl:when> <!--/oplus B: plus sign in circle --> - <xsl:when test="starts-with($content,'⊖')"><xsl:value-of select="'\ominus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊖')"/></xsl:call-template></xsl:when> <!--/ominus B: minus sign in circle --> - <xsl:when test="starts-with($content,'⊗')"><xsl:value-of select="'\otimes '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊗')"/></xsl:call-template></xsl:when> <!--/otimes B: multiply sign in circle --> - <xsl:when test="starts-with($content,'⊘')"><xsl:value-of select="'\oslash '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊘')"/></xsl:call-template></xsl:when> <!--/oslash B: solidus in circle --> -<!-- ? --> <xsl:when test="starts-with($content,'⊙')"><xsl:value-of select="'\odot '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊙')"/></xsl:call-template></xsl:when> <!--/odot B: middle dot in circle --> <!--/bigodot L: circle dot operator --> - <xsl:when test="starts-with($content,'⊟')"><xsl:value-of select="'\boxminus '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊟')"/></xsl:call-template></xsl:when> <!--/boxminus B: minus sign in box --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⊤')"><xsl:value-of select="'\top '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊤')"/></xsl:call-template></xsl:when> <!--/top top --> - <xsl:when test="starts-with($content,'⊥')"><xsl:value-of select="'\perp '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊥')"/></xsl:call-template></xsl:when> <!--/perp R: perpendicular --><!--/bot bottom --> - <xsl:when test="starts-with($content,'⊦')"><xsl:value-of select="'\vdash '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊦')"/></xsl:call-template></xsl:when> <!--/vdash R: vertical, dash --> - <xsl:when test="starts-with($content,'⊧')"><xsl:value-of select="'\vDash '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊧')"/></xsl:call-template></xsl:when> <!--/vDash R: vertical, dbl dash --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⊨')"><xsl:value-of select="'\models '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊨')"/></xsl:call-template></xsl:when> <!--/models R: --> - <xsl:when test="starts-with($content,'⊪')"><xsl:value-of select="'\Vvdash '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⊪')"/></xsl:call-template></xsl:when> <!--/Vvdash R: triple vertical, dash --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⋀')"><xsl:value-of select="'\bigwedge '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋀')"/></xsl:call-template></xsl:when> <!--/bigwedge L: logical or operator --> - <xsl:when test="starts-with($content,'⋁')"><xsl:value-of select="'\bigvee '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋁')"/></xsl:call-template></xsl:when> <!--/bigcap L: intersection operator --> - <xsl:when test="starts-with($content,'⋂')"><xsl:value-of select="'\bigcap '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋂')"/></xsl:call-template></xsl:when> <!--/bigvee L: logical and operator --> - <xsl:when test="starts-with($content,'⋃')"><xsl:value-of select="'\bigcup '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋃')"/></xsl:call-template></xsl:when> <!--/bigcup L: union operator --> - <xsl:when test="starts-with($content,'⋄')"><xsl:value-of select="'\diamond '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋄')"/></xsl:call-template></xsl:when> <!--/diamond B: open diamond --> - <xsl:when test="starts-with($content,'⋅')"><xsl:value-of select="'\cdot '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋅')"/></xsl:call-template></xsl:when> <!--/cdot B: small middle dot --> - <xsl:when test="starts-with($content,'⋆')"><xsl:value-of select="'\star '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋆')"/></xsl:call-template></xsl:when> <!--/star B: small star, filled --> - <xsl:when test="starts-with($content,'⋇')"><xsl:value-of select="'\divideontimes '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋇')"/></xsl:call-template></xsl:when> <!--/divideontimes B: division on times --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⋈')"><xsl:value-of select="'\bowtie '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋈')"/></xsl:call-template></xsl:when> <!--/bowtie R: --> - <xsl:when test="starts-with($content,'⋍')"><xsl:value-of select="'\backsimeq '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋍')"/></xsl:call-template></xsl:when> <!--/backsimeq R: reverse similar, eq --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'⋯')"><xsl:value-of select="'\cdots '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋯')"/></xsl:call-template></xsl:when> <!--/cdots, three dots, centered --> -<!-- <xsl:when test="starts-with($content,'⋰')"><xsl:value-of select="' '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋰')"/></xsl:call-template></xsl:when> three dots, ascending --> - <xsl:when test="starts-with($content,'⋱')"><xsl:value-of select="'\ddots '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⋱')"/></xsl:call-template></xsl:when> <!--/ddots, three dots, descending --> - -<!-- ====================================================================== --> -<!-- Unicode 3.2 - Miscellaneous Technical - Range: 2300-23FF - http://www.unicode.org/charts/PDF/U2300.pdf --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'⌈')"><xsl:value-of select="'\lceil '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⌈')"/></xsl:call-template></xsl:when> <!--/lceil O: left ceiling --> - <xsl:when test="starts-with($content,'⌉')"><xsl:value-of select="'\rceil '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⌉')"/></xsl:call-template></xsl:when> <!--/rceil C: right ceiling --> - <xsl:when test="starts-with($content,'⌊')"><xsl:value-of select="'\lfloor '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⌊')"/></xsl:call-template></xsl:when> <!--/lfloor O: left floor --> - <xsl:when test="starts-with($content,'⌋')"><xsl:value-of select="'\rfloor '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '⌋')"/></xsl:call-template></xsl:when> <!--/rfloor C: right floor --> - <xsl:when test="starts-with($content,'〈')"><xsl:value-of select="'\langle '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '〈')"/></xsl:call-template></xsl:when> <!--/langle O: left angle bracket --> - <xsl:when test="starts-with($content,'〉')"><xsl:value-of select="'\rangle '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '〉')"/></xsl:call-template></xsl:when> <!--/rangle O: right angle bracket --> -<!-- ====================================================================== --> - <xsl:when test="starts-with($content,'□')"><xsl:value-of select="'\square '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '□')"/></xsl:call-template></xsl:when> <!--/square, square --> <!-- Required amssymb --> - <xsl:when test="starts-with($content,'▪')"><xsl:value-of select="'\blacksquare '" /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '▪')"/></xsl:call-template></xsl:when> <!--/blacksquare, square, filled --> <!-- Required amssymb --> - - <xsl:when test='starts-with($content,"'")'><xsl:value-of select='"\text{'}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select='substring-after($content, "'")'/></xsl:call-template></xsl:when><!-- \text required amslatex --> - - <xsl:when test='starts-with($content,"{")'><xsl:value-of select='"\{"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '{')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"}")'><xsl:value-of select='"\}"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '}')"/></xsl:call-template></xsl:when> - -<!--- special characters --> - <xsl:when test='starts-with($content,"$")'><xsl:value-of select='"\$"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '$')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"#")'><xsl:value-of select='"\#"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '#')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"&")'><xsl:value-of select='"\&"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '&')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"%")'><xsl:value-of select='"\%"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '%')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"_")'><xsl:value-of select='"\_"' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '_')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"\")'><xsl:value-of select='"\backslash "' /><xsl:call-template name="replaceEntities"><xsl:with-param name="content" select="substring-after($content, '\')"/></xsl:call-template></xsl:when> - - <xsl:otherwise> - <xsl:value-of select="substring($content,1,1)"/> - <xsl:call-template name="replaceEntities"> - <xsl:with-param name="content" select="substring($content, 2)"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose></xsl:if> -</xsl:template> - -<xsl:template name="replaceMtextEntities"> - <xsl:param name="content"/> - <xsl:if test="string-length($content)>0"> - <xsl:choose> - <xsl:when test="starts-with($content,'   ')"><xsl:value-of select='"\hspace{0.28em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '   ')"/></xsl:call-template></xsl:when> <!-- ThickSpace - space of width 5/18 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.5em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- en space (1/2-em) --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{1em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- emsp - space of width 1em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.33em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- emsp13 - space of width 1/3 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.25em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- ThickSpace - space of width 1/4 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.17em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> <!-- ThinSpace - space of width 3/18 em --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.05em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> - <xsl:when test="starts-with($content,'​')"><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '​')"/></xsl:call-template></xsl:when> <!--zero width space --> - <xsl:when test="starts-with($content,' ')"><xsl:value-of select='"\hspace{0.22em}"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, ' ')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"$")'><xsl:value-of select='"\$"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '$')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"#")'><xsl:value-of select='"\#"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '#')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"&")'><xsl:value-of select='"\&"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '&')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"%")'><xsl:value-of select='"\%"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '%')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"_")'><xsl:value-of select='"\_"' /><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '_')"/></xsl:call-template></xsl:when> - <xsl:when test='starts-with($content,"\")'><xsl:call-template name="replaceMtextEntities"><xsl:with-param name="content" select="substring-after($content, '\')"/></xsl:call-template></xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring($content,1,1)"/> - <xsl:call-template name="replaceMtextEntities"> - <xsl:with-param name="content" select="substring($content, 2)"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> - </xsl:if> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/glayout.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/glayout.xsl deleted file mode 100755 index 6ba600bc..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/glayout.xsl +++ /dev/null @@ -1,223 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: glayout.xsl 149 2006-09-12 21:23:53Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<!-- 3.3.2 mfrac --> -<xsl:template match="m:mfrac"> - <xsl:choose> - <xsl:when test="@linethickness"> - <xsl:text>\genfrac{}{}{</xsl:text> - <xsl:choose> - <xsl:when test="number(@linethickness)"> - <xsl:value-of select="@linethickness div 10"/> - <xsl:text>ex</xsl:text> - </xsl:when> - <xsl:when test="@linethickness='0'"> - <xsl:text>0ex</xsl:text> - </xsl:when> - <xsl:when test="@linethickness='thin'"> - <xsl:text>.05ex</xsl:text> - </xsl:when> - <xsl:when test="@linethickness='medium'"/> - <xsl:when test="@linethickness='thick'"> - <xsl:text>.2ex</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="@linethickness"/> - </xsl:otherwise> - </xsl:choose> - <xsl:text>}{}{</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\frac{</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:if test="@numalign='right'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:apply-templates select="./*[1]"/> - <xsl:if test="@numalign='left'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:text>}{</xsl:text> - <xsl:if test="@denomalign='right'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:apply-templates select="./*[2]"/> - <xsl:if test="@denomalign='left'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:mfrac[@bevelled='true']"> - <xsl:text>\raisebox{1ex}{$</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>$}\!\left/ \!\raisebox{-1ex}{$</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>$}\right.</xsl:text> -</xsl:template> - - -<xsl:template match="m:mroot"> - <xsl:choose> - <xsl:when test="count(./*)=2"> - <xsl:text>\sqrt[</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>]{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <!-- number of argumnets is not 2 - code 25 --> - <xsl:message>exception 25:</xsl:message> - <xsl:text>\text{exception 25:}</xsl:text> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:msqrt"> - <xsl:text>\sqrt{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:mfenced"> - <xsl:choose> - <xsl:when test="@open"> - <xsl:if test="translate(@open,'{}[]()|','{{{{{{{')='{'"> - <xsl:text>\left</xsl:text> - </xsl:if> - <xsl:if test="@open='{' or @open='}'"> - <xsl:text>\</xsl:text> - </xsl:if> - <xsl:if test="translate(@open,'{}[]()|','{{{{{{{')!='{' and (translate(@close,'{}[]()|','{{{{{{{')='{' or not(@close))"> - <xsl:text>\left.</xsl:text> - </xsl:if> - <xsl:value-of select="@open"/> - </xsl:when> - <xsl:otherwise><xsl:text>\left(</xsl:text></xsl:otherwise> - </xsl:choose> - <xsl:variable name="sep"> - <xsl:choose> - <xsl:when test="@separators"> - <xsl:value-of select="translate(@separators,' ','')"/> - </xsl:when> - <xsl:otherwise>,</xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:for-each select="./*"> - <xsl:apply-templates select="."/> - <xsl:if test="not(position()=last())"> - <xsl:choose> - <xsl:when test="position()>string-length($sep)"> - <xsl:value-of select="substring($sep,string-length($sep))"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring($sep,position(),1)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:if> - </xsl:for-each> - <xsl:choose> - <xsl:when test="@close"> - <xsl:if test="translate(@close,'{}[]()|','{{{{{{{')='{'"> - <xsl:text>\right</xsl:text> - </xsl:if> - <xsl:if test="@close='{' or @close='}'"> - <xsl:text>\</xsl:text> - </xsl:if> - <xsl:if test="translate(@close,'{}[]()|','{{{{{{{')!='{' and (translate(@open,'{}[]()|','{{{{{{{')='{' or not(@open))"> - <xsl:text>\right.</xsl:text> - </xsl:if> - <xsl:value-of select="@close"/> - </xsl:when> - <xsl:otherwise><xsl:text>\right)</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:mphantom"> - <xsl:text>\phantom{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:menclose"> - <xsl:choose> - <xsl:when test="@notation = 'actuarial'"> - <xsl:text>\overline{</xsl:text> - <xsl:apply-templates/> - <xsl:text>\hspace{.2em}|}</xsl:text> - </xsl:when> - <xsl:when test="@notation = 'radical'"> - <xsl:text>\sqrt{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\overline{)</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:mrow"> - <xsl:apply-templates/> -</xsl:template> - -<xsl:template match="m:mstyle"> - <xsl:if test="@displaystyle='true'"> - <xsl:text>{\displaystyle </xsl:text> - </xsl:if> - <xsl:if test="@scriptlevel and not(@displaystyle='true')"> - <xsl:text>{</xsl:text> - <xsl:choose> - <xsl:when test="@scriptlevel=0"><xsl:text>\textstyle </xsl:text></xsl:when> - <xsl:when test="@scriptlevel=1"><xsl:text>\scriptstyle </xsl:text></xsl:when> - <xsl:otherwise><xsl:text>\scriptscriptstyle </xsl:text></xsl:otherwise> - </xsl:choose> - </xsl:if> - <xsl:if test="@background"> - <xsl:text>\colorbox[rgb]{</xsl:text> - <xsl:call-template name="color"> - <xsl:with-param name="color" select="@background"/> - </xsl:call-template> - <xsl:text>}{$</xsl:text> - </xsl:if> - <xsl:if test="@color[not(@mathcolor)] or @mathcolor"> - <xsl:text>\textcolor[rgb]{</xsl:text> - <xsl:call-template name="color"> - <xsl:with-param name="color" select="@color|@mathcolor"/> - </xsl:call-template> - <xsl:text>}{</xsl:text> - </xsl:if> - <xsl:apply-templates/> - <xsl:if test="@color[not(@mathcolor)] or @mathcolor"> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="@background"> - <xsl:text>$}</xsl:text> - </xsl:if> - <xsl:if test="@scriptlevel and not(@displaystyle='true')"> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="@displaystyle='true'"> - <xsl:text>}</xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match="m:merror"> - <xsl:apply-templates/> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/mmltex.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/mmltex.xsl deleted file mode 100755 index 79aaa780..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/mmltex.xsl +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - xmlns:html="http://www.w3.org/1999/xhtml" - version='1.0'> - -<xsl:output method="text" indent="no" encoding="UTF-8"/> - -<!-- ====================================================================== --> -<!-- $Id: mmltex.xsl 441 2007-09-16 23:21:16Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<!-- modified by Fletcher T. Penney to handle equation labels --> - -<xsl:include href="tokens.xsl"/> -<xsl:include href="glayout.xsl"/> -<xsl:include href="scripts.xsl"/> -<xsl:include href="tables.xsl"/> -<xsl:include href="entities.xsl"/> -<xsl:include href="cmarkup.xsl"/> - -<xsl:strip-space elements="m:*"/> - -<xsl:template match="m:math[not(@mode) or @mode='inline'][not(@display)] | m:math[@display='inline']"> - <xsl:text>$ </xsl:text> - <xsl:apply-templates/> - <xsl:text>$</xsl:text> -</xsl:template> - -<xsl:template match="m:math[@display='block'] | m:math[@mode='display'][not(@display)]"> - <xsl:text> \[ </xsl:text> - <xsl:apply-templates/> - <xsl:text> \]</xsl:text> -</xsl:template> - -<xsl:template match="m:math[last()=1]"> - <xsl:choose> - <xsl:when test="not(parent::html:p/text() or parent::html:li or parent::html:th or parent::html:td)"> - <xsl:value-of select="parent::html:p/text()"/> - <xsl:text>\begin{equation} -</xsl:text> - <xsl:if test="@id"> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>} -</xsl:text> - </xsl:if> - <xsl:apply-templates/> - <xsl:text> -\end{equation}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>$</xsl:text> - <xsl:apply-templates/> - <xsl:text>$</xsl:text> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/scripts.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/scripts.xsl deleted file mode 100755 index 1395ef0f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/scripts.xsl +++ /dev/null @@ -1,376 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: scripts.xsl 149 2006-09-12 21:23:53Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<xsl:template match="m:munderover"> - <xsl:variable name="base" select="translate(./*[1],' ','')"/> - <xsl:variable name="under" select="translate(./*[2],' ','')"/> - <xsl:variable name="over" select="translate(./*[3],' ','')"/> - <xsl:choose> - <xsl:when test="$over='¯'"> <!-- OverBar - over bar --> - <xsl:text>\overline{</xsl:text> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="under" select="$under"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='︷'"> <!-- OverBrace - over brace --> - <xsl:text>\overbrace{</xsl:text> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="under" select="$under"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='←'"> <!--/leftarrow /gets A: =leftward arrow --> - <xsl:text>\overleftarrow{</xsl:text> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="under" select="$under"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='→'"> <!--/rightarrow /to A: =rightward arrow --> - <xsl:text>\overrightarrow{</xsl:text> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="under" select="$under"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='↔'"> <!--/leftrightarrow A: l&r arrow --> - <xsl:text>\overleftrightarrow{</xsl:text> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="under" select="$under"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='̲'"> <!-- UnderBar - combining low line --> - <xsl:text>\underline{</xsl:text> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="over" select="$over"/> - <xsl:with-param name="pos_over" select="3"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='︸'"> <!-- UnderBrace - under brace --> - <xsl:text>\underbrace{</xsl:text> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="over" select="$over"/> - <xsl:with-param name="pos_over" select="3"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='←'"> <!--/leftarrow /gets A: =leftward arrow --> - <xsl:text>\underleftarrow{</xsl:text> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="over" select="$over"/> - <xsl:with-param name="pos_over" select="3"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='→'"> <!--/rightarrow /to A: =rightward arrow --> - <xsl:text>\underrightarrow{</xsl:text> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="over" select="$over"/> - <xsl:with-param name="pos_over" select="3"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='↔'"> <!--/leftrightarrow A: l&r arrow --> - <xsl:text>\underleftrightarrow{</xsl:text> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="$base"/> - <xsl:with-param name="over" select="$over"/> - <xsl:with-param name="pos_over" select="3"/> - </xsl:call-template> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="translate($base,'∏∐⋂⋃⊔', - '∑∑∑∑∑')='∑'"> -<!-- if $base is operator, such as - ∑ /sum L: summation operator - ∏ /prod L: product operator - ∐ /coprod L: coproduct operator - ⋂ /bigcap - ⋃ /bigcup - ⊔ /bigsqcup ---> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}^{</xsl:text> - <xsl:apply-templates select="./*[3]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\underset{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}{\overset{</xsl:text> - <xsl:apply-templates select="./*[3]"/> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}}</xsl:text> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:mover"> - <xsl:call-template name="mover"> - <xsl:with-param name="base" select="translate(./*[1],' ','')"/> - <xsl:with-param name="over" select="translate(./*[2],' ','')"/> - </xsl:call-template> -</xsl:template> - -<xsl:template match="m:munder"> - <xsl:call-template name="munder"> - <xsl:with-param name="base" select="translate(./*[1],' ','')"/> - <xsl:with-param name="under" select="translate(./*[2],' ','')"/> - </xsl:call-template> -</xsl:template> - -<xsl:template name="mover"> - <xsl:param name="base"/> - <xsl:param name="over"/> - <xsl:param name="pos_over" select="2"/> - <xsl:choose> - <xsl:when test="$over='¯'"> <!-- OverBar - over bar --> - <xsl:text>\overline{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='︷'"> <!-- OverBrace - over brace --> - <xsl:text>\overbrace{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='←'"> <!--/leftarrow /gets A: =leftward arrow --> - <xsl:text>\overleftarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='→'"> <!--/rightarrow /to A: =rightward arrow --> - <xsl:text>\overrightarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='↔'"> <!--/leftrightarrow A: l&r arrow --> - <xsl:text>\overleftrightarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='˜'"> <!-- small tilde --> - <xsl:text>\tilde{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='✓'"> <!-- /checkmark =tick, check mark --> - <xsl:text>\check{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='˙'"> <!-- dot above --> - <xsl:text>\dot{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='¨'"> <!-- DoubleDot - dieresis or umlaut mark --> - <xsl:text>\ddot{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$over='̂' or $over='^'"> <!-- Hat or circ - circumflex accent --> - <xsl:choose> - <xsl:when test="@accent='true'"> - <xsl:text>\widehat{</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\hat{</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:apply-templates select="./*[1]"/><xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="translate($base,'∏∐⋂⋃⊔', - '∑∑∑∑∑')='∑'"> -<!-- if $base is operator, such as - ∑ /sum L: summation operator - ∏ /prod L: product operator - ∐ /coprod L: coproduct operator - ⋂ /bigcap - ⋃ /bigcup - ⊔ /bigsqcup ---> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="./*[$pos_over]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\stackrel{</xsl:text> - <xsl:apply-templates select="./*[$pos_over]"/> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - <!-- - <xsl:text>\overset{</xsl:text> - <xsl:apply-templates select="./*[$pos_over]"/> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text>--> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="munder"> - <xsl:param name="base"/> - <xsl:param name="under"/> - <xsl:choose> - <xsl:when test="$under='̲'"> <!-- UnderBar - combining low line --> - <xsl:text>\underline{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='︸'"> <!-- UnderBrace - under brace --> - <xsl:text>\underbrace{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='←'"> <!--/leftarrow /gets A: =leftward arrow --> - <xsl:text>\underleftarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='→'"> <!--/rightarrow /to A: =rightward arrow --> - <xsl:text>\underrightarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="$under='↔'"> <!--/leftrightarrow A: l&r arrow --> - <xsl:text>\underleftrightarrow{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:when test="translate($base,'∏∐⋂⋃⊔', - '∑∑∑∑∑')='∑'"> -<!-- if $base is operator, such as - ∑ /sum L: summation operator - ∏ /prod L: product operator - ∐ /coprod L: coproduct operator - ⋂ /bigcap - ⋃ /bigcup - ⊔ /bigsqcup ---> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\underset{</xsl:text> <!-- Required AmsMath package --> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:msubsup"> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}_{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}^{</xsl:text> - <xsl:apply-templates select="./*[3]"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:msup"> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}^{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:msub"> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="./*[1]"/> - <xsl:text>}_{</xsl:text> - <xsl:apply-templates select="./*[2]"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:mmultiscripts" mode="mprescripts"> - <xsl:for-each select="m:mprescripts/following-sibling::*"> - <xsl:if test="position() mod 2 and local-name(.)!='none'"> - <xsl:text>{}_{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="not(position() mod 2) and local-name(.)!='none'"> - <xsl:text>{}^{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - </xsl:for-each> - <xsl:apply-templates select="./*[1]"/> - <xsl:for-each select="m:mprescripts/preceding-sibling::*[position()!=last()]"> - <xsl:if test="position()>2 and local-name(.)!='none'"> - <xsl:text>{}</xsl:text> - </xsl:if> - <xsl:if test="position() mod 2 and local-name(.)!='none'"> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="not(position() mod 2) and local-name(.)!='none'"> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - </xsl:for-each> -</xsl:template> - -<xsl:template match="m:mmultiscripts"> - <xsl:choose> - <xsl:when test="m:mprescripts"> - <xsl:apply-templates select="." mode="mprescripts"/> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates select="./*[1]"/> - <xsl:for-each select="*[position()>1]"> - <xsl:if test="position()>2 and local-name(.)!='none'"> - <xsl:text>{}</xsl:text> - </xsl:if> - <xsl:if test="position() mod 2 and local-name(.)!='none'"> - <xsl:text>_{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="not(position() mod 2) and local-name(.)!='none'"> - <xsl:text>^{</xsl:text> - <xsl:apply-templates select="."/> - <xsl:text>}</xsl:text> - </xsl:if> - </xsl:for-each> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tables.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tables.xsl deleted file mode 100755 index b41f6d3e..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tables.xsl +++ /dev/null @@ -1,131 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: tables.xsl 149 2006-09-12 21:23:53Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<xsl:template match="m:mtd[@columnspan]"> - <xsl:text>\multicolumn{</xsl:text> - <xsl:value-of select="@columnspan"/> - <xsl:text>}{c}{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> - <xsl:if test="count(following-sibling::*)>0"> - <xsl:text>& </xsl:text> - </xsl:if> -</xsl:template> - - -<xsl:template match="m:mtd"> - <xsl:if test="@columnalign='right' or @columnalign='center'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:apply-templates/> - <xsl:if test="@columnalign='left' or @columnalign='center'"> - <xsl:text>\hfill </xsl:text> - </xsl:if> - <xsl:if test="count(following-sibling::*)>0"> -<!-- this test valid for Sablotron, another form - test="not(position()=last())". - Also for m:mtd[@columnspan] and m:mtr --> - <xsl:text>& </xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match="m:mtr"> - <xsl:apply-templates/> - <xsl:if test="count(following-sibling::*)>0"> - <xsl:text>\\ </xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template match="m:mtable"> - <xsl:text>\begin{array}{</xsl:text> - <xsl:if test="@frame='solid'"> - <xsl:text>|</xsl:text> - </xsl:if> - <xsl:variable name="numbercols" select="count(./m:mtr[1]/m:mtd[not(@columnspan)])+sum(./m:mtr[1]/m:mtd/@columnspan)"/> - <xsl:choose> - <xsl:when test="@columnalign"> - <xsl:variable name="colalign"> - <xsl:call-template name="colalign"> - <xsl:with-param name="colalign" select="@columnalign"/> - </xsl:call-template> - </xsl:variable> - <xsl:choose> - <xsl:when test="string-length($colalign) > $numbercols"> - <xsl:value-of select="substring($colalign,1,$numbercols)"/> - </xsl:when> - <xsl:when test="string-length($colalign) < $numbercols"> - <xsl:value-of select="$colalign"/> - <xsl:call-template name="generate-string"> - <xsl:with-param name="text" select="substring($colalign,string-length($colalign))"/> - <xsl:with-param name="count" select="$numbercols - string-length($colalign)"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$colalign"/> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="generate-string"> - <xsl:with-param name="text" select="'c'"/> - <xsl:with-param name="count" select="$numbercols"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> - <xsl:if test="@frame='solid'"> - <xsl:text>|</xsl:text> - </xsl:if> - <xsl:text>}</xsl:text> - <xsl:if test="@frame='solid'"> - <xsl:text>\hline </xsl:text> - </xsl:if> - <xsl:apply-templates/> - <xsl:if test="@frame='solid'"> - <xsl:text>\\ \hline</xsl:text> - </xsl:if> - <xsl:text>\end{array}</xsl:text> -</xsl:template> - -<xsl:template name="colalign"> - <xsl:param name="colalign"/> - <xsl:choose> - <xsl:when test="contains($colalign,' ')"> - <xsl:value-of select="substring($colalign,1,1)"/> - <xsl:call-template name="colalign"> - <xsl:with-param name="colalign" select="substring-after($colalign,' ')"/> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring($colalign,1,1)"/> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="generate-string"> -<!-- template from XSLT Standard Library v1.1 --> - <xsl:param name="text"/> - <xsl:param name="count"/> - - <xsl:choose> - <xsl:when test="string-length($text) = 0 or $count <= 0"/> - - <xsl:otherwise> - <xsl:value-of select="$text"/> - <xsl:call-template name="generate-string"> - <xsl:with-param name="text" select="$text"/> - <xsl:with-param name="count" select="$count - 1"/> - </xsl:call-template> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tokens.xsl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tokens.xsl deleted file mode 100755 index fff92b08..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/MultiMarkdownXSLTMathML/tokens.xsl +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version='1.0' encoding="UTF-8"?> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:m="http://www.w3.org/1998/Math/MathML" - version='1.0'> - -<!-- ====================================================================== --> -<!-- $Id: tokens.xsl 282 2006-11-19 16:28:39Z fletcher $ - This file is part of the XSLT MathML Library distribution. - See ./README or http://www.raleigh.ru/MathML/mmltex for - copyright and other information - Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a --> -<!-- ====================================================================== --> - -<xsl:template match="m:mi|m:mn|m:mo|m:mtext|m:ms"> - <xsl:call-template name="CommonTokenAtr"/> -</xsl:template> - -<!-- 3.2.9 mglyph --> -<xsl:template match="m:mglyph"> - <xsl:text>\textcolor{red}{</xsl:text> - <xsl:value-of select="@alt"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template name="mi"> - <xsl:choose> - <xsl:when test="string-length(normalize-space(.))>1 and not(@mathvariant)"> - <xsl:text>\mathrm{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="mn"> - <xsl:choose> - <xsl:when test="string(number(.))='NaN' and not(@mathvariant)"> - <xsl:text>\mathrm{</xsl:text> - <xsl:apply-templates/> - <xsl:text>}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates/> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<!-- 3.2.5 Math Operator --> -<xsl:template name="mo"> -<xsl:if test="translate(normalize-space(.),'()[]}|','{{{{{{')='{'"> - <xsl:choose> - <xsl:when test="not(@stretchy='false') and count(preceding-sibling::m:mo[translate(normalize-space(.),'()[]}|','{{{{{{')='{'])mod 2=0 and following-sibling::m:mo[1][not(@stretchy='false')][translate(normalize-space(.),'()[]}|','{{{{{{')='{']"> - <xsl:text>\left</xsl:text> - </xsl:when> - <xsl:when test="not(@stretchy='false') and count(preceding-sibling::m:mo[translate(normalize-space(.),'()[]}|','{{{{{{')='{'])mod 2=1 and preceding-sibling::m:mo[1][not(@stretchy='false')][translate(normalize-space(.),'()[]}|','{{{{{{')='{']"> - <xsl:text>\right</xsl:text> - </xsl:when> - </xsl:choose> -</xsl:if> -<xsl:apply-templates/> -</xsl:template> - -<xsl:template name="mtext"> - <xsl:variable name="content"> - <xsl:call-template name="replaceMtextEntities"> - <xsl:with-param name="content" select="normalize-space(.)"/> - </xsl:call-template> - </xsl:variable> - <xsl:text>\text{</xsl:text> - <xsl:value-of select="$content"/> - <xsl:text>}</xsl:text> -</xsl:template> - -<xsl:template match="m:mspace"> - <xsl:text>\phantom{\rule</xsl:text> - <xsl:if test="@depth"> - <xsl:text>[-</xsl:text> - <xsl:value-of select="@depth"/> - <xsl:text>]</xsl:text> - </xsl:if> - <xsl:text>{</xsl:text> - <xsl:if test="not(@width)"> - <xsl:text>0ex</xsl:text> - </xsl:if> - <xsl:value-of select="@width"/> - <xsl:text>}{</xsl:text> - <xsl:if test="not(@height)"> - <xsl:text>0ex</xsl:text> - </xsl:if> - <xsl:value-of select="@height"/> - <xsl:text>}}</xsl:text> -</xsl:template> - -<xsl:template name="ms"> - <xsl:choose> - <xsl:when test="@lquote"><xsl:value-of select="@lquote"/></xsl:when> - <xsl:otherwise><xsl:text>''</xsl:text></xsl:otherwise> - </xsl:choose><xsl:apply-templates/><xsl:choose> - <xsl:when test="@rquote"><xsl:value-of select="@rquote"/></xsl:when> - <xsl:otherwise><xsl:text>''</xsl:text></xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="CommonTokenAtr"> - <xsl:if test="@mathbackground"> - <xsl:text>\colorbox[rgb]{</xsl:text> - <xsl:call-template name="color"> - <xsl:with-param name="color" select="@mathbackground"/> - </xsl:call-template> - <xsl:text>}{$</xsl:text> - </xsl:if> - <xsl:if test="@color[not(@mathcolor)] or @mathcolor"> <!-- Note: @color is deprecated in MathML 2.0 --> - <xsl:text>\textcolor[rgb]{</xsl:text> - <xsl:call-template name="color"> - <xsl:with-param name="color" select="@color|@mathcolor"/> - </xsl:call-template> - <xsl:text>}{</xsl:text> - </xsl:if> - <xsl:if test="@mathvariant"> - <xsl:choose> - <xsl:when test="@mathvariant='normal'"> - <xsl:text>\mathrm{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='bold'"> - <xsl:text>\mathbf{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='italic'"> - <xsl:text>\mathit{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='bold-italic'"> <!-- not supported --> - <xsl:text>\mathit{</xsl:text> - <xsl:message>The value bold-italic for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='double-struck'"> <!-- Required amsfonts --> - <xsl:text>\mathbb{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='bold-fraktur'"> <!-- not supported --> - <xsl:text>\mathfrak{</xsl:text> - <xsl:message>The value bold-fraktur for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='script'"> - <xsl:text>\mathcal{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='bold-script'"> <!-- not supported --> - <xsl:text>\mathcal{</xsl:text> - <xsl:message>The value bold-script for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='fraktur'"> <!-- Required amsfonts --> - <xsl:text>\mathfrak{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='sans-serif'"> - <xsl:text>\mathsf{</xsl:text> - </xsl:when> - <xsl:when test="@mathvariant='bold-sans-serif'"> <!-- not supported --> - <xsl:text>\mathsf{</xsl:text> - <xsl:message>The value bold-sans-serif for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='sans-serif-italic'"> <!-- not supported --> - <xsl:text>\mathsf{</xsl:text> - <xsl:message>The value sans-serif-italic for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='sans-serif-bold-italic'"> <!-- not supported --> - <xsl:text>\mathsf{</xsl:text> - <xsl:message>The value sans-serif-bold-italic for mathvariant is not supported</xsl:message> - </xsl:when> - <xsl:when test="@mathvariant='monospace'"> - <xsl:text>\mathtt{</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>{</xsl:text> - <xsl:message>Error at mathvariant attribute</xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:if> - <xsl:call-template name="selectTemplate"/> - <xsl:if test="@mathvariant"> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="@color or @mathcolor"> - <xsl:text>}</xsl:text> - </xsl:if> - <xsl:if test="@mathbackground"> - <xsl:text>$}</xsl:text> - </xsl:if> -</xsl:template> - -<xsl:template name="selectTemplate"> - <xsl:choose> - <xsl:when test="local-name(.)='mi'"> - <xsl:call-template name="mi"/> - </xsl:when> - <xsl:when test="local-name(.)='mn'"> - <xsl:call-template name="mn"/> - </xsl:when> - <xsl:when test="local-name(.)='mo'"> - <xsl:call-template name="mo"/> - </xsl:when> - <xsl:when test="local-name(.)='mtext'"> - <xsl:call-template name="mtext"/> - </xsl:when> - <xsl:when test="local-name(.)='ms'"> - <xsl:call-template name="ms"/> - </xsl:when> - </xsl:choose> -</xsl:template> - -<xsl:template name="color"> -<!-- NB: Variables colora and valueColor{n} only for Sablotron --> - <xsl:param name="color"/> - <xsl:variable name="colora" select="translate($color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/> - <xsl:choose> - <xsl:when test="starts-with($colora,'#') and string-length($colora)=4"> - <xsl:variable name="valueColor"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,2,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="$valueColor div 15"/><xsl:text>,</xsl:text> - <xsl:variable name="valueColor1"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,3,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="$valueColor1 div 15"/><xsl:text>,</xsl:text> - <xsl:variable name="valueColor2"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,4,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="$valueColor2 div 15"/> - </xsl:when> - <xsl:when test="starts-with($colora,'#') and string-length($colora)=7"> - <xsl:variable name="valueColor1"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,2,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="valueColor2"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,3,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="($valueColor1*16 + $valueColor2) div 255"/><xsl:text>,</xsl:text> - <xsl:variable name="valueColor1a"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,4,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="valueColor2a"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,5,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="($valueColor1a*16 + $valueColor2a) div 255"/><xsl:text>,</xsl:text> - <xsl:variable name="valueColor1b"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,6,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:variable name="valueColor2b"> - <xsl:call-template name="Hex2Decimal"> - <xsl:with-param name="arg" select="substring($colora,7,1)"/> - </xsl:call-template> - </xsl:variable> - <xsl:value-of select="($valueColor1b*16 + $valueColor2b) div 255"/> - </xsl:when> -<!-- ======================= if color specifed as an html-color-name ========================================== --> - <xsl:when test="$colora='aqua'"><xsl:text>0,1,1</xsl:text></xsl:when> - <xsl:when test="$colora='black'"><xsl:text>0,0,0</xsl:text></xsl:when> - <xsl:when test="$colora='blue'"><xsl:text>0,0,1</xsl:text></xsl:when> - <xsl:when test="$colora='fuchsia'"><xsl:text>1,0,1</xsl:text></xsl:when> - <xsl:when test="$colora='gray'"><xsl:text>.5,.5,.5</xsl:text></xsl:when> - <xsl:when test="$colora='green'"><xsl:text>0,.5,0</xsl:text></xsl:when> - <xsl:when test="$colora='lime'"><xsl:text>0,1,0</xsl:text></xsl:when> - <xsl:when test="$colora='maroon'"><xsl:text>.5,0,0</xsl:text></xsl:when> - <xsl:when test="$colora='navy'"><xsl:text>0,0,.5</xsl:text></xsl:when> - <xsl:when test="$colora='olive'"><xsl:text>.5,.5,0</xsl:text></xsl:when> - <xsl:when test="$colora='purple'"><xsl:text>.5,0,.5</xsl:text></xsl:when> - <xsl:when test="$colora='red'"><xsl:text>1,0,0</xsl:text></xsl:when> - <xsl:when test="$colora='silver'"><xsl:text>.75,.75,.75</xsl:text></xsl:when> - <xsl:when test="$colora='teal'"><xsl:text>0,.5,.5</xsl:text></xsl:when> - <xsl:when test="$colora='white'"><xsl:text>1,1,1</xsl:text></xsl:when> - <xsl:when test="$colora='yellow'"><xsl:text>1,1,0</xsl:text></xsl:when> - <xsl:otherwise> - <xsl:message>Exception at color template</xsl:message> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template name="Hex2Decimal"> - <xsl:param name="arg"/> - <xsl:choose> - <xsl:when test="$arg='f'"> - <xsl:value-of select="15"/> - </xsl:when> - <xsl:when test="$arg='e'"> - <xsl:value-of select="14"/> - </xsl:when> - <xsl:when test="$arg='d'"> - <xsl:value-of select="13"/> - </xsl:when> - <xsl:when test="$arg='c'"> - <xsl:value-of select="12"/> - </xsl:when> - <xsl:when test="$arg='b'"> - <xsl:value-of select="11"/> - </xsl:when> - <xsl:when test="$arg='a'"> - <xsl:value-of select="10"/> - </xsl:when> - <xsl:when test="translate($arg, '0123456789', '9999999999')='9'"> <!-- if $arg is number --> - <xsl:value-of select="$arg"/> - </xsl:when> - <xsl:otherwise> - <xsl:message>Exception at Hex2Decimal template</xsl:message> - </xsl:otherwise> - </xsl:choose> -</xsl:template> - -<xsl:template match="m:*/text()"> - <xsl:call-template name="replaceEntities"> - <xsl:with-param name="content" select="normalize-space()"/> - </xsl:call-template> -</xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/README.txt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/README.txt deleted file mode 100755 index 95e72273..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/README.txt +++ /dev/null @@ -1,103 +0,0 @@ -NAME - MultiMarkdown - -SYNOPSIS - MultiMarkdown.pl [ --html4tags ] [ --version ] [ -shortversion ] [ - *file* ... ] - -DESCRIPTION - MultiMarkdown is an extended version of Markdown. See the website for - more information. - - http://fletcherpenney.net/multimarkdown/ - - Markdown is a text-to-HTML filter; it translates an easy-to-read / - easy-to-write structured text format into HTML. Markdown's text format - is most similar to that of plain text email, and supports features such - as headers, *emphasis*, code blocks, blockquotes, and links. - - Markdown's syntax is designed not as a generic markup language, but - specifically to serve as a front-end to (X)HTML. You can use span-level - HTML tags anywhere in a Markdown document, and you can use block level - HTML tags (like <div> and <table> as well). - - For more information about Markdown's syntax, see: - - http://daringfireball.net/projects/markdown/ - -OPTIONS - Use "--" to end switch parsing. For example, to open a file named "-z", - use: - - Markdown.pl -- -z - - --html4tags - Use HTML 4 style for empty element tags, e.g.: - - <br> - - instead of Markdown's default XHTML style tags, e.g.: - - <br /> - - -v, --version - Display Markdown's version number and copyright information. - - -s, --shortversion - Display the short-form version number. - -BUGS - To file bug reports or feature requests (other than topics listed in the - Caveats section above) please send email to: - - support@daringfireball.net (for Markdown issues) - - owner@fletcherpenney.net (for MultiMarkdown issues) - - Please include with your report: (1) the example input; (2) the output - you expected; (3) the output (Multi)Markdown actually produced. - -AUTHOR - John Gruber - http://daringfireball.net/ - - PHP port and other contributions by Michel Fortin - http://michelf.com/ - - MultiMarkdown changes by Fletcher Penney - http://fletcherpenney.net/ - -COPYRIGHT AND LICENSE - Original Markdown Code Copyright (c) 2003-2007 John Gruber - <http://daringfireball.net/> All rights reserved. - - MultiMarkdown changes Copyright (c) 2005-2009 Fletcher T. Penney - <http://fletcherpenney.net/> All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name "Markdown" nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - - This software is provided by the copyright holders and contributors "as - is" and any express or implied warranties, including, but not limited - to, the implied warranties of merchantability and fitness for a - particular purpose are disclaimed. In no event shall the copyright owner - or contributors be liable for any direct, indirect, incidental, special, - exemplary, or consequential damages (including, but not limited to, - procurement of substitute goods or services; loss of use, data, or - profits; or business interruption) however caused and on any theory of - liability, whether in contract, strict liability, or tort (including - negligence or otherwise) arising in any way out of the use of this - software, even if advised of the possibility of such damage. - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/align_elastic_tabstops.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/align_elastic_tabstops.pl deleted file mode 100755 index 54f5252f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/align_elastic_tabstops.pl +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env perl -# -# $Id: align_elastic_tabstops.pl 525 2009-06-15 18:45:44Z fletcher $ -# -# Adds support for a modified implementation of "elastic tabstops": -# <http://nickgravgaard.com/elastictabstops/> -# -# Also formats for the new MMD table syntax -# -# Copyright (c) 2009 Fletcher T. Penney -# <http://fletcherpenney.net/> -# -# MultiMarkdown Version 2.0.b6 -# -# TODO: no padding if only 1 line in group -# - -$cur_indent = 0; # Number of leading tabs -$cur_columns = 0; # Number of columns -@bits = (); # Store previous lines -$output = ""; -$minimum_width = 3; -$padding = 1; -$g_is_final_newline = 0; -$g_empty_line = 0; - -# Iteratively work through text: -# Does line match number of opening tabs? -# Does line match number of total tabs? -# As long as yes, process, and move to next line - -while ($line = <>) { - if ($line =~ /\n$/) { - # Require two blank lines to reset - if ($g_empty_line == 1) { - $g_is_final_newline = 1; - } else { - $g_empty_line = 1; - $g_is_final_newline = 0; - } - } else { - $g_empty_line = 0; - $g_is_final_newline = 0; - } - chomp $line; - - # Trim spaces before and after tabs - $line =~ s/ +\t/\t/g; - $line =~ s/\t +/\t/g; - - # Add space to end of line to prevent deleting lines with only tabs - $line .= " "; - - $line =~ /^(\t*)/; -# if (length($1) == $cur_indent) { -# This check was disabled to simplify things - may need to add it back - if ($cur_indent == $cur_indent) { - # We're at the same level of indentation - # Do we have the same number of columns? - $columns = ($line =~ tr/\t/\t/); - if ($columns == $cur_columns) { - # yup - push @bits, [split (/\t/, $line)]; - } else { - # Nope - new block - $output .= alignbits(@bits); - $line =~ /^(\t*)/; - $cur_indent = length($1); - $cur_columns = ($line =~ tr/\t/\t/); - @bits = (); - push @bits, [split (/\t/, $line)]; - } - } else { - # New indent, so it's a new block - - $output .= alignbits(@bits); - $line =~ /^(\t*)/; - $cur_indent = length($1); - $cur_columns = ($line =~ tr/\t/\t/); - @bits = (); - push @bits, [split (/\t/, $line)]; - } -} - -$output .= alignbits(@bits); - - -print $output; - -sub alignbits{ - my(@bits) = @_; - my $output = ""; - my @width = (); - - # Remove space that was added to end of lines - for $i (0 .. $#bits) { - $bits[$i][$#{$bits[$i]}] =~ s/ $//; - } - - for $i (0 .. $#bits) { - for $j (0 .. $#{$bits[$i]}) { - if ($bits[$i][$j] =~ /^\s*\-+\s*$/) { - # Special case for table headers - $bits[$i][$j] = "-"; - } - if (length($bits[$i][$j]) + $padding > $width[$j]) { - $width[$j] = length($bits[$i][$j]) + $padding; - } - } - } - - for $i (0 .. $#bits) { - for $j (0 .. $#{$bits[$i]} ) { - if ($bits[$i][$j] =~ /^\s*\-+\s*$/) { - # Special case for table headers - $bits[$i][$j] = "-" x ($width[$j]); - } - if ($bits[$i][$j] =~ /^[\d\$\-\.,]*\d[,\d\$\-\.]*$/) { - # Numeric field - $output .= ( $width[$j] > $minimum_width || $bits[$i][$j] =~ /\S/ )? sprintf "%*s", $width[$j], $bits[$i][$j] : ""; - # $output .= " " x $padding if ($j != $#{$bits[$i]}); - } else { - # Non-numeric field - if ($j == $#{$bits[$i]}) { - $output .= $bits[$i][$j]; - } else { - $output .= ($width[$j] > $minimum_width || $bits[$i][$j] =~ /\S/ )? sprintf "%-*s", $width[$j], $bits[$i][$j] : ""; - } - } - if ($j == $#{$bits[$i]}) { - $output .= "\n"; - } else { - $output .= "\t"; - } - } - } - - if (! $g_is_final_newline) { - $output =~ s/\n$//s; - } - return $output; -} - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/autocomplete.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/autocomplete.pl deleted file mode 100755 index 9216ea9a..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/autocomplete.pl +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env perl -# -# $Id: autocomplete.pl 499 2008-03-23 13:03:19Z fletcher $ -# -# Find possible autocompletions in a MultiMarkdown file -# ( Designed to be called from TextMate, but the concept can be used elsewhere. ) -# -# -# Copyright (c) 2006-2008 Fletcher T. Penney -# <http://fletcherpenney.net/> -# -# MultiMarkdown Version 2.0.b6 -# - -# local $/; -$word_to_match = $ENV{'TM_CURRENT_WORD'}; - -# Read in source file -$multimarkdown_file = $ENV{'TM_FILEPATH'}; - - -open(MULTI, "<$multimarkdown_file"); -local $/; -$multi_source = <MULTI>; - -if ( $word_to_match =~ s/^\^/\\^/) { - - # Match Footnotes - # the '^' makes things tricky - - $multi_source =~ s/^(?:\[($word_to_match.+?)\]:)?.*$/$1/img; - $word_to_match =~ s/\\\^/^/g; - -} elsif ($word_to_match =~ /^\#/) { - - # Match MultiMarkdown Citations - - $multi_source =~ s/^(?:\[($word_to_match.+?)\]:)?.*$/$1/img; - - #BibTex Citations - - # Slurp any .bib files - open (BIB, "cd $ENV{'TM_DIRECTORY'}; cat *.bib |"); - local $/; - $bibtex = <BIB>; - $word_only = $word_to_match; - $word_only =~ s/^#//; - $bibtex =~ s{ - ^(?:@.*?\{($word_only.+?)\,)?.*$ - }{ - $match = $1; - $match =~ s/(...)/#$1/; - $match; - }xeimg; - $multi_source .= $bibtex; - -} else { - - # Match regular anchor (link or image) - - $multi_source =~ s{ - ^(?: - (?:\#{1,6}\s*|\[) - ($word_to_match.+?) # Match Heading - (?:\]:|\s*\#) - )? - (?:.*\[($word_to_match.+?)\]>>)? # Match Equation label - (?:\[($word_to_match.+?)\])? # Match image or anchor def - (?:\[.*?\]\[($word_to_match.+?)\])? # Match Table label (or at least a label - .*?$ # at the beginning of a line) - }{ - "$1$2$3$4"; - }gemix; -} - -# Strip blank lines -$multi_source =~ s/\n\s*\n/\n/gs; - -# Fix case (TextMate won't autocomplete different cases) -if ($word_to_match =~ /^\^/) { - $multi_source =~ s/\^+$word_to_match/$word_to_match/igm; -} else { - $multi_source =~ s/^$word_to_match/$word_to_match/igm; -} - -# Print - -print $multi_source; diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/cleancites.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/cleancites.pl deleted file mode 100755 index 7d9147be..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/cleancites.pl +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env perl -# -# $Id: cleancites.pl 499 2008-03-23 13:03:19Z fletcher $ -# -# Adds some utilities for making fancier citations with natbib -# -# Copyright (c) 2006-2008 Fletcher T. Penney -# <http://fletcherpenney.net/> -# -# MultiMarkdown Version 2.0.b6 -# - - -undef $/; -$data = <>; - -# Clean up strings of \cites into one citation - -while ($data =~ s{ - (\\cite[tp]?\*?)((?:\[(?:see|e\.g\.)\]\[\])?\{)(.*?)\} - \1\{(.*?)\} -}{ - $1 . "$2$3, $4\}"; -}egmx) { - - -} - - -# And clean up custom cites that got escaped -# e.g. $\backslash$citeyearpar\{Dewey:1997\} - -$data =~ s{ - \$\\backslash\$(cite.*?) - \\\{(.*?)\\\} -}{ - "\\" . $1 . "{$2}"; -}egmx; - -print $data; \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/mmd_merge.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/mmd_merge.pl deleted file mode 100755 index 50021215..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/mmd_merge.pl +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env perl -# -# mmd_merge.pl -# -# Combine text documents to create a MultiMarkdown structured document -# -# Copyright (c) 2009 Fletcher T. Penney -# <http://fletcherpenney.net/> -# -# MultiMarkdown Version 2.0.b6 -# - -use strict; -use warnings; - -my $data = ""; -my $line = ""; - -my $count = @ARGV; - -if ($count == 0) { - # We're in "stdin mode" - - # process stdin - undef $/; - my $data .= <>; - - mergeLines($data); -} else { - foreach(@ARGV) { - open(INPUT, "<$_"); - local $/; - my $data = <INPUT>; - close(INPUT); - mergeLines($data); - } -} - - -sub mergeLines { - my $file = shift; - - while ($file =~ /^(.*?)$/mg) { - $line = $1; - if (($line !~ /^\s*$/) && ($line !~ /^\#/)) { - $line =~ s/ {4}/\t/g; - $line =~ s/\s*$//; - my $indent = ($line =~ tr/\t/\t/); - $line =~ /^\s*(.*?)\s*$/; - - open(FILE, "<$1"); - local $/; - my $file = <FILE>; - close FILE; - - for (my $i = 0; $i< $indent; $i++) { - $file =~ s/^\#/##/gm; - } - - $data .= $file; - } - } - - print $data; -} - -=head1 NAME - -mmd_merge.pl - Combine text documents to create a MultiMarkdown structured -document. - -=head1 SYNOPSIS - -mmd_merge.pl [file ...] - - -=head1 DESCRIPTION - -This script is designed to allow you to use different files to store parts of -a larger MultiMarkdown document, making it easier to reorganize the document -if you so desire. Each line consists of the url or filename of the next -document. If the line is indented, each tab (or 4 spaces) will increase the -header level of the document by 1 (similar to the `Base Header Level` -metadata). Blank lines are ignored. Lines starting with `#` are treated as -comments. Only metadata from the first file would be properly handles, since -it would be the only metadata at the top of the new "virtual" document. - -=head1 SEE ALSO - -Designed for use with MultiMarkdown. - -<http://fletcherpenney.net/multimarkdown/> - -Mailing list support for MultiMarkdown: - -<http://groups.google.com/group/multimarkdown/> - - OR - -<mailto:multimarkdown@googlegroups.com> - -=head1 AUTHOR - -Fletcher T. Penney, E<lt>owner@fletcherpenney.netE<gt> - -=head1 COPYRIGHT AND LICENSE - -Copyright (C) 2009 by Fletcher T. Penney - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the - Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA - -=cut diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/table_cleanup.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/table_cleanup.pl deleted file mode 100755 index f6445342..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/Utilities/table_cleanup.pl +++ /dev/null @@ -1,354 +0,0 @@ -#!/usr/bin/env perl -# -# $Id: table_cleanup.pl 499 2008-03-23 13:03:19Z fletcher $ -# -# Cleanup the spacing and alignment of MultiMarkdown tables -# -# Used by my TextMate Bundle, but can be used elsewhere as well -# -# Copyright (c) 2006-2008 Fletcher T. Penney -# <http://fletcherpenney.net/> -# -# MultiMarkdown Version 2.0.b6 -# - -local $/; -$text = <>; - -my %max_width = (); -my @alignments = (); - - -# Reusable regexp's to match table -my $less_than_tab = 3; - -my $line_start = qr{ - [ ]{0,$less_than_tab} -}mx; - -my $table_row = qr{ - [^\n]*?\|[^\n]*?\n -}mx; - -my $first_row = qr{ - $line_start - \S+.*?\|.*?\n -}mx; - -my $table_rows = qr{ - (?:\n?$table_row) -}mx; - -my $table_caption = qr{ - $line_start - \[.*?\][ \t]*\n -}mx; - -my $table_divider = qr{ - $line_start - [\|\-\+\:\.][ \-\+\|\:\.]*?\|[ \-\+\|\:\.]* -}mx; - -my $whole_table = qr{ - ($table_caption)? # Optional caption - ($first_row # First line must start at beginning - ($table_row)*?)? # Header Rows - $table_divider # Divider/Alignment definitions - $table_rows+ # Body Rows - \n?[^\n]*?\|[^\n]*? # Allow last row not to have a "\n" for cleaning while editing - ($table_caption)? # Optional caption -}mx; - - -# Find whole tables, then break them up and process them - -$text =~ s{ - ^($whole_table) # Whole table in $1 - (\n|\Z) # End of file or 2 blank lines -}{ - my $table = $1 . "\n"; - my $table_original = $table; - $result = ""; - @alignments = (); - %max_width = (); - - # Strip Caption and Summary - $table =~ s/^$line_start\[\s*(.*?)\s*\](\[\s*(.*?)\s*\])?[ \t]*$//m; - $table =~ s/\n$line_start\[\s*(.*?)\s*\][ \t]*\n/\n/s; - - $table = "\n" . $table; - # Need to be greedy - $table =~ s/\n($table_divider)\n($table_rows+)//s; - my $alignment_string = $1; - my $body = $2; - my $header = $table; - - # Process column alignment - while ($alignment_string =~ /\|?\s*(.+?)\s*(\||\Z)/gs) { - my $cell = $1; - if ($cell =~ /\:$/) { - if ($cell =~ /^\:/) { - push(@alignments,"center"); - } else { - push(@alignments,"right"); - } - } else { - if ($cell =~ /^\:/) { - push(@alignments,"left"); - } else { - if (($cell =~ /^\./) || ($cell =~ /\.$/)) { - push(@alignments,"char"); - } else { - push(@alignments,""); - } - } - } - } - - $table = $header . "\n" . $body; - - # First pass - find widest cell in each column (for single column cells only) - foreach my $line (split(/\n/, $table)) { - my $count = 0; - while ($line =~ /(\|?\s*[^\|]+?\s*(\|+|\Z))/gs) { - my $cell = $1; # Width of actual text in cell - my $ending = $2; # Is there a trailing `|`? - - if ($ending =~ /\|\|/) { - # For first pass, do single cells only - $count += (length($ending)); - next; - } - - setWidth($count, $cell); - $count++ - } - } - - # Second pass - handle cells that span multiple rows - foreach my $line (split(/\n/, $table)) { - my $count = 0; - while ($line =~ /(\|?\s*[^\|]+?\s*(\|+|\Z))/gs) { - my $cell = $1; # Width of actual text in cell - my $ending = $2; # Is there a trailing `|`? - - if ($ending =~ /\|\|/) { - setWidth($count, $cell); - $count += (length($ending)); - next; - } - $count++ - } - } - - # Fix length of alignment definitions - - $table_original =~ s{ - \n($table_divider)\n - }{ - my $divider = $1; - my $count = 0; - $divider =~ s{ - (\|?)\s*([^\|]+?)\s*(\|+|\Z) - }{ - my $opening = $1; - my $cell = $2; - my $ending = $3; - my $result = ""; - - my $goal_length = $max_width{$count} -3; - if ($count == 0) { - if ($opening eq ""){ - $goal_length++; - } else { - $goal_length--; - } - } - if ($cell =~ /^\:/) { - $goal_length--; - $result = ":"; - } - if ($cell =~ /\:$/) { - $goal_length--; - } - for (my $i=0;$i < $goal_length;$i++){ - $result.="-"; - } - if ($cell =~ /\:$/) { - $result .=":"; - } - - $count++; - $opening . "$result" . $ending; - }xsge; - "\n$divider\n"; - }sxe; - - # Second pass - reformat table cells to appropriate width - - $table_original =~ s{ - # match each line - (.*) - }{ - $line = $1; - my $result = ""; - my $count = 0; - - # Now process them - - if (($line =~ /^\[/) && ($line !~ /\|/)){ - $result .= $line; - } else { - while ($line =~ /(\|?)\s*([^\|]+?)\s*(\|+|\Z)/gs) { - my $opening = $1; - my $cell = $2; - my $ending = $3; - my $lead = 0; - my $pad_lead = 0; - my $pad_trail = 0; - my $len = length($2); # Length of actual contents - - # Not all first column cells have a leading `|` - if ($count > 0) { - $pad_lead = 1; - } elsif (length($opening) > 0) { - $pad_lead = 1; - } - - # Buffer before trailing `|` - if (length($ending) > 0) { - $pad_trail = 1; - } - - # How much space to fill? (account for multiple columns) - my $width = 0; - if ($ending =~ /\|/) { - $width = maxWidth($count,length($ending)); - } else { - $width = maxWidth($count, 1); - } - - if ($alignments[$count] =~ /^(left)?$/) { - $lead = $len + $pad_lead; - $trail = $width - $lead - length($opening); - } - - if ($alignments[$count] =~ /^right$/) { - if ($count == 0) { - if ($opening eq "") { - $opening = "|"; - $pad_lead = 1; - $width++; - } - } - $trail = $pad_trail+length($ending); - $lead = $width - $trail - length($opening); - } - - if ($alignments[$count] =~ /^center$/) { - if ($count == 0) { - if ($opening eq "") { - $opening = "|"; - $pad_lead = 1; - $width++; - } - } - # Divide padding space - my $pad_total = $width - $len; - $pad_lead = int($pad_total/2)+1; - $pad_trail = $pad_total - $pad_lead; - $trail = $pad_trail+length($ending); - $lead = $width - $trail - length($opening); - } - - $result .= $opening . sprintf("%*s", $lead, $cell) . sprintf("%*s", $trail, $ending); - - if ($ending =~ /\|\|/) { - $count += (length($ending)); - } else { - $count++; - } - } - } - - $result; - }xmge; - - $table_original; -}xsge; - - -print $text; - - -sub maxWidth { - # Return the total width for a range of columns - my ($start_col, $cols) = @_; - my $total = 0; - - for (my $i = $start_col;$i < ($start_col + $cols);$i++) { - $total += $max_width{$i}; - } - - return $total; -} - -sub setWidth { - # Set widths for column(s) based on cell contents - my ($start_col, $cell) = @_; - - $cell =~ /(\|?)\s*([^\|]+?)\s*(\|+|\Z)/; - my $opening = $1; - my $contents = $2; - my $closing = $3; - - my $padding = 0; - - $padding++ if (length($opening) > 0); # For first cell - $padding++ if ($start_col > 0); # All cells except first definitely have an opening `|` - $padding++ if (length($closing) > 0); - - $contents =~ s/&\s*(.*?)\s*$/$1/; # I don't remember what this does - - my $cell_length = length($contents) + $padding + length($opening) + length($closing); - - if ($closing =~ /\|\|/) { - # This cell spans multiple columns - my @current_max = (); - my $cols = length($closing); - my $current_total = 0; - - for (my $i = $start_col;$i < ($start_col + $cols);$i++) { - $current_total += $max_width{$i}; - } - - if ($current_total < $cell_length) { - my %columns = (); - # Proportionally divide extra space - for (my $i = $start_col; $i < ($start_col + $cols);$i++) { - $max_width{$i} = int($max_width{$i} * ($cell_length/$current_total)); - $columns{$i} = $max_width{$i}; - } - $current_total = 0; - for (my $i = $start_col;$i < ($start_col + $cols);$i++) { - $current_total += $max_width{$i}; - } - my $missing = $cell_length - $current_total; - - # Now find the amount lost from fractions, and add back to largest columns - foreach my $a_col (sort { $max_width{$b} <=> $max_width{$a} }keys %columns) { - if ($missing > 0) { - $max_width{$a_col}++; - $missing--; - } - } - } - - } else { - if ($max_width{$start_col}< $cell_length) { - $max_width{$start_col} = $cell_length; - } - } - -} - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-poetry.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-poetry.xslt deleted file mode 100755 index 91056109..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-poetry.xslt +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output with the twoside option - - Format as 6.0in x 9.0in page size - - Code blocks display in poetry mode - - MultiMarkdown Version 2.0.b6 - - $Id: 6x9book-poetry.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="6x9book.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - - <!-- code block => Now it's poetry --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\begin{adjustwidth}{4em}{4em} -\setverbatimfont{\normalfont} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-real-poetry.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-real-poetry.xslt deleted file mode 100755 index fe02e472..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book-real-poetry.xslt +++ /dev/null @@ -1,212 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output with the twoside option - - Format as 6.0 in x 9.0 in page size - - Code blocks display in poetry mode using `clean-text-poetry` - - MultiMarkdown Version 2.0.b6 - - $Id: 6x9book-real-poetry.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="6x9book.xslt"/> - <xsl:import href="clean-text-poetry.xslt"/> - - <xsl:template name="latex-paper-size"> - <xsl:text>%% Widen indentions for poetry -\setlength{\vgap}{\vindent} - -%%% need more space for ToC page numbers -\setpnumwidth{2.55em} -\setrmarg{3.55em} - -%%% need more space for ToC section numbers -\cftsetindents{part}{0em}{3em} -\cftsetindents{chapter}{0em}{3em} -\cftsetindents{section}{3em}{3em} -\cftsetindents{subsection}{4.5em}{3.9em} -\cftsetindents{subsubsection}{8.4em}{4.8em} -\cftsetindents{paragraph}{10.7em}{5.7em} -\cftsetindents{subparagraph}{12.7em}{6.7em} - -%%% need more space for LoF numbers -\cftsetindents{figure}{0em}{3.0em} - -%%% and do the same for the LoT -\cftsetindents{table}{0em}{3.0em} - -%%% set up the page layout -\setstocksize{9in}{6in} -\settrimmedsize{9in}{6in}{*} % Use entire page -\settrims{0pt}{0pt} - -\setlrmarginsandblock{1.2in}{0.8in}{*} -\setulmarginsandblock{1in}{1in}{*} - -\setmarginnotes{0.1pt}{0.2in}{\onelineskip} -\setheadfoot{\onelineskip}{2\onelineskip} -\setheaderspaces{*}{2\onelineskip}{*} - -%% Fix for the companion style header issue -%% http://www.codecomments.com/message459639.html - -\setlength{\headwidth}{\textwidth} - \addtolength{\headwidth}{\marginparsep} - - \addtolength{\headwidth}{\marginparwidth} - \makerunningwidth{companion}{\headwidth} - \makeheadrule{companion}{\headwidth}{\normalrulethickness} - \makeheadposition{companion}{flushright}{flushleft}{}{} - -\checkandfixthelayout - -</xsl:text> - </xsl:template> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:text>\newcommand{\attrib}[1]{% -\nopagebreak{\raggedleft\footnotesize #1\par}} - - -</xsl:text> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-footer"> - <xsl:text>% -% Back Matter -% - -\backmatter -%\appendixpage - -% Bibliography -\bibliographystyle{\mybibliostyle} -\bibliocommand - -% Glossary -\printglossary - - -% Indexes -\def\indexname{Index of Titles} -\printindex - -\def\indexname{Index of First Lines} -\printindex[firstlines] - -\end{document} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,twoside]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage{modified-bringhurst} % Available from http://fletcherpenney.net/ -\makeglossary -\makeindex -\makeindex[firstlines] - -\def\mychapterstyle{companion} -\def\mypagestyle{companion} -\def\revision{} - - </xsl:text> - </xsl:template> - - <!-- code block => Now it's poetry --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\settowidth{\versewidth}{</xsl:text> - <xsl:call-template name="longest-line"> - <xsl:with-param name="source"> - <xsl:value-of select="."/> - </xsl:with-param> - </xsl:call-template> - <xsl:text>} -\begin{verse} %[\versewidth] -</xsl:text> - <!-- Create an index of first lines --> - <xsl:text>\index[firstlines]{</xsl:text> - <xsl:value-of select="substring-before(., $newline)"/> - <xsl:text>} -</xsl:text> - <xsl:call-template name="poetry-text"> - <xsl:with-param name="source"> - <xsl:value-of select="."/> - </xsl:with-param> - </xsl:call-template> - <xsl:text> -\end{verse} -</xsl:text> - <!-- Display attribution if present --> - <xsl:text>\attrib{</xsl:text> - <xsl:apply-templates select="preceding-sibling::*[1][local-name() = 'p']/html:em" mode="attrib"/> - <xsl:text>} -\vspace*{\fill} - - -</xsl:text> - <apply-templates select="preceding-sibling::*[1][local-name() = 'p']" mode="attrib"/> - </xsl:template> - - <xsl:template match="html:h3"> - <xsl:if test="preceding-sibling::*[1][local-name() != 'h2']"> - <xsl:text>\pagebreak -</xsl:text> - </xsl:if> -<xsl:text>\vspace*{\fill} -\poemtitle{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\index{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- attrib (italics following verse) --> - <!-- ignore it by itself --> - <xsl:template match="html:p[following-sibling::*[1][local-name() = 'pre']]"> - </xsl:template> - - <xsl:template match="html:p" mode="attrib"> - <xsl:text>\attrib{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book.xslt deleted file mode 100755 index f38c7b26..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/6x9book.xslt +++ /dev/null @@ -1,116 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output with the twoside option - - Format as 6.0in x 9.0in page size - - MultiMarkdown Version 2.0.b6 - - $Id: 6x9book.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,twoside]{memoir} -\usepackage{layouts}[2001/04/29] -\makeglossary -\makeindex - -\def\mychapterstyle{companion} -\def\mypagestyle{companion} -\def\revision{} - -</xsl:text> - </xsl:template> - - <!-- Change paper size for 6 x 9 book --> - - <xsl:template name="latex-paper-size"> - <xsl:text>%%% need more space for ToC page numbers -\setpnumwidth{2.55em} -\setrmarg{3.55em} - -%%% need more space for ToC section numbers -\cftsetindents{part}{0em}{3em} -\cftsetindents{chapter}{0em}{3em} -\cftsetindents{section}{3em}{3em} -\cftsetindents{subsection}{4.5em}{3.9em} -\cftsetindents{subsubsection}{8.4em}{4.8em} -\cftsetindents{paragraph}{10.7em}{5.7em} -\cftsetindents{subparagraph}{12.7em}{6.7em} - -%%% need more space for LoF numbers -\cftsetindents{figure}{0em}{3.0em} - -%%% and do the same for the LoT -\cftsetindents{table}{0em}{3.0em} - -%%% set up the page layout -\setstocksize{9in}{6in} -\settrimmedsize{9in}{6in}{*} % Use entire page -\settrims{0pt}{0pt} - -\setlrmarginsandblock{1in}{0.6in}{*} -\setulmarginsandblock{1in}{0.8in}{*} - -\setmarginnotes{0.1pt}{0.2in}{\onelineskip} -\setheadfoot{\onelineskip}{2\onelineskip} -\setheaderspaces{*}{2\onelineskip}{*} - -%% Fix for the companion style header issue -%% http://www.codecomments.com/message459639.html - -\setlength{\headwidth}{\textwidth} - \addtolength{\headwidth}{\marginparsep} - - \addtolength{\headwidth}{\marginparwidth} - \makerunningwidth{companion}{\headwidth} - \makeheadrule{companion}{\headwidth}{\normalrulethickness} - \makeheadposition{companion}{flushright}{flushleft}{}{} - -\checkandfixthelayout - -</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article-natbib.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article-natbib.xslt deleted file mode 100755 index fd8b30b9..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article-natbib.xslt +++ /dev/null @@ -1,106 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Article converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Adds support for natbib citations to the memoir article class. - - MultiMarkdown Version 2.0.b6 - - $Id: article-natbib.xslt 517 2008-09-12 19:37:52Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - <xsl:import href="natbib-support.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[oneside,article]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage{xmpincl} % Seems to be required to get the pdf to generate?? -\usepackage[round,sort&compress]{natbib} -\setcitestyle{super,open={},close={},comma} - -\makeglossary -\makeindex - -\def\mychapterstyle{default} -\def\mypagestyle{headings} -\def\revision{} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-title"> - <xsl:text> -% Title -\mainmatter - -\maketitle - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-copyright"> - <xsl:text>% Copyright Info -\setlength{\parindent}{0pt} - -\ifx\mycopyright\undefined -\else - \textcopyright{} \mycopyright -\fi - -\revision - -\setlength{\parindent}{1em} - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:text>% -% Main Content -% - - -% Layout settings -\setlength{\parindent}{1em} - -</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article.xslt deleted file mode 100755 index bc064221..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/article.xslt +++ /dev/null @@ -1,106 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Article converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class with the article option for output - - MultiMarkdown Version 2.0.b6 - - $Id: article.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[oneside,article]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage{xmpincl} % Seems to be required to get the pdf to generate?? - -\makeglossary -\makeindex - -\def\mychapterstyle{default} -\def\mypagestyle{headings} -\def\revision{} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-title"> - <xsl:text> -\chapterstyle{\mychapterstyle} -\pagestyle{\mypagestyle} - -% Title -\mainmatter - -\maketitle - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-copyright"> - <xsl:text>% Copyright Info -\setlength{\parindent}{0pt} - -\ifx\mycopyright\undefined -\else - \textcopyright{} \mycopyright -\fi - -\revision - -\setlength{\parindent}{1em} - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:text>% -% Main Content -% - - -% Layout settings -\setlength{\parindent}{1em} - -</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/beamer.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/beamer.xslt deleted file mode 100755 index be09506a..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/beamer.xslt +++ /dev/null @@ -1,426 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Beamer converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX beamer class to generate a series of PDF "slides" - - MultiMarkdown Version 2.0.b6 - - TODO: Currently only <?-> is recognized as dot-notation, <1-2> is not ---> - -<!-- -# Copyright (C) 2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - xmlns:beamer="http://fletcherpenney.net/mmd/" - exclude-result-prefixes="beamer" - version="1.0"> - - <xsl:import href="xhtml2latex.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template match="html:body"> - <body> - <xsl:apply-templates select="html:h1|html:h2|html:h3|html:h4|html:h5|html:h6"/> - </body> - </xsl:template> - - <xsl:template name="latex-footer"> -% <xsl:text>\begin{frame}[allowframebreaks] -%\frametitle{Bibliography} - -% Bibliography -%\bibliographystyle{\mybibliostyle} -%\bibliocommand -%\end{frame} - -\end{document} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[ignorenonframetext,11pt]{beamer} -%\documentclass[onesided]{article} -%\usepackage{graphicx} -%\usepackage{beamerarticle} - -\usepackage{beamerthemesplit} -\usepackage{patchcmd} -\usepackage{tabulary} % Support longer table cells -\usepackage{booktabs} % Support better tables - -\usepackage{subfigure} - -\let\oldSubtitle\subtitle - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-intro"> - <xsl:text> -\ifx\subtitle\undefined -\else - \oldSubtitle{\subtitle} -\fi - -\ifx\affiliation\undefined -\else - \institute{\affiliation} -\fi - -\ifx\event\undefined -\else - \date[\mydate]{\mydate~ / \event } -\fi - -\ifx\graphic\undefined -\else - \pgfdeclareimage[height=0.75cm]{university-logo}{\graphic} - \logo{\pgfuseimage{university-logo}} -\fi - -\ifx\theme\undefined -\else - \usetheme{\theme} -\fi - - -\AtBeginSubsection[] -{ - \begin{frame} - \frametitle{Outline} - \tableofcontents[currentsection,currentsubsection] - \end{frame} -} - -%\title{\mytitle} - -% Show "current/total" slide counter in footer -\title[\mytitle\hspace{2em}\insertframenumber/ -\inserttotalframenumber]{\mytitle} - - -\author{\myauthor} -\addtolength{\parskip}{\baselineskip} - -\begin{document} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-paper-size"> - <xsl:text></xsl:text> - </xsl:template> - - <xsl:template name="latex-copyright"> - <xsl:text></xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:text></xsl:text> - </xsl:template> - - <xsl:template name="latex-header"> - <xsl:text>\def\myauthor{Author} % In case these were not included in metadata -\def\mytitle{Title} -\def\mykeywords{} -\def\mybibliostyle{plain} -\def\bibliocommand{} -</xsl:text> -</xsl:template> - - <xsl:template name="latex-title"> - <xsl:text>\frame{\setlength\parskip{0pt}\titlepage} - - -</xsl:text> - </xsl:template> - - <!-- Convert headers into chapters, etc --> - - <xsl:template match="html:h1"> - <xsl:text>\part{</xsl:text> - <xsl:value-of select="."/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - <xsl:text>\frame{\partpage} -</xsl:text> - <xsl:variable name="children" select="count(following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1]/following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1])"/> - - <xsl:apply-templates select="following-sibling::*[position() <= $children]"/> - </xsl:template> - - <xsl:template match="html:h2"> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - string-length('*')) + 1) = '*'"> - <xsl:text>\section*{}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\section{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - - <xsl:variable name="children" select="count(following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1]/following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1])"/> - - <xsl:apply-templates select="following-sibling::*[position() <= $children]"/> - </xsl:template> - - <xsl:template match="html:h3"> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - string-length('*')) + 1) = '*'"> - <xsl:text>\subsection*{}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\subsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - - <xsl:variable name="children" select="count(following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1]/following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1])"/> - - <xsl:apply-templates select="following-sibling::*[position() <= $children]"/> - </xsl:template> - - <xsl:template match="html:h4"> - <xsl:text>\begin{frame}</xsl:text> - <xsl:variable name="children" select="count(following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1]/following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1])"/> - <xsl:if test="count(following-sibling::*[position() <= $children][local-name() = 'pre']) > 0"> - <xsl:text>[fragile]</xsl:text> - </xsl:if> - <xsl:text> -\frametitle{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - - <xsl:apply-templates select="following-sibling::*[position() <= $children]"/> - <xsl:text> -\end{frame} - </xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h5"> - <xsl:text disable-output-escaping="yes"> -<![CDATA[\mode<article>{]]></xsl:text> - <xsl:variable name="children" select="count(following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1]/following-sibling::*) - count(following-sibling::*[local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h3' or local-name() = 'h4' or local-name() = 'h5' or local-name() = 'h6'][1])"/> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - - <xsl:apply-templates select="following-sibling::*[position() <= $children]"/> - <xsl:text>} -</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h6"> - <xsl:text>\subsubsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - - <!-- code block --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\begin{semiverbatim} -</xsl:text> - <xsl:value-of select="./html:code"/> - <xsl:text> -\end{semiverbatim} - -</xsl:text> - </xsl:template> - - <!-- no code, so treat as poetry --> - <xsl:template match="html:pre"> - <xsl:text>\begin{adjustwidth}{4em}{4em} -\setverbatimfont{\normalfont} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - - <!-- epigraph (a blockquote immediately following a header 1-3) --> - <xsl:template match="html:blockquote[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3' ]]"> - <xsl:text>\epigraph{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>} - -</xsl:text> - </xsl:template> - - <!-- epigraph author (a blockquote within blockquote) --> - <xsl:template match="html:blockquote[last()][parent::*[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3']]] "> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:template> - - <!-- images --> - <xsl:template match="html:img"> - <xsl:text>\begin{figure} - </xsl:text> - <xsl:if test="@id"> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>} - </xsl:text> - </xsl:if> - <xsl:text>\begin{center} - </xsl:text> - <xsl:text>\includegraphics[keepaspectratio,width=\textwidth, height=.75\textheight]{</xsl:text> - <xsl:value-of select="@src"/> - <xsl:text>} - \end{center} - </xsl:text> - <xsl:if test="@title"> - <xsl:if test="not(@title = '')"> - <xsl:text>\caption{</xsl:text> - <xsl:apply-templates select="@title"/> - <xsl:text>} - </xsl:text> - </xsl:if> - </xsl:if> - <xsl:text>\end{figure} - </xsl:text> - </xsl:template> - - <xsl:template match="html:img" mode="images"> - <xsl:if test="@id"> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>} -</xsl:text> - </xsl:if> - <xsl:text>\subfigure</xsl:text> - <xsl:if test="@title"> - <xsl:if test="not(@title = '')"> - <xsl:text>[</xsl:text> - <xsl:apply-templates select="@title"/> - <xsl:text>]</xsl:text> - </xsl:if> - </xsl:if> - <xsl:text>{\includegraphics[keepaspectratio,width=\textwidth, height=.75\textheight]{</xsl:text> - <xsl:value-of select="@src"/> - <xsl:text>}}\quad -</xsl:text> - </xsl:template> - - <!-- paragraph with multiple images --> - <xsl:template match="html:p[count(child::html:img) > '1']"> - <xsl:text>\begin{figure} -\begin{center} -</xsl:text> - - <xsl:apply-templates select="node()" mode="images"/> - <xsl:text>\end{center} -\end{figure} -</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:div[@class='bibliography']"> - <!-- close the preceding frame first - we want to be our own slide(s) --> - <xsl:text>\end{frame} - -\part{Bibliography} -\begin{frame}[allowframebreaks] -\frametitle{Bibliography} -\begin{thebibliography}{</xsl:text> - <xsl:value-of select="count(div[@id])"/> - <xsl:text>} -</xsl:text> - <xsl:apply-templates select="html:div"/> - <xsl:text> - -\end{thebibliography} - -</xsl:text> - </xsl:template> - - <!-- list item --> - <xsl:template match="html:li"> - <xsl:text> -\item</xsl:text> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - 1)) = '->'"> - <xsl:value-of select="substring(node(), (string-length(node()) - 3))"/> - <xsl:text> </xsl:text> - <xsl:value-of select="substring(node(),1,(string-length(node()) - 4))"/> - </xsl:when> - <xsl:otherwise> - <xsl:text> </xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-allow-latex.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-allow-latex.xslt deleted file mode 100755 index 6f8a8313..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-allow-latex.xslt +++ /dev/null @@ -1,278 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML2LaTeX replace-substring utility file by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Extracted this routine so that it can be changed more easily by users. - - This file is responsible for cleaning up special characters into - a LaTeX-friendly format. - - The `allow-latex` variant does not protect characters needed to express - LaTeX commands. Use with caution. - - MultiMarkdown Version 2.0.b6 - - $Id: clean-text-allow-latex.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <!-- Pass XHTML Comments through unaltered (useful for including - raw LaTeX in your MultiMarkdown document) --> - <xsl:template match="comment()"> - <xsl:value-of select="."/> - </xsl:template> - - <!-- It's easier (for now) to rewrite the entire function, since - certain substitutions need to be deleted... --> - <xsl:template name="clean-text"> - <xsl:param name="source" /> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="$source"/> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>%20</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text> </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>e.g. </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>e.g.\ </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>i.e. </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>i.e.\ </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>—</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>---</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>–</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>--</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>‘</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>`</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>”</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>''</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>“</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>``</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>’</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>'</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>%</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\%</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>&</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\&</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>_</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\_</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>©</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\textcopyright{}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>#</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\#</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>\$\backslash\$</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$\backslash$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>~</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\ensuremath{\sim}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text> </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>~</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text><</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$<$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>></xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$>$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>↓</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>${\displaystyle \downarrow}$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>↑</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>${\displaystyle \uparrow}$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>…</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>{\ldots}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-poetry.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-poetry.xslt deleted file mode 100755 index 98138e4c..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-poetry.xslt +++ /dev/null @@ -1,129 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<!-- XHTML2LaTeX replace-substring utility file by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Extracted this routine so that it can be changed more easily by users. - - This file is responsible for cleaning up special characters into - a LaTeX-friendly format. - - Modified to support features needed for poetry. - - MultiMarkdown Version 2.0.b6 - - $Id: clean-text-poetry.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <!-- It's still built on the original --> - <xsl:import href="clean-text.xslt"/> - - - <!-- Find the longest line of a poem --> - <xsl:template name="longest-line"> - <xsl:param name="source"/> - <xsl:variable name="first"> - <xsl:value-of select="substring-before($source, $newline)"/> - </xsl:variable> - <xsl:variable name="rest"> - <xsl:value-of select="substring-after($source, $newline)"/> - </xsl:variable> - <xsl:choose> - <xsl:when test="contains($rest, $newline)"> - <xsl:variable name="second"> - <xsl:call-template name="longest-line"> - <xsl:with-param name="source"> - <xsl:value-of select="$rest"/> - </xsl:with-param> - </xsl:call-template> - </xsl:variable> - <xsl:choose> - <xsl:when test="string-length($first) > string-length($second)"> - <xsl:value-of select="$first"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$second"/> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$rest"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - - <!-- This version is for blocks of poetry. In additional to the usual - cleanup, it changes the newlines for poetry typesetting, and replaces - leading spaces or tabs with \vin --> - <xsl:template name="poetry-text"> - <xsl:param name="source"/> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="clean-text-utility"> - <xsl:with-param name="source"> - <xsl:value-of select="$source"/> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:value-of select="$newline"/> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text> \\</xsl:text> - <xsl:value-of select="$newline"/> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:value-of select="$newline"/> - <xsl:text> \\</xsl:text> - <xsl:value-of select="$newline"/> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>!</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text> </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\vin </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - -</xsl:stylesheet> diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-rtf.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-rtf.xslt deleted file mode 100755 index 43ff5c9f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text-rtf.xslt +++ /dev/null @@ -1,220 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- xhtml2rtf replace-substring utility file by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Extracted this routine so that it can be changed more easily by users. - - This file is responsible for cleaning up special characters into - an RTF-friendly format. - - MultiMarkdown Version 2.0.b6 - ---> - -<!-- -# Copyright (C) 2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <!-- Pass XHTML Comments through unaltered (useful for including - raw RTF in your MultiMarkdown document) --> - <xsl:template match="comment()"> - <xsl:value-of select="."/> - </xsl:template> - - <!-- This is a "pointer" function that can be over-ridden easily - in order to add quick additional changes --> - <xsl:template name="clean-text"> - <xsl:param name="source"/> - <xsl:call-template name="clean-text-utility"> - <xsl:with-param name="source"> - <xsl:value-of select="$source"/> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - - <!-- This is the "real" function that does the work. You can also - override this if you need to make some real changes --> - <xsl:template name="clean-text-utility"> - <xsl:param name="source" /> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="$source"/> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>\</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\\</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>’</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\'92</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>‘</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\'91</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>“</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\'93</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>”</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\'94</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>–</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\endash </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>—</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\emdash </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>…</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\'85</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>{</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\{</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>}</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - - - <!-- replace-substring routine by Doug Tidwell - XSLT, O'Reilly Media --> - <xsl:template name="replace-substring"> - <xsl:param name="original" /> - <xsl:param name="substring" /> - <xsl:param name="replacement" select="''"/> - <xsl:variable name="first"> - <xsl:choose> - <xsl:when test="contains($original, $substring)" > - <xsl:value-of select="substring-before($original, $substring)"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$original"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="middle"> - <xsl:choose> - <xsl:when test="contains($original, $substring)" > - <xsl:value-of select="$replacement"/> - </xsl:when> - <xsl:otherwise> - <xsl:text></xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="last"> - <xsl:choose> - <xsl:when test="contains($original, $substring)"> - <xsl:choose> - <xsl:when test="contains(substring-after($original, $substring), $substring)"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="substring-after($original, $substring)" /> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:value-of select="$substring" /> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:value-of select="$replacement" /> - </xsl:with-param> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring-after($original, $substring)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:otherwise> - <xsl:text></xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:value-of select="concat($first, $middle, $last)"/> - </xsl:template> -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text.xslt deleted file mode 100755 index e13d3377..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/clean-text.xslt +++ /dev/null @@ -1,336 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML2LaTeX replace-substring utility file by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Extracted this routine so that it can be changed more easily by users. - - This file is responsible for cleaning up special characters into - a LaTeX-friendly format. - - MultiMarkdown Version 2.0.b6 - - $Id: clean-text.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <!-- Pass XHTML Comments through unaltered (useful for including - raw LaTeX in your MultiMarkdown document) --> - <xsl:template match="comment()"> - <xsl:value-of select="."/> - </xsl:template> - - <!-- This is a "pointer" function that can be over-ridden easily - in order to add quick additional changes --> - <xsl:template name="clean-text"> - <xsl:param name="source"/> - <xsl:call-template name="clean-text-utility"> - <xsl:with-param name="source"> - <xsl:value-of select="$source"/> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - - <!-- This is the "real" function that does the work. You can also - override this if you need to make some real changes --> - <xsl:template name="clean-text-utility"> - <xsl:param name="source" /> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="$source"/> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>%20</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text> </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>\</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$\backslash$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>e.g. </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>e.g.\ </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>i.e. </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>i.e.\ </xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>—</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>---</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>–</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>--</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>‘</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>`</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>”</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>''</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>“</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>``</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>’</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>'</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>%</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\%</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>&</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\&</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>}</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>{</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\{</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>_</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\_</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>$</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>©</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\textcopyright{}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>#</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\#</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>\$\backslash\$</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$\backslash$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>^</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\^{}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>~</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>\ensuremath{\sim}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text> </xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>~</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text><</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$<$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>></xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>$>$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>↓</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>${\displaystyle \downarrow}$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>↑</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>${\displaystyle \uparrow}$</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:text>…</xsl:text> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:text>{\ldots}</xsl:text> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-envelope.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-envelope.xslt deleted file mode 100755 index 0253ab5d..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-envelope.xslt +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- Custom Envelope by Fletcher Penney - - Demonstration of how to customize the default envelope template - in MultiMarkdown with default return address information. - - MultiMarkdown Version 2.0.b6 - - $Id: custom-envelope.xslt 525 2009-06-15 18:45:44Z fletcher $ ---> - -<!-- -# Copyright (C) 2008-2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="envelope.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="return-address-defaults"> - <xsl:text>% Default info for return address -% These should include '\\' where appropriate for line endings - -\def\defaultemail{\href{mailto:owner@fletcherpenney.net}{owner@fletcherpenney.net} \\} -\def\defaultposition{} -\def\defaultdepartment{\coverlogo \normalfont \\} -\def\defaultaddress{123 Fake St \\ Charleston, SC 29401 \\} -\def\defaultweb{} - -% Define the fl ligature for linux compatibility -\chardef\fl="FB02 - -% Define Logo or something for upper left corner -\def\coverlogo{ -\font\logo="Didot:mapping=tex-text" at 24pt \logo -\href{http://fletcherpenney.net/}{\fl etcherpenney.\color{accent}net\color{black}} -} - - -% Use my stylesheet -\usepackage{fletcherpenney} - -</xsl:text> - </xsl:template> - - - -</xsl:stylesheet> diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-letterhead.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-letterhead.xslt deleted file mode 100755 index 2ee5f175..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/custom-letterhead.xslt +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- Custom Letterhead by Fletcher Penney - - Demonstration of how to customize the default letterhead template - in MultiMarkdown with default return address information, as - well as a custom logotype. - - Uses the fletcherpenney.sty file available at: - http://fletcherpenney.net/XSLT_Files - - To include a signature, add `Graphic Signature` to your metadata, - and include a `signature.pdf` file in your LaTeX class files. - - Must be processed with XeLaTeX - - MultiMarkdown Version 2.0.b6 - - $Id: custom-letterhead.xslt 525 2009-06-15 18:45:44Z fletcher $ ---> - -<!-- -# Copyright (C) 2007-2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="letterhead.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="return-address-defaults"> - <xsl:text>% Default info for return address -% These should include '\\' where appropriate for line endings - -\def\defaultemail{\href{mailto:owner@fletcherpenney.net}{owner@fletcherpenney.net} \\} -\def\defaultposition{} -\def\defaultdepartment{} -\def\defaultaddress{123 Fake St \\ Charleston, SC 29401 \\} -\def\defaultphone{Tel 843 555 1234 \\} -\def\defaultfax{Fax 843 555 2345 \\} -\def\defaultweb{} - -% Define height for logo and return address -\def\logoheight{1.2in} - -% Define the fl ligature for linux compatibility -\chardef\fl="FB02 - -% Define Logo or something for upper left corner -\def\coverlogo{ -\font\logo="Didot:mapping=tex-text" at 24pt \logo -\href{http://fletcherpenney.net/}{\fl etcherpenney.\color{accent}net\color{black}} -} - -% Use my stylesheet -\usepackage{fletcherpenney} - -% Define signature -\ifx\signature\undefined - \def\signature{~ \\ Sincerely,\\ - \ifx\graphicsignature\undefined - - \else - \resizebox{2in}{!}{\includegraphics{signature}}\\ - \fi -\myauthor} -\else -\fi - -</xsl:text> - </xsl:template> - - - -</xsl:stylesheet> diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/envelope.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/envelope.xslt deleted file mode 100755 index 333989f1..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/envelope.xslt +++ /dev/null @@ -1,216 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Envelope converter by Fletcher Penney - - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output - - Creates an envelope to go along with letterhead - - *Requires that you use the mmd-envelope style package for LaTeX, - which is available at http://fletcherpenney.net/XSLT_Files* - - MultiMarkdown Version 2.0.b6 - - $Id: envelope.xslt 525 2009-06-15 18:45:44Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <!-- rely on the mmd-envelope style to set up paper size --> - <xsl:template name="latex-paper-size"> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[oneside,article]{memoir} -\usepackage{layouts}[2001/04/29] - - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-header"> - <xsl:text>\usepackage{graphicx} % To include graphics in pdf's (jpg, gif, png, etc) -\usepackage[utf8]{inputenc} % For UTF-8 support -\usepackage[T1]{fontenc} % Use T1 font encoding for accented characters -\usepackage{xcolor} % Allow for color (annotations) - -\def\myauthor{Author} % In case these were not included in metadata -\def\mytitle{Title} -\def\mykeywords{} -\def\myrecipient{} - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-intro"> - <xsl:text> - -% -% PDF Stuff -% - -%\ifpdf % Removed for XeLaTeX compatibility -% \pdfoutput=1 % Removed for XeLaTeX compatibility - \usepackage[ - plainpages=false, - pdfpagelabels, - pdftitle={\mytitle}, - pagebackref, - pdfauthor={\myauthor}, - pdfkeywords={\mykeywords} - ]{hyperref} - \usepackage{memhfixc} -%\fi % Removed for XeLaTeX compatibility - -\ifx\recipient\undefined -\else - \addtodef{\myrecipient}{}{\recipient \\} -\fi - -\ifx\recipientaddress\undefined -\else - \addtodef{\myrecipient}{}{\recipientaddress} -\fi - -\ifx\mydate\undefined - \def\mydate{\today} -\fi - -</xsl:text> - </xsl:template> - - <xsl:template name="return-address"> - <xsl:call-template name="return-address-defaults"/> - <xsl:text>% Create return address -\def\returnaddress{\raggedright -\normalsize -\renewcommand{\baselinestretch}{1.1} - -\textbf{\myauthor} \\} - -\ifx\position\undefined -\addtodef{\returnaddress}{}{\textit{\defaultposition}} -\else - \addtodef{\returnaddress}{}{\textit{\position} \\} -\fi - - -\ifx\department\undefined -\addtodef{\returnaddress}{}{\textbf{\defaultdepartment}} -\else - \addtodef{\returnaddress}{}{\textbf{\department} \\} -\fi - -\ifx\address\undefined -\addtodef{\returnaddress}{}{\defaultaddress} -\else - \addtodef{\returnaddress}{}{\address \\} -\fi - - </xsl:text> - </xsl:template> - - <xsl:template name="return-address-defaults"> - <xsl:text>% Default info for return address -% These should include '\\' where appropriate for line endings - -\def\defaultemail{} -\def\defaultposition{} -\def\defaultdepartment{} -\def\defaultaddress{} -\def\defaultphone{} -\def\defaultfax{} -\def\defaultweb{} - -% Define height for logo and return address -\def\logoheight{1.5in} - -% Define Logo or something for upper left corner -\def\coverlogo{} - - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:call-template name="return-address"/> - <xsl:text>\usepackage{mmd-envelope} -\begin{document} - -% Layout settings -\setlength{\parindent}{0pt} - -\mainmatter -\thispagestyle{envelope} - -% Insert return address - -{\renewcommand{\baselinestretch}{1.1} -\color{returnaddress}\returnaddress} -\vspace*{\fill} - -% Return to main settings -\large - -\renewcommand{\baselinestretch}{1.2} -\setlength{\parskip}{12pt} - -% Insert Recipient -\begin{adjustwidth}{3in}{0in} -\myrecipient -\vspace*{\fill} -\end{adjustwidth} -</xsl:text> -</xsl:template> - - <xsl:template name="latex-title"> - </xsl:template> - - <xsl:template name="latex-copyright"> - </xsl:template> - - <xsl:template name="latex-footer"> - <xsl:text> -\end{document} -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/latex-snippet.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/latex-snippet.xslt deleted file mode 100755 index 94e12d1f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/latex-snippet.xslt +++ /dev/null @@ -1,263 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-LaTeX converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Strip out all the "header" information - just output the actual content. - - Useful when you already have a LaTeX template that you will use. - - MultiMarkdown Version 2.0.b6 - - $Id: latex-snippet.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="xhtml2latex.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template match="html:meta"> - </xsl:template> - - <xsl:template match="*[local-name() = 'title']"> - </xsl:template> - - <xsl:template name="latex-header"> - </xsl:template> - - <xsl:template name="latex-footer"> - </xsl:template> - - <xsl:template name="latex-intro"> - </xsl:template> - - <xsl:template name="latex-document-class"> - </xsl:template> - - <xsl:template name="latex-paper-size"> - </xsl:template> - - <xsl:template name="latex-title"> - </xsl:template> - - <xsl:template name="latex-copyright"> - </xsl:template> - - <xsl:template name="latex-begin-body"> - </xsl:template> - - <!-- Rename Bibliography --> - <xsl:template name="rename-bibliography"> - </xsl:template> - - <!-- Convert headers into chapters, etc --> - - <xsl:template match="html:h1"> - <xsl:text>\part{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h2"> - <xsl:text>\chapter{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h3"> - <xsl:text>\section{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h4"> - <xsl:text>\subsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h5"> - <xsl:text>\subsubsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h6"> - <xsl:text>{\itshape </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- support for abstracts --> - <xsl:template match="html:h2[1][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']"> - <xsl:text>\begin{abstract}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\addcontentsline{toc}{chapter}{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h2[position() = '2'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\end{abstract}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - <xsl:text>\chapter{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h3[count(preceding-sibling::html:h2) = '1'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\section*{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h4[count(preceding-sibling::html:h2) = '1'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\subsection*{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- code block --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\begin{adjustwidth}{2.5em}{2.5em} -\begin{verbatim} - - -</xsl:text> - <xsl:value-of select="./html:code"/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - <!-- no code, so treat as poetry --> - <xsl:template match="html:pre"> - <xsl:text>\begin{adjustwidth}{4em}{4em} -\setverbatimfont{\normalfont} -\begin{verbatim} - - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - - <!-- epigraph (a blockquote immediately following a header 1-3) --> - <xsl:template match="html:blockquote[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3' ]]"> - <xsl:text>\epigraph{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>} - -</xsl:text> - </xsl:template> - - <!-- epigraph author (a blockquote within blockquote) --> - <xsl:template match="html:blockquote[last()][parent::*[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3']]] "> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/letterhead.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/letterhead.xslt deleted file mode 100755 index 70c231dd..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/letterhead.xslt +++ /dev/null @@ -1,306 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output - - The first page can include letterhead graphic elements (e.g. logo) - - It is simplified from the full memoir version, removing items - not likely to be included in a letter or simple document - - *Requires that you use the mmd-letterhead style package for LaTeX, - which is available at http://fletcherpenney.net/XSLT_Files* - - MultiMarkdown Version 2.0.b6 - - $Id: letterhead.xslt 525 2009-06-15 18:45:44Z fletcher $ ---> - -<!-- -# Copyright (C) 2007-2009 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <!-- rely on the mmd-letterhead style to set up paper size --> - <xsl:template name="latex-paper-size"> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[oneside,article]{memoir} -\usepackage{layouts}[2001/04/29] - - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-header"> - <xsl:text>\usepackage{fancyvrb} % Allow \verbatim et al. in footnotes -\usepackage{graphicx} % To include graphics in pdf's (jpg, gif, png, etc) -\usepackage{booktabs} % Better tables -\usepackage{tabulary} % Support longer table cells -\usepackage[utf8]{inputenc} % For UTF-8 support -\usepackage[T1]{fontenc} % Use T1 font encoding for accented characters -\usepackage{xcolor} % Allow for color (annotations) - -%\geometry{landscape} % Activate for rotated page geometry - -%\usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty - % line rather than an indent - - -\def\myauthor{Author} % In case these were not included in metadata -\def\mytitle{Title} -\def\mykeywords{} -\def\mybibliostyle{plain} -\def\bibliocommand{} -\def\myrecipient{} - -\VerbatimFootnotes -</xsl:text> - </xsl:template> - - <xsl:template name="latex-intro"> - <xsl:text> - -% -% PDF Stuff -% - -%\ifpdf % Removed for XeLaTeX compatibility -% \pdfoutput=1 % Removed for XeLaTeX compatibility - \usepackage[ - plainpages=false, - pdfpagelabels, - pdftitle={\mytitle}, - pagebackref, - pdfauthor={\myauthor}, - pdfkeywords={\mykeywords} - ]{hyperref} - \usepackage{memhfixc} -%\fi % Removed for XeLaTeX compatibility - -\ifx\recipient\undefined -\else - \addtodef{\myrecipient}{}{\recipient \\} -\fi - -\ifx\recipientaddress\undefined -\else - \addtodef{\myrecipient}{}{\recipientaddress} -\fi - -\ifx\mydate\undefined - \def\mydate{\today} -\fi - -</xsl:text> - </xsl:template> - - <xsl:template name="return-address"> - <xsl:call-template name="return-address-defaults"/> - <xsl:text>% Create return address -\def\returnaddress{\raggedleft -\footnotesize -\renewcommand{\baselinestretch}{1.1} - -\textbf{\myauthor} \\} - -\ifx\position\undefined -\addtodef{\returnaddress}{}{\textit{\defaultposition}} -\else - \addtodef{\returnaddress}{}{\textit{\position} \\} -\fi - -\ifx\email\undefined -\addtodef{\returnaddress}{}{\textit{\defaultemail} - -~ - -} -\else - \addtodef{\returnaddress}{}{\textit{\email} - -~ - -} -\fi - -\ifx\department\undefined -\addtodef{\returnaddress}{}{\textbf{\defaultdepartment}} -\else - \addtodef{\returnaddress}{}{\textbf{\department} \\} -\fi - -\ifx\address\undefined -\addtodef{\returnaddress}{}{\defaultaddress} -\else - \addtodef{\returnaddress}{}{\address \\} -\fi - -\ifx\phone\undefined -\addtodef{\returnaddress}{}{\defaultphone} -\else - \addtodef{\returnaddress}{}{Tel \phone \\} -\fi - - -\ifx\fax\undefined -\addtodef{\returnaddress}{}{\defaultfax} -\else - \addtodef{\returnaddress}{}{Fax \fax \\} -\fi - -\ifx\web\undefined -\addtodef{\returnaddress}{}{\defaultweb -} -\else - \addtodef{\returnaddress}{}{ \web \\ -} -\fi - </xsl:text> - </xsl:template> - - <xsl:template name="return-address-defaults"> - <xsl:text>% Default info for return address -% These should include '\\' where appropriate for line endings - -\def\defaultemail{} -\def\defaultposition{} -\def\defaultdepartment{} -\def\defaultaddress{} -\def\defaultphone{} -\def\defaultfax{} -\def\defaultweb{} - -% Define height for logo and return address -\def\logoheight{1.5in} - -% Define Logo or something for upper left corner -\def\coverlogo{} - -% Define signature -\ifx\signature\undefined - \def\signature{~ \\ Sincerely, \\ - -\myauthor} -\else -\fi - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:call-template name="return-address"/> - <xsl:text>\usepackage{mmd-letterhead} -\begin{document} - -% Layout settings -\setlength{\parindent}{0pt} - -\mainmatter - -% Use coverpage style -\thispagestyle{letterhead-cover} - -% Insert return address - -\begin{figure}[t] -\begin{adjustwidth}{-0.5in}{-0.5in} -\begin{minipage}[l][\logoheight]{4in} - \coverlogo - \vspace*{\fill} -\end{minipage} -\hfill -\begin{minipage}[r][\logoheight]{2in} - {\renewcommand{\baselinestretch}{1.1} - \color{returnaddress}\returnaddress} - \vspace*{\fill} -\end{minipage} -\end{adjustwidth} -\end{figure} - - -\pagestyle{letterhead} -\large -% Return to main settings - -\renewcommand{\baselinestretch}{1.2} -\setlength{\parskip}{12pt} - -% Insert Recipient -\myrecipient - -% Insert date -\mydate - -</xsl:text> -</xsl:template> - - <xsl:template name="latex-title"> - </xsl:template> - - <xsl:template name="latex-copyright"> - </xsl:template> - - <xsl:template name="latex-footer"> - <xsl:text>\signature - -% -% Back Matter -% - -\backmatter -%\appendixpage - -% Bibliography -\bibliographystyle{\mybibliostyle} -\bibliocommand - -% Glossary -\printglossary - - -% Index -\printindex - -\end{document} -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/manuscript-novel.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/manuscript-novel.xslt deleted file mode 100755 index f05f93bb..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/manuscript-novel.xslt +++ /dev/null @@ -1,278 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Manuscript converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses my manuscript class for output - - MultiMarkdown Version 2.0.b6 - - $Id: manuscript-novel.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="xhtml2latex.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-footer"> - <xsl:text>% -% Back Matter -% - -\backmatter -%\appendixpage - -% Bibliography -\bibliographystyle{\mybibliostyle} -\bibliocommand - -% Glossary -% \printglossary - - -% Index -% \printindex - -\end{document} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,oneside]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage{manuscript} -\makeglossary -\makeindex - -\def\revision{} - - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-paper-size"> - <xsl:text> -</xsl:text> - </xsl:template> - - <xsl:template name="latex-intro"> - <xsl:text> - - % - % PDF Stuff - % - -% \ifpdf % Removed for XeLaTeX compatibility -% \pdfoutput=1 % Removed for XeLaTeX compatibility - \usepackage[ - plainpages=false, - pdfpagelabels, - pdftitle={\mytitle}, - pagebackref, - pdfauthor={\myauthor}, - pdfkeywords={\mykeywords} - ]{hyperref} - \usepackage{memhfixc} -% \fi % Removed for XeLaTeX compatibility - - - \title{\mytitle} - \author{\myauthor} - - \begin{document} - </xsl:text> - </xsl:template> <xsl:template name="latex-title"> - <xsl:text> - -% Title Page -\begin{titlingpage} -\aliaspagestyle{titlingpage}{title} -\setlength{\droptitle}{30pt} - -\manuscript\noindent\myauthor \\ -\address -\vskip 12pt -\noindent\agent - -\vfill -\renewcommand{\baselinestretch}{2} -\normalsize\manuscript\centering\MakeUppercase\mytitle - -by \myauthor -\vskip 4in - -\end{titlingpage} - - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-copyright"> - <xsl:text></xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:text>% -% Main Content -% - -% Manuscript settings -\renewcommand{\baselinestretch}{2} -\raggedright\normalsize -\font\body="Courier New" at 12pt\body - -% Layout settings -\setlength{\parindent}{0.5in} - -\mainmatter -</xsl:text> - </xsl:template> - - <!-- Rename Bibliography --> - <xsl:template name="rename-bibliography"> - <xsl:param name="source" /> - <xsl:text>\renewcommand\bibname{</xsl:text> - <xsl:value-of select="$source" /> - <xsl:text>} -</xsl:text> - </xsl:template> - - <!-- Convert headers into chapters, etc --> - - <xsl:template match="html:h1"> - <xsl:text>\part{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h2"> - <xsl:text>\chapter{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h3"> - <xsl:text>\begin{center} -\# -\end{center} - -</xsl:text> - - </xsl:template> - - <xsl:template match="html:h4"> - <xsl:text>\subsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h5"> - <xsl:text>\subsubsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h6"> - <xsl:text>{\itshape </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - - <!-- code block --> - <xsl:template match="html:pre/html:code"> - <xsl:text>\begin{adjustwidth}{2.5em}{2.5em} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - <!-- Changes due to limitations of manuscript format --> - <xsl:template match="html:a[@href]"> - <xsl:value-of select="."/> - <xsl:text>(</xsl:text> - <xsl:value-of select="@href"/> - <xsl:text>)</xsl:text> - </xsl:template> - - <!-- emphasis --> - <xsl:template match="html:em"> - <xsl:text>\underline{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <!-- strong --> - <xsl:template match="html:strong"> - <xsl:text>\textbf{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-natbib.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-natbib.xslt deleted file mode 100755 index bfa28062..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-natbib.xslt +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Article converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Adds support for natbib citations to the memoir class. - - MultiMarkdown Version 2.0.b6 - - $Id: memoir-natbib.xslt 517 2008-09-12 19:37:52Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - <xsl:import href="natbib-support.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,oneside]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage[round,sort&compress]{natbib} -\setcitestyle{super,open={},close={},comma} - -\makeglossary -\makeindex - -\def\mychapterstyle{default} -\def\mypagestyle{headings} -\def\revision{} - -</xsl:text> - </xsl:template> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-poetry.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-poetry.xslt deleted file mode 100755 index bd1e4c6d..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-poetry.xslt +++ /dev/null @@ -1,66 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output - - Code bLocks display in poetry mode - - MultiMarkdown Version 2.0.b6 - - $Id: memoir-poetry.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - - <!-- code block => Now it's poetry --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\begin{adjustwidth}{4em}{4em} -\setverbatimfont{\normalfont} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-twosided.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-twosided.xslt deleted file mode 100755 index b4b4dfb6..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-twosided.xslt +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output with the twoside option - - MultiMarkdown Version 2.0.b6 - - $Id: memoir-twosided.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,twoside]{memoir} -\usepackage{layouts}[2001/04/29] -\makeglossary -\makeindex - -\def\mychapterstyle{default} -\def\mypagestyle{headings} -\def\revision{} -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-xelatex.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-xelatex.xslt deleted file mode 100755 index 21c74ad0..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir-xelatex.xslt +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output - - Modified for use XeLaTeX (suggested by Talazem Al-Azem) - - MultiMarkdown Version 2.0.b6 - - $Id: memoir-xelatex.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="memoir.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-header"> - <xsl:text>\usepackage{fontspec} -\setromanfont[Mapping=tex-text]{Palatino} - -\usepackage{fancyvrb} % Allow \verbatim et al. in footnotes -\usepackage{graphicx} % To include graphics in pdf's (jpg, gif, png, etc) -\usepackage{booktabs} % Better tables -\usepackage{tabulary} % Support longer table cells -%\usepackage[utf8]{inputenc} % For UTF-8 support -\usepackage[T1]{fontenc} % Use T1 font encoding for accented characters -\usepackage{xcolor} % Allow for color (annotations) - -%\geometry{landscape} % Activate for rotated page geometry - -%\usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty - % line rather than an indent - - -\def\myauthor{Author} % In case these were not included in metadata -\def\mytitle{Title} -\def\mykeywords{} -\def\mybibliostyle{plain} -\def\bibliocommand{} - -\VerbatimFootnotes -</xsl:text> - </xsl:template> - - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir.xslt deleted file mode 100755 index 4719800e..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/memoir.xslt +++ /dev/null @@ -1,435 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Memoir converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Uses the LaTeX memoir class for output - - MultiMarkdown Version 2.0.b6 - - $Id: memoir.xslt 525 2009-06-15 18:45:44Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="xhtml2latex.xslt"/> - - <xsl:template match="/"> - <xsl:apply-templates select="html:html/html:head"/> - <xsl:apply-templates select="html:html/html:body"/> - <xsl:call-template name="latex-footer"/> - </xsl:template> - - <xsl:template name="latex-footer"> - <xsl:text>% -% Back Matter -% - -\backmatter -%\appendixpage - -% Bibliography -\bibliographystyle{\mybibliostyle} -\bibliocommand - -% Glossary -\printglossary - - -% Index -\printindex - -\end{document} -</xsl:text> - </xsl:template> - - <xsl:template name="latex-document-class"> - <xsl:text>\documentclass[10pt,oneside]{memoir} -\usepackage{layouts}[2001/04/29] -\makeglossary -\makeindex - -\def\mychapterstyle{default} -\def\mypagestyle{headings} -\def\revision{} - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-paper-size"> - <xsl:text>%%% need more space for ToC page numbers -\setpnumwidth{2.55em} -\setrmarg{3.55em} - -%%% need more space for ToC section numbers -\cftsetindents{part}{0em}{3em} -\cftsetindents{chapter}{0em}{3em} -\cftsetindents{section}{3em}{3em} -\cftsetindents{subsection}{4.5em}{3.9em} -\cftsetindents{subsubsection}{8.4em}{4.8em} -\cftsetindents{paragraph}{10.7em}{5.7em} -\cftsetindents{subparagraph}{12.7em}{6.7em} - -%%% need more space for LoF numbers -\cftsetindents{figure}{0em}{3.0em} - -%%% and do the same for the LoT -\cftsetindents{table}{0em}{3.0em} - -%%% set up the page layout -\settrimmedsize{\stockheight}{\stockwidth}{*} % Use entire page -\settrims{0pt}{0pt} - -\setlrmarginsandblock{1.5in}{1.5in}{*} -\setulmarginsandblock{1.5in}{1.5in}{*} - -\setmarginnotes{17pt}{51pt}{\onelineskip} -\setheadfoot{\onelineskip}{2\onelineskip} -\setheaderspaces{*}{2\onelineskip}{*} -\checkandfixthelayout - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-title"> - <xsl:text> -\chapterstyle{\mychapterstyle} -\pagestyle{\mypagestyle} - -% -% Front Matter -% - -\frontmatter - - -% Title Page - -\maketitle -\clearpage - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-copyright"> - <xsl:text>% Copyright Page -\vspace*{\fill} - -\setlength{\parindent}{0pt} - -\ifx\mycopyright\undefined -\else - \textcopyright{} \mycopyright -\fi - -\revision - -\begin{center} -\framebox{ \parbox[t]{1.5in}{\centering Formatted for \LaTeX \\ - by MultiMarkdown}} -\end{center} - -\setlength{\parindent}{1em} -\clearpage - -</xsl:text> - </xsl:template> - - <xsl:template name="latex-begin-body"> - <xsl:text>% Table of Contents -\tableofcontents -%\listoffigures % activate to include a List of Figures -%\listoftables % activate to include a List of Tables - - -% -% Main Content -% - - -% Layout settings -\setlength{\parindent}{1em} - -\mainmatter -</xsl:text> - </xsl:template> - - <!-- Rename Bibliography --> - <xsl:template name="rename-bibliography"> - <xsl:param name="source" /> - <xsl:text>\renewcommand\bibname{</xsl:text> - <xsl:value-of select="$source" /> - <xsl:text>} -</xsl:text> - </xsl:template> - - <!-- Convert headers into chapters, etc --> - - <xsl:template match="html:h1"> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - string-length('*')) + 1) = '*'"> - <xsl:text>\part*{}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\part{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h2"> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - string-length('*')) + 1) = '*'"> - <xsl:text>\chapter*{}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\chapter{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h3"> - <xsl:text>\section{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h4"> - <xsl:text>\subsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h5"> - <xsl:text>\subsubsection{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h6"> - <xsl:text>{\itshape </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- add support for Appendices - include a part or chapter named 'Appendices' to trigger--> - - <xsl:template match="html:h2[translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'appendices']"> - <xsl:text>\appendixpage* -\appendix</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h1[translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'appendices']"> - <xsl:text>\appendixpage* -\appendix</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- support for abstracts --> - - <xsl:template match="html:h2[1][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']"> - <xsl:text>\begin{abstract}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\addcontentsline{toc}{chapter}{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h2[position()='2'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\end{abstract}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - <xsl:choose> - <xsl:when test="substring(node(), (string-length(node()) - string-length('*')) + 1) = '*'"> - <xsl:text>\chapter*{}</xsl:text> - </xsl:when> - <xsl:otherwise> - <xsl:text>\chapter{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:otherwise> - </xsl:choose> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h3[count(preceding-sibling::html:h2) = '1'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\section*{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <xsl:template match="html:h4[count(preceding-sibling::html:h2) = '1'][preceding-sibling::html:h2[position()='1'][translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'abstract']]"> - <xsl:text>\subsection*{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:text>\label{</xsl:text> - <xsl:value-of select="@id"/> - <xsl:text>}</xsl:text> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$newline"/> - </xsl:template> - - <!-- code block --> - <xsl:template match="html:pre[child::html:code]"> - <xsl:text>\begin{adjustwidth}{2.5em}{2.5em} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="./html:code"/> - <xsl:text> - -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - <!-- no code, so treat as poetry --> - <xsl:template match="html:pre"> - <xsl:text>\begin{adjustwidth}{4em}{4em} -\setverbatimfont{\normalfont} -\begin{verbatim} - -</xsl:text> - <xsl:value-of select="."/> - <xsl:text> -\end{verbatim} -\end{adjustwidth} - -</xsl:text> - </xsl:template> - - - <!-- epigraph (a blockquote immediately following a header 1-3) --> - <xsl:template match="html:blockquote[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3' ]]"> - <xsl:text>\epigraph{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>} - -</xsl:text> - </xsl:template> - - <!-- epigraph author (a blockquote within blockquote) --> - <xsl:template match="html:blockquote[last()][parent::*[preceding-sibling::*[1][local-name() = 'h1' or local-name() = 'h2' or local-name() = 'h2' or local-name() = 'h3']]] "> - <xsl:text>}{</xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:template> - - <!-- Memoir handles glossaries differently --> - - <xsl:template match="html:li" mode="glossary"> - <xsl:param name="footnoteId"/> - <xsl:if test="parent::html:ol/parent::html:div/@class = 'footnotes'"> - <xsl:if test="concat('#',@id) = $footnoteId"> - <xsl:apply-templates select="html:span[@class='glossary sort']" mode="glossary"/> - <xsl:apply-templates select="html:span[@class='glossary name']" mode="glossary"/> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="html:p" mode="glossary"/> - <xsl:text>}</xsl:text> - </xsl:if> - </xsl:if> - </xsl:template> - - <xsl:template match="html:span[@class='glossary name']" mode="glossary"> - <xsl:text>{</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <xsl:template match="html:span[@class='glossary sort']" mode="glossary"> - <xsl:text>(</xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text>)</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/multimarkdown.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/multimarkdown.xslt deleted file mode 100755 index 9d0d1d98..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/multimarkdown.xslt +++ /dev/null @@ -1,481 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> -<!-- XHTML to MultiMarkdown converter by Fletcher Penney - - modified from: - - XHTML-to-Markdown converter by Andrew Green, Article Seven, - http://www.article7.co.uk/ - - TODO: support for citations - TODO: support for footnotes - TODO: support for tables - TODO: support for definition lists - TODO: support for glossary entries - TODO: support for link/image attributes (and use a reference style link?) - TODO: support for MathML->ASCIIMathML??? - ---> - -<!-- This work is licensed under the Creative Commons Attribution-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. --> -<xsl:stylesheet version="1.0" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> - - <xsl:output method="text" encoding="utf-8"/> - - <xsl:strip-space elements="*"/> - - <xsl:variable name="newline"> -<xsl:text> -</xsl:text> - </xsl:variable> - - <xsl:variable name="tab"> - <xsl:text> </xsl:text> - </xsl:variable> - - <xsl:template match="/"> - <xsl:apply-templates select="h:html/h:head"/> - <xsl:apply-templates select="h:html/h:body/node()"> - <xsl:with-param name="context" select="markdown"/> - </xsl:apply-templates> - </xsl:template> - - <xsl:template match="@*"> - <xsl:text> </xsl:text> - <xsl:value-of select="local-name()"/> - <xsl:text>="</xsl:text> - <xsl:value-of select="."/> - <xsl:text>"</xsl:text> - </xsl:template> - - <xsl:template match="text()"> - <!-- it might be possible to use replace-substring to backslash special characters, but that's not implemented yet --> - <xsl:if test="normalize-space(.)"> - <xsl:value-of select="."/> - </xsl:if> - </xsl:template> - - <xsl:template match="text()[parent::h:code[parent::h:pre]]"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="."/> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:value-of select="$newline"/> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:value-of select="$newline"/> - <xsl:value-of select="$tab"/> - </xsl:with-param> - </xsl:call-template> - </xsl:template> - - <xsl:template name="newblock"> - <xsl:param name="context"/> - <xsl:if test="not(not(preceding-sibling::*) and (parent::h:body or parent::h:li))"> - <xsl:value-of select="$newline"/> - <xsl:if test="not(self::h:li) or (self::h:li and h:p)"> - <xsl:value-of select="$newline"/> - </xsl:if> - <xsl:if test="parent::h:blockquote[parent::h:li and preceding-sibling::*] or (parent::h:li and preceding-sibling::*)"> - <xsl:text> </xsl:text> - </xsl:if> - <xsl:if test="not($context = 'html') and parent::h:blockquote"> - <xsl:text>> </xsl:text> - </xsl:if> - </xsl:if> - </xsl:template> - - <!-- if an element isn't templated elsewhere, we move into html context and stay there for any descendent nodes --> - <xsl:template match="h:*"> - <xsl:if test="self::h:h1 or self::h:h2 or self::h:h3 or self::h:h4 or self::h:h5 or self::h:h6 or self::h:p or self::h:pre or self::h:table or self::h:form or self::h:ul or self::h:ol or self::h:address or self::h:blockquote or self::h:dl or self::h:fieldset or self::h:hr or self::h:noscript"> - <xsl:call-template name="newblock"> - <xsl:with-param name="context" select="'html'"/> - </xsl:call-template> - </xsl:if> - <xsl:call-template name="element"/> - </xsl:template> - - <xsl:template name="element"> - <xsl:text><</xsl:text> - <xsl:value-of select="local-name()"/> - <xsl:apply-templates select="@*"/> - <xsl:text>></xsl:text> - <xsl:apply-templates select="node()"> - <xsl:with-param name="context" select="'html'"/> - </xsl:apply-templates> - <xsl:text></</xsl:text> - <xsl:value-of select="local-name()"/> - <xsl:text>></xsl:text> - </xsl:template> - - <xsl:template match="h:div"> - <xsl:apply-templates select="node()"/> - </xsl:template> - - <xsl:template match="h:p"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:apply-templates select="node()"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h1"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text># </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> #</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h2"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>## </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> ##</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h3"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>### </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> ###</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h4"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>#### </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> ####</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h5"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>##### </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> #####</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:h6"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>###### </xsl:text> - <xsl:apply-templates select="node()"/> - <xsl:text> ######</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:br"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text> </xsl:text> - <xsl:value-of select="$newline"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:blockquote"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:if test="node()[1] = text()"> - <xsl:call-template name="newblock"/> - <xsl:text>> </xsl:text> - </xsl:if> - <xsl:apply-templates select="node()"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- this transformation won't backslash the period of a genuine textual newline-number-period combo --> - - <xsl:template match="h:ul | h:ol"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:apply-templates select="node()"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:li"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:when test="parent::h:ul"> - <xsl:call-template name="newblock"/> - <xsl:text>* </xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:when> - <xsl:when test="parent::h:ol"> - <xsl:call-template name="newblock"/> - <xsl:value-of select="position()"/> - <xsl:text>. </xsl:text> - <xsl:apply-templates select="node()"/> - </xsl:when> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:pre[h:code]"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:value-of select="$tab"/> - <xsl:apply-templates select="h:code/node()"/> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:hr"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:call-template name="newblock"/> - <xsl:text>- - - - - -</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:a[@href]"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>[</xsl:text> - <xsl:apply-templates select="text()"/> - <xsl:text>](</xsl:text> - <xsl:value-of select="@href"/> - <xsl:if test="@title"> - <xsl:text> "</xsl:text> - <xsl:value-of select="@title"/> - <xsl:text>"</xsl:text> - </xsl:if> - <xsl:text>)</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- this transformation won't backslash literal asterisks or underscores in text --> - - <xsl:template match="h:em"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>*</xsl:text> - <xsl:apply-templates select="text()"/> - <xsl:text>*</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:strong"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>**</xsl:text> - <xsl:apply-templates select="text()"/> - <xsl:text>**</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- this transformation won't backslash literal backticks in text --> - - <xsl:template match="h:code"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>`</xsl:text> - <xsl:apply-templates select="text()"/> - <xsl:text>`</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:img[not(@width | @height)]"> - <xsl:param name="context"/> - <xsl:choose> - <xsl:when test="$context = 'html'"> - <xsl:call-template name="element"/> - </xsl:when> - <xsl:otherwise> - <xsl:text>![</xsl:text> - <xsl:value-of select="@alt"/> - <xsl:text>](</xsl:text> - <xsl:value-of select="@src"/> - <xsl:if test="@title"> - <xsl:text> "</xsl:text> - <xsl:value-of select="@title"/> - <xsl:text>"</xsl:text> - </xsl:if> - <xsl:text>)</xsl:text> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <xsl:template match="h:head"> - <xsl:apply-templates match="h:meta"/> - <xsl:text> - -</xsl:text> -</xsl:template> - - <xsl:template match="h:head/h:link"> - <xsl:text>css: </xsl:text> - <xsl:value-of select="@href"/> - <xsl:text> -</xsl:text> - </xsl:template> - - <xsl:template match="h:meta"> - <xsl:value-of select="@name"/> - <xsl:text>: </xsl:text> - <xsl:value-of select="@content"/> - <xsl:text> -</xsl:text> - </xsl:template> - - <xsl:template match="h:title"> - <xsl:text>Title: </xsl:text> - <xsl:value-of select="."/> - <xsl:text> -</xsl:text> - </xsl:template> - - - <!-- The following template is taken from the book "XSLT" by Doug Tidwell (O'Reilly and Associates, August 2001, ISBN 0-596-00053-7) --> - <xsl:template name="replace-substring"> - <xsl:param name="original"/> - <xsl:param name="substring"/> - <xsl:param name="replacement" select="''"/> - <xsl:variable name="first"> - <xsl:choose> - <xsl:when test="contains($original, $substring)"> - <xsl:value-of select="substring-before($original, $substring)"/> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="$original"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="middle"> - <xsl:choose> - <xsl:when test="contains($original, $substring)"> - <xsl:value-of select="$replacement"/> - </xsl:when> - <xsl:otherwise> - <xsl:text/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="last"> - <xsl:choose> - <xsl:when test="contains($original, $substring)"> - <xsl:choose> - <xsl:when test="contains(substring-after($original, $substring), $substring)"> - <xsl:call-template name="replace-substring"> - <xsl:with-param name="original"> - <xsl:value-of select="substring-after($original, $substring)"/> - </xsl:with-param> - <xsl:with-param name="substring"> - <xsl:value-of select="$substring"/> - </xsl:with-param> - <xsl:with-param name="replacement"> - <xsl:value-of select="$replacement"/> - </xsl:with-param> - </xsl:call-template> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="substring-after($original, $substring)"/> - </xsl:otherwise> - </xsl:choose> - </xsl:when> - <xsl:otherwise> - <xsl:text/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:value-of select="concat($first, $middle, $last)"/> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/natbib-support.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/natbib-support.xslt deleted file mode 100755 index f7fa5852..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/natbib-support.xslt +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-Article converter by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - Adds support for natbib citations. - - Requires that the following command (or equivalent) be included - in the header: - - \usepackage[round]{natbib} - - - MultiMarkdown Version 2.0.b6 - - $Id: natbib-support.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:html="http://www.w3.org/1999/xhtml" - version="1.0"> - - <xsl:import href="xhtml2latex.xslt"/> - - <xsl:output method='text' encoding='utf-8'/> - - <xsl:strip-space elements="*" /> - - <!-- use \citep by default --> - <xsl:template match="html:span[@class='externalcitation']"> - <xsl:text>\citep</xsl:text> - <xsl:apply-templates select="html:span" mode="citation"/> - <xsl:apply-templates select="html:a" mode="citation"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <xsl:template match="html:span[@class='markdowncitation']"> - <xsl:text>~\citep</xsl:text> - <xsl:apply-templates select="html:span" mode="citation"/> - <xsl:apply-templates select="html:a" mode="markdowncitation"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <!-- use \citet when indicated --> - <xsl:template match="html:span[@class='externalcitation'][child::html:span[position()='1'][@class='textual citation']]"> - <xsl:text>\citet</xsl:text> - <xsl:apply-templates select="html:span" mode="citation"/> - <xsl:apply-templates select="html:a" mode="citation"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <xsl:template match="html:span[@class='markdowncitation'][child::html:span[position()='1'][@class='textual citation']]"> - <xsl:text>~\citet</xsl:text> - <xsl:apply-templates select="html:span" mode="citation"/> - <xsl:apply-templates select="html:a" mode="markdowncitation"/> - <xsl:text>}</xsl:text> - </xsl:template> - - <!-- Disable the text (not used for LaTeX output) --> - <xsl:template match="html:span[@class='textual citation']" mode="citation"> - <xsl:text></xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/opml2mmd.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/opml2mmd.xslt deleted file mode 100755 index ca77d5d3..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/opml2mmd.xslt +++ /dev/null @@ -1,112 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- OPML-to-text converter by Fletcher Penney - - ---> - -<!-- -# Copyright (C) 2010 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - version="1.0"> - - <xsl:output method="text" encoding="utf-8"/> - - <xsl:preserve-space elements="*"/> - - <xsl:template match="/opml"> - <xsl:apply-templates select="head/titledisabled"/> - <xsl:apply-templates select="/opml/body/outline[last()]" mode="meta"/> - <xsl:apply-templates select="body"/> - </xsl:template> - - <xsl:template match="title"> - <xsl:text>Title: </xsl:text> - <xsl:value-of select="."/> - <xsl:text> -</xsl:text> - </xsl:template> - - <xsl:template match="body"> - <xsl:param name="header"/> - <xsl:text> - -</xsl:text> - <xsl:apply-templates select="outline"> - <xsl:with-param name="header" select="concat($header,'#')"/> - </xsl:apply-templates> - </xsl:template> - - <xsl:template match="outline"> - <xsl:param name="header"/> - <xsl:value-of select="concat($header,' ')"/> - <xsl:value-of select="@text"/> - <xsl:value-of select="concat(' ',$header)"/> - <xsl:text> - -</xsl:text> - <xsl:value-of select="@_note"/> - <xsl:text> - -</xsl:text> - <xsl:apply-templates select="outline"> - <xsl:with-param name="header" select="concat($header,'#')"/> - </xsl:apply-templates> - </xsl:template> - - <xsl:template match="/opml/body/outline[last()]"> - <xsl:if test="not(translate(@text,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'metadata')"> - <xsl:apply-templates select="outline" mode="metadata"/> - <xsl:param name="header"/> - <xsl:value-of select="concat($header,' ')"/> - <xsl:value-of select="@text"/> - <xsl:value-of select="concat(' ',$header)"/> - <xsl:text> - - </xsl:text> - <xsl:value-of select="@_note"/> - <xsl:text> - - </xsl:text> - <xsl:apply-templates select="outline"> - <xsl:with-param name="header" select="concat($header,'#')"/> - </xsl:apply-templates> - </xsl:if> - </xsl:template> - - <xsl:template match="/opml/body/outline[last()]" mode="meta"> - <xsl:if test="(translate(@text,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - 'abcdefghijklmnopqrstuvwxyz') = 'metadata')"> - <xsl:apply-templates select="outline" mode="metadata"/> - </xsl:if> - </xsl:template> - - <xsl:template match="outline" mode="metadata"> - <xsl:value-of select="@text"/> - <xsl:text>: </xsl:text> - <xsl:value-of select="@_note"/> - <xsl:text> -</xsl:text> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/s5.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/s5.xslt deleted file mode 100755 index 7b88dfc9..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/s5.xslt +++ /dev/null @@ -1,157 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> - -<!-- XHTML-to-S5 converted by Fletcher Penney - specifically designed for use with MultiMarkdown created XHTML - - MultiMarkdown Version 2.0.b6 - - $Id: s5.xslt 499 2008-03-23 13:03:19Z fletcher $ ---> - -<!-- -# Copyright (C) 2005-2008 Fletcher T. Penney <fletcher@fletcherpenney.net> -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc. -# 59 Temple Place, Suite 330 -# Boston, MA 02111-1307 USA ---> - -<!-- - TODO: an option to select what h-level should be slides (for instance, if h2, then each h1 would be a slide, containing list of h2's. Then h2's converted into slides.... - - --> - -<xsl:stylesheet - xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:xhtml="http://www.w3.org/1999/xhtml" - xmlns="http://www.w3.org/1999/xhtml" - exclude-result-prefixes="xhtml xsl" - version="1.0"> - - <xsl:output method='xml' encoding='utf-8' indent="yes"/> - - <xsl:strip-space elements="*" /> - - <xsl:variable name="theme">default</xsl:variable> - - <xsl:param name="match"/> - - <xsl:template match="/"> - <html> - <xsl:apply-templates select="node()"/> - </html> - </xsl:template> - - <xsl:template match="xhtml:head"> - <head> - <xsl:apply-templates select="xhtml:meta"/> - <xsl:apply-templates select="node()"/> - <meta name="version" content="S5 1.1" /> - <meta name="generator" content="MultiMarkdown"/> - <meta name="controlVis" content="hidden"/> - <link rel="stylesheet" href="ui/{$theme}/slides.css" type="text/css" media="projection" id="slideProj" /> - <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" /> - <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" /> - <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" /> - <script src="ui/default/slides.js" type="text/javascript"></script> - </head> - </xsl:template> - - <xsl:template match="xhtml:title"> - <title><xsl:value-of select="."/> - - - - -

    -
    -
    - - -
    -
    -
    -

    -

    -

    - -

    - - - -

    - -

    -

    - -

    -
    - - -
    - - - - - -
    -

    - - -
    -
    - - -
    -

    - - -
    -
    - - - - - - - - - - -
  • - -
  • -
    - - - -
      - -
    -
    - - -
      - -
    -
    - - - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/science.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/science.xslt deleted file mode 100755 index 178ced85..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/science.xslt +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \documentclass[oneside,article,9pt]{memoir} -\usepackage{layouts}[2001/04/29] -\usepackage{science} -\usepackage{xmpincl} % Seems to be required to get the pdf to generate?? - -\def\revision{} - - - - - - - - - - - \begin{abstract} - - \addcontentsline{toc}{section}{ - - } - - -\begin{body} - -% Layout settings -\setlength{\parindent}{1em} - -\section{ - - } - - - \label{ - - } - - - - - - - \end{abstract} - -\begin{body} - -% Layout settings -\setlength{\parindent}{1em} - - - \section{ - - } - - \label{ - - } - - - - - - \subsection*{ - - } - - \label{ - - } - - - - - - - \begin{verbatim} - - - - -\end{verbatim} - - - - - \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms-no-chapter-titles.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms-no-chapter-titles.xslt deleted file mode 100755 index 4c4ee243..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms-no-chapter-titles.xslt +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - \chapter*{ - - } - - \label{ - - } - - - - - \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms.xslt deleted file mode 100755 index af54350f..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/sffms.xslt +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - - - - - - - - - \end{document} - - - - - \documentclass[courier,novel]{sffms} - - - - - - - - - -\begin{document} - - - - - - - - - - - - - - - - - - - - - - - - - - - \chapter*{ - - } - - \label{ - - } - - - - - - \chapter{ - - } - - \label{ - - } - - - - - - \newscene - - - - - - - - - - - - - - - - - - \begin{verbatim} - - - - - \end{verbatim} - - - - - - \title{ - - - - - - } - - - - - - - \author{ - - - - - - } - - - - \def\latexauthor{ - - } - - - - \authorname{ - - - - - - } - - - - \title{ - - - - - - - - - - - - - - \\ - - - } - - - - \runningtitle{ - - - - - - } - - - - \surname{ - - - - - - } - - - - \address{ - - - - - - - - - - - - - - \\ - - - } - - - - \wordcount{ - - - - - - } - - - - - - - - - - ( - - - - - - ) - - - - - \underline{ - - } - - - - - \textbf{ - - } - - - \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/snippet.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/snippet.xslt deleted file mode 100755 index a2d32456..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/snippet.xslt +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-google-docs.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-google-docs.xslt deleted file mode 100755 index efb6aef6..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-google-docs.xslt +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Bibliography

    -
      - -
    -
    - - -
  • - [# - - ] - -
  • -
    - - - - - - - - - - - # - - - - -
    \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-poetry-support.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-poetry-support.xslt deleted file mode 100755 index 477d703a..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-poetry-support.xslt +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -					
    -				
    -
    - - - - - -
    -
    - - - - - -
    \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-static-site.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-static-site.xslt deleted file mode 100755 index 4bc727fc..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-static-site.xslt +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - ]]> - -

    -
    - -
    -
    -
    - - ]]> - - - ]]> -
    -
    - - -
    \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc-h2.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc-h2.xslt deleted file mode 100755 index da05e504..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc-h2.xslt +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Table of Contents

    - -
      - - -
    - -
    -
    - - - - - - - - - - - -
  • - - - - - -
      - - -
    - -
    -
  • -
    - - - - - - -
  • - - - -
  • -
    - - - - - - - - -  ↩ - - - - - - - - - -  ↩ - - - -
    \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc.xslt deleted file mode 100755 index 2d49746d..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml-toc.xslt +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Table of Contents

    - -
      - - -
    - -
    -
    - - - - - - - - - - - -
  • - - - - - -
      - - -
    - -
    -
  • -
    - - - - - - -
  • - - - -
  • -
    - - - - - - - - -  ↩ - - - - - - - - - -  ↩ - - - -
    \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2latex.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2latex.xslt deleted file mode 100755 index a95371ac..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2latex.xslt +++ /dev/null @@ -1,1238 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \def\mytitle{ - - - - - - } - - - - - - - - \def\myauthor{ - - - - - - } - - - - \def\latexauthor{ - - } - - - - \date{ - - - - - - } -\def\mydate{ - - - - - - } - - - - \def\affiliation{ - - - - - - - - - - - - - - \\ - - - } - - - - \def\revision{Revision: - - - - - - } - - - - \def\email{ \href{mailto: - - - - - - - - - - - - - - \\ - - - }{ - - - - - - - - - - - - - - \\ - - - }} - - - - \def\web{\href{ - - http:// - - - - - - - - - - - - - - - \\ - - - }{ - - - - - - - - - - - - - - \\ - - - }} - - - - \def\mykeywords{ - - - - - - ,, - - - , - - - } - - - - \usepackage{xmpincl} -\includexmp{ - - - - - - } - - - - \def\bibliocommand{\bibliography{ - - - - - - }} - - - - \def\mybibliostyle{ - - - - - - } - - - - - - - - - - - \def\mychapterstyle{ - - - - - - } - - - - \def\mypagestyle{ - - - - - - } - - - - \def\mycopyright{ - - - - - - - - - - - - - - \\ - - - } - - - - \def\myclosing{ - - - - - - - - - - - - - - \\ - - - } - - - - \def\ - - { - - - - - - - - - - - - - - \\ - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -% Title Page - -\maketitle - - - - - - - % Copyright Page -\ifx\mycopyright\undefined -\else - \textcopyright{} \mycopyright -\fi - - - - - - - - % -% Main Content -% - - - - - - - - - - - - - - - - - - - - - - - - \renewcommand\refname{ - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - description= - - } - - - - - - - - \\ -\\ - - - - - - - - - - - {name= - - , - - - - sort= - - , - - - - - - - - - - - - - - - - \footnote{ - - - - } - - - - \glossary - - - - - - - - - - - - - \url{ - - - - - - } - - - - - \href{ - - }{ - - - - - - } - - - - - - - \autoref{ - - } - - - - (\autoref{ - - }) - - - - - - - \href{ - - }{ - - - - - - }\footnote{\href{ - - }{ - - - - - - }} - - - - - - - \begin{enumerate} - - - - \end{enumerate} - - - - - - - \begin{itemize} - - - - \end{itemize} - - - - - - - -\item - - - - - - \begin{description} - - \end{description} - - - - - \item[ - - ] - - - - - - - - - - - \texttt{ - - } - - - - - \\ - - - - - \begin{quotation} - - - \end{quotation} - - - - - - - {\itshape - - } - - - - - \textbf{ - - } - - - - - \vskip 2em -\hrule height 0.4pt -\vskip 2em - - - - - - - \begin{figure} - - \begin{center} - - - - - \resizebox{ - - - - - - - - px - - - pt - - - - - pt - - - - ! - - - }{ - - - - - - - - px - - - pt - - - - - pt - - - - ! - - - }{ - - - - \resizebox{1\linewidth}{!}{ - - \includegraphics{ - - }} -\end{center} - - - - \caption{ - - } - - - - - \label{ - - } - - - \end{figure} - - - - - - - - - - - - - - \begin{table}[htbp] -\begin{minipage}{\linewidth} -\centering - - - \begin{tabular}{@{}p{0.5\linewidth}@{}} \\ \toprule - - - - \end{tabular} -\end{minipage} -\end{table} - - - - - - - \begin{table}[htbp] -\begin{minipage}{\linewidth} -\setlength{\tymax}{0.5\linewidth} -\centering -\small - - - \begin{tabulary}{\linewidth}{@{} - - @{}} \\ \toprule - - - - \end{tabulary} -\end{minipage} -\end{table} - - - - - - - \bottomrule - - - - - - - - C - - - c - - - - - - - R - - - r - - - - - - - J - - - l - - - - - - - - - \midrule - - - - - \caption{ - - } - - - \label{ - - } - - - - - - - - - \\ - - - - - - - - - - - \cmidrule{ - - - - - } - - - - - - - - - - - \\ - - - - - \\ - - - - - - \multicolumn{ - - - - }{c}{ - - - - } - - - & - - - - - - - \cite - - - } - - - - ~\cite - - - } - - - - ~\nocite{ - - } - - - - { - - - - - { - - - - - [ - - ] - - - - - - - - - \begin{thebibliography}{ - - } - - - - -\end{thebibliography} - - - - - - - -\bibitem{ - - } - - - - - - - - - - - - - \usepackage{fancyvrb} % Allow \verbatim et al. in footnotes -\usepackage{graphicx} % To include graphics in pdf's (jpg, gif, png, etc) -\usepackage{booktabs} % Better tables -\usepackage{tabulary} % Support longer table cells -\usepackage[utf8]{inputenc} % For UTF-8 support -\usepackage[T1]{fontenc} % Use T1 font encoding for accented characters -\usepackage{xcolor} % Allow for color (annotations) - -%\geometry{landscape} % Activate for rotated page geometry - -%\usepackage[parfill]{parskip} % Activate to begin paragraphs with an empty - % line rather than an indent - - -\def\myauthor{Author} % In case these were not included in metadata -\def\mytitle{Title} -\def\mykeywords{} -\def\mybibliostyle{plain} -\def\bibliocommand{} - -\VerbatimFootnotes - - - - - - -% -% PDF Stuff -% - -%\ifpdf % Removed for XeLaTeX compatibility -% \pdfoutput=1 % Removed for XeLaTeX compatibility - \usepackage[ - plainpages=false, - pdfpagelabels, - pdftitle={\mytitle}, - pagebackref, - pdfauthor={\myauthor}, - pdfkeywords={\mykeywords} - ]{hyperref} - \usepackage{memhfixc} -%\fi % Removed for XeLaTeX compatibility - - -% -% Title Information -% - - -\ifx\latexauthor\undefined -\else - \def\myauthor{\latexauthor} -\fi - -\ifx\subtitle\undefined -\else - \addtodef{\mytitle}{}{ \\ \subtitle} -\fi - -\ifx\affiliation\undefined -\else - \addtodef{\myauthor}{}{ \\ \affiliation} -\fi - -\ifx\address\undefined -\else - \addtodef{\myauthor}{}{ \\ \address} -\fi - -\ifx\phone\undefined -\else - \addtodef{\myauthor}{}{ \\ \phone} -\fi - -\ifx\email\undefined -\else - \addtodef{\myauthor}{}{ \\ \email} -\fi - -\ifx\web\undefined - \else - \addtodef{\myauthor}{}{ \\ \web} -\fi - -\title{\mytitle} -\author{\myauthor} - -\begin{document} - - - - - - - - % Bibliography -\bibliographystyle{\mybibliostyle} -\bibliocommand - -\end{document} - - - - - - - {\color[HTML]{ - - - - - - color:# - - - - - - } - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2rtf.xslt b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2rtf.xslt deleted file mode 100755 index 9040a1b3..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/XSLT/xhtml2rtf.xslt +++ /dev/null @@ -1,540 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -\ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460 -{\fonttbl{\f0\froman Times;} -{\f1\fmodern Courier;}} -{\stylesheet{\s0\f0\fs24\qj\sb280\sa280 Normal;} -{\s1\fs48\f0\sb280\sa280 Header1;} -{\s2\fs40\f0\sb280\sa280 Header2;} -{\s3\fs32\f0\sb280\sa280 Header3;} -{\s4\fs24\f0\sb280\sa280 Header4;} -{\s5\fs24\f0\sb280\sa280 Header5;} -{\s6\fs24\f0\sb280\sa280 Header6;} -{\s7\f1\fs20 Mono;} -} -{\colortbl;\red255\green255\blue255;} -{\info - - - - - }\margl1440\margr1440 -\f0\pard\sa280 - - - - - } - - - - {\title - - - - - - } - - - - - - - {\author - - - - - - } - - - - {\*\company - - - - - - - - - - - - - - - - - } - - - - {\keywords - - - - - - ,, - - - , - - - } - - - - {\*\copyright - - - - - - - - - - - - - - - - - } - - - - - - - - - \s0\qj - - \ - - - - - - -\i - - -\i0 - - - - - -\b - - -\b0 - - - - - -\s1 {\*\bkmkstart }{\*\bkmkend } - - - - -\s2 {\*\bkmkstart }{\*\bkmkend } - - - - -\s3 - - - - -\s4 - - - - -\s5 - - - - -\s6 - - - - - \line - - - - - - - - -\lin\rin750 - - - - \lin0\rin0 - - - - -\lin\rin750 - - - - \lin0\rin0 - - - - - - - - - - - {\super \chftn{\*\footnote{ - - - - }}} - - - - {\super \chftn{\*\footnote{ - - - - }}} - - - - - - - - - \url{ - - - - - - } - - - - - {\field{\*\fldinst{HYPERLINK " - - "}}{\fldrslt \b \cf0 - - - - - - }} - - - - - {\field{\*\fldinst REF - - }{\fldrslt \b \cf0 - - - - - - }} - - - - - {\field{\*\fldinst{HYPERLINK " - - "}}{\fldrslt \b \cf0 - - - - - - }}{\super \chftn{\*\footnote{ - - - - - - }}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ - - - - - - - - : - - - - - - - - - {\super \chftn{\*\footnote{ - - - - }}} - - - - - - - - - - - - - - - - \f1\fs20 - - \f0\fs24 - - - - - - - - - \f1\fs20 - - \f0\fs24 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/base.css b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/base.css deleted file mode 100755 index 21d3bd9d..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/base.css +++ /dev/null @@ -1,375 +0,0 @@ -/* - base.css - MultiMarkdown Zettel rendering - - Created by Christian Tietze on 2010-09-28. - http://christiantietze.de -*/ - -/* based on: - * base.css | v0.4 (06132010) | Thierry Koblentz - * See: http://thinkvitamin.com/design/setting-rather-than-resetting-default-styling/ - * typography guide: - * Azbuka - CSS Typographical Base Rendering Library - * http://code.google.com/p/azbuka/ - */ - -/* HTML 5 fix */ -header, nav, article, footer, aside, address, section { display: block; } - -/* * * * * * - * - * T Y P O G R A P H Y - * - */ - -/* using height:100% on html and body allows to style containers with a 100% height - * the overflow declaration is to make sure there is a gutter for the scollbar in all browsers regardless of content - * note that there is no font-size declaration set in this rule. If you wish to include one, you should use font-size: 100.01% to prevent bugs in IE and Opera - */ -html { - height: 100%; - overflow-y: scroll; - font-size: 100.01%; -} -/* not all browsers set white as the default background color - * color is set to create not too much contrast with the background color - * line-height is to ensure that text is legible enough (that there is enough space between the upper and lower line) - */ -body { -/* height: 100%;*/ -/* font-size: 0.8125em; */ - line-height: 1.618em; /* 13px, golden rule line-height */ - font-size-adjust:none; - font-style:normal; - font-variant:normal; - font-weight:normal; -} - -/* this choice of font-family is supposed to render text the same across platforms - * letter-spacing makes the font a bit more legible - * - * See Eric Meyer's article about Fixed Monospace Sizing - * http://meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/ - */ - -body, input, button, textarea, select, h1, h2, h3, h4, h5, h6 { - font-family: Georgia, "DejaVu Serif", serif; - letter-spacing: .05em; -} -pre, tt, code, kbd, samp, var { - font-family: "Anonymous Pro", "Courier New", Courier, monospace, serif; -} - -/* These should be self explanatory - */ -/* h1 { font-size: 2.615em; line-height: 1.18; } /* 34px */ -h1 { font-size: 2em; line-height: 1.19; } /* 26px */ -h2 { font-size: 1.618em; line-height: 1.24; } /* 21 */ -h3 { font-size: 1.308em; line-height: 1.23; } /* 17*/ -h4, h5, h6 { font-size: 1em; line-height: 1.3; font-weight: 700; } /* 13px */ - -h2, h3, h4, h5 { font-weight: normal; } - -/* styling for links and visited links as well as for links in a hovered, focus and active state - * make sure to keep these rules in that order, with :active being last - * text-decoration: none is to make the links more legible while they are in a hovered, focus or active state - * a:focus and :focus are used to help keyboard users, you may change their styling, but make sure to give users a visual clue of the element's state. - * outline:none used with the pseudo-class :hover is to avoid outline when a user clicks on links - * note that these last rules do not do anything in IE as this browser does not support "outline" - */ -a:link {text-decoration: none;border-bottom: 1px solid #000;color: #000;} -a:visited {} -a:hover {border-bottom-color: transparent;} -a:focus {text-decoration: none;} -a:focus,:focus {outline: 1px dotted #000;} -a:hover,a:active {outline: none;} - -/* - * This one is commented out as it may be overkill (users who use both a mouse and the keyboard would lose keyboard focus) - * Besides, this may create a performance issue - * html:hover a {outline: none;} - */ - -/* margin and padding values are reset for all these elements - * you could remove from there elements you do not used in your documents, but I don't think it'd worth it - */ -p, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, blockquote, th, td { - margin: 0; - padding: 0; -} - -body { padding: 0.8125em 0; } - -/* this is to prevent border from showing around fieldsets and images (i.e., images inside anchors) - */ -fieldset, img { - border: 0; -} - -/* to prevent a gap from showing below images in some browsers - */ -img {vertical-align: bottom;} - -/* Styling of list items - * This styles sheet contains a class to apply on lists to reset list-type and margin on LIs - */ -ol li, -ul ol li {list-style-type: decimal;} -ul li {list-style-type: disc;} -ul ul li {list-style-type: circle;} -ul ul ul li {list-style-type: square;} -ol ol li {list-style-type: lower-alpha;} -ol ol ol li {list-style-type: lower-roman;} - -/* These should be self explanatory - * I believe *most* UAs style sub and sup like this by default so I am not sure there is value to include these rules here - */ -sub { - vertical-align: sub; - font-size: smaller; -} - -sup { - vertical-align: super; - font-size: smaller; -} - -/* color is to make that element stands out (see color set via body) - * padding is used so Internet Explorer does not cut-off descenders in letters like p, g, etc.) - */ -legend { - color: #000; - padding-bottom: .5em; -} - -/* according to Eric Meyer's reset: tables still need 'cellspacing="0"' in the markup - */ -table { - border-collapse: collapse; - border-spacing: 0; -} - -/* caption and summary are very important for tabular data but because caption is nearly impossible to style across browsers many authors do not use it or use display:none to "hide" it (which is almost the same as not using it). - * so to prevent such workaround, I am positioning this element off-screen - */ -caption { - position: absolute; - left: -999em; -} - -/* all th should be centered unless they are in tbody (table body) - */ -th {text-align: center;} -tbody th {text-align: left;} - -/* code {color: #06f;} */ -code { background: rgba(255,255,255,0.8); padding: 0 0.404em; } -pre code { padding: 0; } -code, pre { font-size: 1em;} - -/* This should be self explanatory - */ -blockquote, q, em, cite, dfn, i, cite, var, address { - font-style: italic; -} - -blockquote em, q em, cite em { - margin-left: 0.3em; - letter-spacing: 0.2em; - word-spacing: 0.3em; -} - -/* to prevent some browsers from inserting quotes on "q" and "p" ("p" in blockquotes) - */ -blockquote p:before, blockquote p:after, q:before, q:after {content: '';} - -/* These should be self explanatory - */ -th, strong, dt, b { - font-weight: bold; -} - -ins { - text-decoration: none; - border-bottom: 3px double #333; -} - -del {text-decoration: line-through;} - -abbr { - border-bottom: 1px dotted #333; - font-variant: normal; -} - -/* Creating white space (vertical gutters) via padding - * most authors do not set right/left padding or margin on these elements, they rather use an extra wrapper or style the container with padding to create the left and right gap/gutter they need - * I find that the latter creates less robust layouts because it leads authors to mix padding with width which creates issue with the broken box model (IE5 or IE6 in quirks mode) - * so imho, setting this style using the child combinator (i.e., div > h1) should be the best way to do it, but unfortunately IE 6 does not support such syntax, so I have to go with the following + a reset (see next rule) - * - * Only applicable for non-iOS devices to preserve screen real estate. - */ -@media screen and (min-device-width: 480px) { -h1, h2, h3, h4, h5, h6, p, pre, ul, ol, dl, fieldset, address {padding:0 30px;} -} - -/* this is to reset the left/right gaps (created by the previous and next rules) on nested elements - */ -dd p, dd pre, dd ul, dd ol, dd dl, li p, li pre, li ul, li ol, li dl, fieldset p, fieldset ul, fieldset ol, blockquote p { - padding-right: 0; - padding-left: 0; -} - -ul { list-style-position:outside; } -li ul, -li ol { margin:0 1.618em; } -ul, ol { margin: 0 0 1.618em 0; } - -dl { margin: 0 0 1.618em 0; } -dl dt { font-weight: 700; } -dl dd { margin-left: 1.618em; } - -/* These should be self explanatory - */ -dd { - padding-left: 20px; - margin-top: .5em; -} - -/* we cannot use padding on a table to create left and right gaps (as we do with the elements above), instead we use margin - */ -table { - margin-right: 30px; - margin-left: 30px; -} - -/* we use margin for hr for the same reason we do for table - */ -hr { - margin-right: 30px; - margin-left: 30px; - border-style: inset; - border-width: 1px; - margin-bottom:1.618em; -} - -/* same here for blockquote to display a decent border */ -blockquote { margin-left: 30px; border-left: 0.8125em solid #ddd; padding-left: 0.8125em;} - -/* --top-- bottom margin solution */ -/* this is my approach to create white space between elements, you do not have to adhere to it - * rather than styling these elements with top and bottom margin, or simply bottom margin I only use top margin - */ -h1, h2, h3, h4, h5, h6 { margin-bottom: 5px;} -pre, dl, legend, input, button, textarea, select, address, table { margin-bottom: 1.618em; } -p { margin-bottom: 0.8125em; } - -/* top padding solution */ -/* this is a different approach which may be less frustrating for novice because it avoids running into collapsing margin and allows to clear floats while preserving space above the element - * if you decide to give this a try, then comment out the above rule and uncomment the two next ones - */ - /* - h1, h2, h3, h4, h5, h6, p, pre, dt, dd, li, legend, address {padding-top: 1.2em;} - hr, input, button, textarea, select, table {margin-top: 1.2em;} - */ - -address { margin-top:1.618em; font-style: italic; } - - -/* * * * * * - * - * F O R M E L E M E N T S - * - */ - -/* this should not affect the layout of the labels unless you style them in a way that padding applies - * if I include this here it is mostly because when labels are styled with float and clear, top padding creates a gap between labels (bottom margin would, but not top margin) - */ -label {padding-top: 1.618em;} - -/* line height helps to set the vertical alignment of radio buttons and check boxes (remember to group these in fieldsets) - */ -fieldset {line-height: 1;} - -/* vertical alignment of checkboxes (a different value is served to IE 7) - */ -input[type="checkbox"] { - vertical-align: bottom; - *vertical-align: baseline; -} - -/* vertical alignment of radio buttons - */ -input[type="radio"] {vertical-align: text-bottom;} - -/* vertical alignment of input fields for IE 6 - */ -input {_vertical-align: text-bottom;} - -/* a specific font-size is set for these elements - * the line-height is to override FF's default styling - */ -input, button, textarea, select, optgroup, option { - font-size: .9em; - line-height: 1.4 !important; -} - -/* this is to fix IE 6 and 7 which create extra right/left padding on buttons - * IMPORTANT: because IE 6 does not understand the first selector below, you need to apply the class "inputButton" to all input of type="button" in your documents - * the first declaration is for IE 6 and 7, the second one for IE 6 only, the third one is for all browsers. - */ -button, -input[type="submit"], -input[type="reset"], -input[type="button"], -.inputButton { - *overflow: visible; - _width: 0; - padding: .2em .4em; -} - - -/* * * * * * - * - * C L A S S E S - * - */ - -/* to style elements with the default padding and margin we set on headings, paragraphs, lists, etc. - * for example, this class could be used on a DIV inside a blockquote or a DIV inside a FORM, etc. - */ -.block { - padding: 0 30px; - margin-top: 1.618em; -} - -/* to swap padding for margin - * for example, this class could be used on a heading you'd style with a bottom border - */ -.padding2margin { - margin-right: 30px; - margin-left: 30px; - padding-right: 0; - padding-left: 0; -} - -/* list items are styled by default with markers (disc, etc.) and left margin - * if you apply the class "noMarker" to a list, its items won't display markers and won't have left margin - */ -.noMarker li { - list-style: none; - margin-left: 0; -} - -.footnotes ol { - list-style-position: inside; -} - -sup.footnote { - line-height: 0px; -} - -/* ease clickability */ -sup.footnote a { - padding: 0.1em 0.15em; -} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/ASCIIMathML.pm b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/ASCIIMathML.pm deleted file mode 100755 index ce568723..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/ASCIIMathML.pm +++ /dev/null @@ -1,1785 +0,0 @@ -package Text::ASCIIMathML; - -=pod -=head1 NAME - -Text::ASCIIMathML - Perl extension for parsing ASCIIMathML text into MathML - -=head1 SYNOPSIS - - use Text::ASCIIMathML; - - $parser=new Text::ASCIIMathML(); - - $parser->SetAttributes(ForMoz => 1); - - $ASCIIMathML = "int_0^1 e^x dx"; - $mathML = $parser->TextToMathML($ASCIIMathML); - $mathML = $parser->TextToMathML($ASCIIMathML, [title=>$ASCIIMathML]); - $mathML = $parser->TextToMathML($ASCIIMathML, undef, [displaystyle=>1]); - - $mathMLTree = $parser->TextToMathMLTree($ASCIIMathML); - $mathMLTree = $parser->TextToMathMLTree($ASCIIMathML, [title=>$ASCIIMathML]); - $mathMLTree = $parser->TextToMathMLTree($ASCIIMathML,undef,[displaystyle=>1]); - - $mathML = $mathMLTree->text(); - $latex = $mathMLTree->latex(); - -=head1 DESCRIPTION - -Text::ASCIIMathML is a parser for ASCIIMathML text which produces -MathML XML markup strings that are suitable for rendering by any -MathML-compliant browser. - -The parser uses the following attributes which are settable through -the SetAttributes method: - -=over 4 - -=item C - -Specifies that the fonts should be optimized for Netscape/Mozilla/Firefox. - -=back - -The output of the TextToMathML method always follows the schema - ... -The first argument of TextToMathML is the ASCIIMathML text to be -parsed into MathML. The second argument is a reference to an array of -attribute/value pairs to be attached to the node and the third -argument is a reference to an array of attribute/value pairs for the - node. Common attributes for the node are "title" and -"xmlns"=>"&mathml;". Common attributes for the node are -"mathcolor" (for text color), "displaystyle"=>"true" for using display -style instead of inline style, and "fontfamily". - -=head2 ASCIIMathML markup - -The syntax is very permissive and does not generate syntax -errors. This allows mathematically incorrect expressions to be -displayed, which is important for teaching purposes. It also causes -less frustration when previewing formulas. - -If you encode 'x^2' or 'a_(mn)' or 'a_{mn}' or '(x+1)/y' or 'sqrtx', -you pretty much get what you expect. The choice of grouping -parenthesis is up to you (they don't have to match either). If the -displayed expression can be parsed uniquely without them, they are -omitted. Most LaTeX commands are also supported, so the last two -formulas above can also be written as '\frac{x+1}{y}' and '\sqrt{x}'. - -The parser uses no operator precedence and only respects the grouping -brackets, subscripts, superscript, fractions and (square) roots. This -is done for reasons of efficiency and generality. The resulting MathML -code can quite easily be processed further to ensure additional -syntactic requirements of any particular application. - -=head3 The grammar - -Here is a definition of the grammar used to parse -ASCIIMathML expressions. In the Backus-Naur form given below, the -letter on the left of the C<::=> represents a category of symbols that -could be one of the possible sequences of symbols listed on the right. -The vertical bar C<|> separates the alternatives. - -=over 4 - - c ::= [A-z] | numbers | greek letters | other constant symbols - (see below) - u ::= 'sqrt' | 'text' | 'bb' | other unary symbols for font commands - b ::= 'frac' | 'root' | 'stackrel' | 'newcommand' | 'newsymbol' - binary symbols - l ::= ( | [ | { | (: | {: left brackets - r ::= ) | ] | } | :) | :} right brackets - S ::= c | lEr | uS | bSS | "any" simple expression - E ::= SE | S/S |S_S | S^S | S_S^S expression (fraction, sub-, - super-, subsuperscript) - -=back - -=head3 The translation rules - -Each terminal symbol is translated into a corresponding MathML -node. The constants are mostly converted to their respective Unicode -symbols. The other expressions are converted as follows: - -=over 4 - - lSr -> lSr - (note that any pair of brackets can be used to - delimit subexpressions, they don't have to match) - sqrt S -> S' - text S -> S' - "any" -> any - frac S1 S2 -> S1' S2' - root S1 S2 -> S2' S1' - stackrel S1 S2 -> S2' S1' - S1/S2 -> S1' S2' - S1_S2 -> S1 S2' - S1^S2 -> S1 S2' - S1_S2^S3 -> S1 S2' S3' or - S1 S2' S3' (in some cases) - S1^S2_S3 -> S1 S3' S2' or - S1 S3' S2' (in some cases) - -=back - -In the rules above, the expression C is the same as C, except that if -C has an outer level of brackets, then C is the expression inside -these brackets. - -=head3 Matrices - -A simple syntax for matrices is also recognized: - - l(S11,...,S1n),(...),(Sm1,...,Smn)r - or - l[S11,...,S1n],[...],[Sm1,...,Smn]r. - -Here C and C stand for any of the left and right -brackets (just like in the grammar they do not have to match). Both of -these expressions are translated to - - lS11... - S1n... - Sm1... - Smnr. - -Note that each row must have the same number of expressions, and there -should be at least two rows. - -LaTeX matrix commands are not recognized. - -=head3 Tokenization - -The input formula is broken into tokens using a "longest matching -initial substring search". Suppose the input formula has been -processed from left to right up to a fixed position. The longest -string from the list of constants (given below) that matches the -initial part of the remainder of the formula is the next token. If -there is no matching string, then the first character of the remainder -is the next token. The symbol table at the top of the ASCIIMathML.js -script specifies whether a symbol is a math operator (surrounded by a -C<< >> tag) or a math identifier (surrounded by a C<< >> -tag). For single character tokens, letters are treated as math -identifiers, and non-alphanumeric characters are treated as math -operators. For digits, see "Numbers" below. - -Spaces are significant when they separate characters and thus prevent -a certain string of characters from matching one of the -constants. Multiple spaces and end-of-line characters are equivalent -to a single space. - -=head3 Numbers - -A string of digits, optionally followed by a decimal point (a period) -and another string of digits, is parsed as a single token and -converted to a MathML number, i.e., enclosed with the C<< >> -tag. - -=head3 Greek letters - -=over 4 - -=item Lowercase letters - -C C C C C C C C -C C C C C C C C C -C C C C C C - -=item Uppercase letters - -C C C C C C C C -C C - -=item Variants - -C C C - -=back - -=head3 Standard functions - -sin cos tan csc sec cot sinh cosh tanh log ln det dim lim mod gcd lcm -min max - -=head3 Operation symbols - - Type Description Entity - + + + - - - - - * Mid dot ⋅ - ** Star ⋆ - // / / - \\ \ \ - xx Cross product × - -: Divided by ÷ - @ Compose functions ∘ - o+ Circle with plus ⊕ - ox Circle with x ⊗ - o. Circle with dot ⊙ - sum Sum for sub- and superscript ∑ - prod Product for sub- and superscript ∏ - ^^ Logic "and" ∧ - ^^^ Logic "and" for sub- and superscript ⋀ - vv Logic "or" ∨ - vvv Logic "or" for sub- and superscript ⋁ - nn Logic "intersect" ∩ - nnn Logic "intersect" for sub- and superscript ⋂ - uu Logic "union" ∪ - uuu Logic "union" for sub- and superscript ⋃ - -=head3 Relation symbols - - Type Description Entity - = = = - != Not equals ≠ - < < < - > > > - <= Less than or equal ≤ - >= Greater than or equal ≥ - -lt Precedes ≺ - >- Succeeds ≻ - in Element of ∈ - !in Not an element of ∉ - sub Subset ⊂ - sup Superset ⊃ - sube Subset or equal ⊆ - supe Superset or equal ⊇ - -= Equivalent ≡ - ~= Congruent to ≅ - ~~ Asymptotically equal to ≈ - prop Proportional to ∝ - -=head3 Logical symbols - - Type Description Entity - and And " and " - or Or " or " - not Not ¬ - => Implies ⇒ - if If " if " - iff If and only if ⇔ - AA For all ∀ - EE There exists ∃ - _|_ Perpendicular, bottom ⊥ - TT Top ⊤ - |-- Right tee ⊢ - |== Double right tee ⊨ - -=head3 Grouping brackets - - Type Description Entity - ( ( ( - ) ) ) - [ [ [ - ] ] ] - { { { - } } } - (: Left angle bracket ⟨ - :) Right angle bracket ⟩ - {: Invisible left grouping element - :} Invisible right grouping element - -=head3 Miscellaneous symbols - - Type Description Entity - int Integral ∫ - oint Countour integral ∮ - del Partial derivative &del; - grad Gradient ∇ - +- Plus or minus ± - O/ Null set ∅ - oo Infinity ∞ - aleph Hebrew letter aleph ℵ - & Ampersand & - /_ Angle ∠ - :. Therefore ∴ - ... Ellipsis ... - cdots Three centered dots ⋯ - \ Non-breaking space ( means space)   - quad Quad space    - diamond Diamond ⋄ - square Square □ - |__ Left floor ⌊ - __| Right floor ⌋ - |~ Left ceiling ⌈ - ~| Right ceiling ⌉ - CC Complex numbers ℂ - NN Natural numbers ℕ - QQ Rational numbers ℚ - RR Real numbers ℝ - ZZ Integers ℤ - -=head3 Arrows - - Type Description Entity - uarr Up arrow ↑ - darr Down arrow ↓ - rarr Right arrow → - -> Right arrow → - larr Left arrow ← - harr Horizontal (two-way) arrow ↔ - rArr Right double arrow ⇒ - lArr Left double arrow ⇐ - hArr Horizontal double arrow ⇔ - -=head3 Accents - - Type Description Output - hat x Hat over x x^ - bar x Bar over x x¯ - ul x Underbar under x x_ - vec x Right arrow over x x - dot x Dot over x x. - ddot x Double dot over x x.. - -=head3 Font commands - - Type Description - bb A Bold A - bbb A Double-struck A - cc A Calligraphic (script) A - tt A Teletype (monospace) A - fr A Fraktur A - sf A Sans-serif A - -=head3 Defining new commands and symbols - -It is possible to define new commands and symbols using the -'newcommand' and 'newsymbol' binary operators. The former defines a -macro that gets expanded and reparsed as ASCIIMathML and the latter -defines a constant that gets used as a math operator (C<< >>) -element. Both of the arguments must be text, optionally enclosed in -grouping operators. The 'newsymbol' operator also allows the -second argument to be a group of two text strings where the first is -the mathml operator and the second is the latex code to be output. - -For example, 'newcommand "DDX" "{:d/dx:}"' would define a new command -'DDX'. It could then be invoked like 'DDXf(x)', which would -expand to '{:d/dx:}f(x)'. The text 'newsymbol{"!le"}{"≰"}' -could be used to create a symbol you could invoke with '!le', as in 'a -!le b'. - -=head2 Attributes for - -=over 4 - -=item C - -The title attribute for the element, if specified. In many browsers, -this string will appear if you hover over the MathML markup. - -=item C - -The id attribute for the element, if specified. - -=item C - -The class attribute for the element, if specified. - -=back - -=head2 Attributes for - -=over 4 - -=item C - -The displaystyle attribute for the element, if specified. One of the -values "true" or "false". If the displaystyle is false, then fractions -are represented with a smaller font size and the placement of -subscripts and superscripts of sums and integrals changes. - -=item C - -The mathvariant attribute for the element, if specified. One of the -values "normal", "bold", "italic", "bold-italic", "double-struck", -"bold-fraktur", "script", "bold-script", "fraktur", "sans-serif", -"bold-sans-serif", "sans-serif-italic", "sans-serif-bold-italic", or -"monospace". - -=item C - -The mathsize attribute for the element, if specified. Either "small", -"normal" or "big", or of the form "number v-unit". - -=item C - -A string representing the font family. - -=item C - -The mathcolor attribute for the element, if specified. It be in one of -the forms "#rgb" or "#rrggbb", or should be an html-color-name. - -=item C - -The mathbackground attribute for the element, if specified. It should -be in one of the forms "#rgb" or "#rrggbb", or an html-color-name, or -the keyword "transparent". - - -=head1 METHODS - -=head2 C - -=head3 C - -Converts C<$text> to a MathML string. If the optional C<$math_attr> -argument is provided, it should be a reference to a hash of -attribute/value pairs for the C< > node. If the optional -C<$mstyle_attr> argument is provided, it should be a reference to a -hash of attribute/value pairs for the C< > node. - -=head3 C - -Like C except that instead of returning a string, it -returns a C representing the parsed MathML -structure. - -=head2 C - -=head3 C - -Returns a MathML string representing the parsed MathML structure -encoded by the C. - -=head3 C - -Returns a LaTeX string representing the parsed MathML structure -encoded by the C. - -=head1 BUGS AND SUGGESTIONS - -If you find bugs, think of anything that could improve Text::ASCIIMathML -or have any questions related to it, feel free to contact the author. - -=head1 AUTHOR - -Mark Nodine - -=head1 SEE ALSO - - MathML::Entities, - - -=head1 ACKNOWLEDGEMENTS - -This Perl module has been created by modifying Peter Jipsen's -ASCIIMathML.js script. He deserves full credit for the original -implementation; any bugs have probably been introduced by me. - -=head1 COPYRIGHT - -The Text::ASCIIMathML module is copyright (c) 2006 Mark Nodine, -USA. All rights reserved. - -You may use and distribute them under the terms of either the GNU -General Public License or the Artistic License, as specified in the -Perl README file. - -=cut - -use strict; -use warnings; - -our $VERSION = '0.81'; - -# Creates a new Text::ASCIIMathML parser object -sub new { - my ($class) = @_; - return bless {}, $class; -} - -# Sets an attribute to a given value -# Arguments: Attribute name, attribute value -# Returns: None -# Supported attributes: -# ForMoz Boolean to optimize for Netscape/Mozilla/Firefox -sub SetAttribute : method { - my ($self, $attr, $val) = @_; - $self->{attr}{$attr} = $val; -} - -# Converts an AsciiMathML string to a MathML one -# Arguments: AsciiMathML string, -# optional ref to array of attribute/value pairs for math node, -# optional ref to array of attribute/value pairs for mstyle node -# Returns: MathML string -sub TextToMathML : method { - my $tree = TextToMathMLTree(@_); - return $tree ? $tree->text : ''; -} - -# Converts an AsciiMathML string to a tree of MathML nodes -# Arguments: AsciiMathML string, -# optional ref to array of attribute/value pairs for math node, -# optional ref to array of attribute/value pairs for mstyle node -# Returns: top Text::ASCIIMathML::Node object or undefined -sub TextToMathMLTree : method { - my ($self, $expr, $mathAttr, $mstyleAttr) = @_; - $expr = '' unless defined $expr; - my $mstyle = $self->_createElementMathML('mstyle'); - $mstyle->setAttribute - (ref $mstyleAttr eq 'ARRAY' ? @$mstyleAttr : %$mstyleAttr) - if $mstyleAttr; - $self->{nestingDepth} = 0; - $expr =~ s/^\s+//; - $mstyle->appendChild(($self->_parseExpr($expr, 0))[0]); - return unless $mstyle->childNodes > 0; - my $math = $self->_createMmlNode('math', $mstyle); - $expr =~ s/\n\s*//g; - $math->setAttribute(ref $mathAttr eq 'ARRAY' ? @$mathAttr : %$mathAttr) - if $mathAttr; - - return $math; -} - - - -# Creates an Text::ASCIIMathML::Node object with no tag -# Arguments: None -# Returns: node object -sub _createDocumentFragment : method { - my ($self) = @_; - return Text::ASCIIMathML::Node->new($self); -} - -# Creates an Text::ASCIIMathML::Node object -# Arguments: tag -# Returns: node object -sub _createElementMathML : method { - my ($self, $t) = @_; - return Text::ASCIIMathML::Node->new($self, $t); -} - -# Creates an Text::ASCIIMathML::Node object and appends a node as a child -# Arguments: tag, node -# Returns: node object -sub _createMmlNode : method { - my ($self, $t, $obj) = @_; - my $node = Text::ASCIIMathML::Node->new($self, $t); - $node->appendChild($obj); - return $node; -} - -# Creates an Text::ASCIIMathML::Node text object with the given text -# Arguments: text -# Returns: node object -sub _createTextNode : method { - my ($self, $text) = @_; - return Text::ASCIIMathML::Node->newText ($self, $text); -} - -# Finds maximal initial substring of str that appears in names -# return null if there is none -# Arguments: string -# Returns: matched input, entry from AMSymbol (if any) -sub _getSymbol : method { - my $self = shift; - my ($input, $symbol) = $self->_getSymbol_(@_); - $self->{previousSymbol} = $symbol->{ttype} if $symbol; - return $input, $symbol; -} - -BEGIN { -# character lists for Mozilla/Netscape fonts -my $AMcal = [0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46]; -my $AMfrk = [0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128]; -my $AMbbb = [0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124]; - -# Create closure for static variables -my %AMSymbol = ( -"sqrt" => { tag=>"msqrt", output=>"sqrt", tex=>'', ttype=>"UNARY" }, -"root" => { tag=>"mroot", output=>"root", tex=>'', ttype=>"BINARY" }, -"frac" => { tag=>"mfrac", output=>"/", tex=>'', ttype=>"BINARY" }, -"/" => { tag=>"mfrac", output=>"/", tex=>'', ttype=>"INFIX" }, -"stackrel" => { tag=>"mover", output=>"stackrel", tex=>'', ttype=>"BINARY" }, -"_" => { tag=>"msub", output=>"_", tex=>'', ttype=>"INFIX" }, -"^" => { tag=>"msup", output=>"^", tex=>'', ttype=>"INFIX" }, -"text" => { tag=>"mtext", output=>"text", tex=>'', ttype=>"TEXT" }, -"mbox" => { tag=>"mtext", output=>"mbox", tex=>'', ttype=>"TEXT" }, -"\"" => { tag=>"mtext", output=>"mbox", tex=>'', ttype=>"TEXT" }, - -# new for perl -"newcommand" => { ttype=>"BINARY"}, -"newsymbol" => { ttype=>"BINARY" }, - -# some greek symbols -"alpha" => { tag=>"mi", output=>"α", tex=>'', ttype=>"CONST" }, -"beta" => { tag=>"mi", output=>"β", tex=>'', ttype=>"CONST" }, -"chi" => { tag=>"mi", output=>"χ", tex=>'', ttype=>"CONST" }, -"delta" => { tag=>"mi", output=>"δ", tex=>'', ttype=>"CONST" }, -"Delta" => { tag=>"mo", output=>"Δ", tex=>'', ttype=>"CONST" }, -"epsi" => { tag=>"mi", output=>"ε", tex=>"epsilon", ttype=>"CONST" }, -"varepsilon" => { tag=>"mi", output=>"ɛ", tex=>'', ttype=>"CONST" }, -"eta" => { tag=>"mi", output=>"η", tex=>'', ttype=>"CONST" }, -"gamma" => { tag=>"mi", output=>"γ", tex=>'', ttype=>"CONST" }, -"Gamma" => { tag=>"mo", output=>"Γ", tex=>'', ttype=>"CONST" }, -"iota" => { tag=>"mi", output=>"ι", tex=>'', ttype=>"CONST" }, -"kappa" => { tag=>"mi", output=>"κ", tex=>'', ttype=>"CONST" }, -"lambda" => { tag=>"mi", output=>"λ", tex=>'', ttype=>"CONST" }, -"Lambda" => { tag=>"mo", output=>"Λ", tex=>'', ttype=>"CONST" }, -"mu" => { tag=>"mi", output=>"μ", tex=>'', ttype=>"CONST" }, -"nu" => { tag=>"mi", output=>"ν", tex=>'', ttype=>"CONST" }, -"omega" => { tag=>"mi", output=>"ω", tex=>'', ttype=>"CONST" }, -"Omega" => { tag=>"mo", output=>"Ω", tex=>'', ttype=>"CONST" }, -"phi" => { tag=>"mi", output=>"ϕ", tex=>'', ttype=>"CONST" }, -"varphi" => { tag=>"mi", output=>"φ", tex=>'', ttype=>"CONST" }, -"Phi" => { tag=>"mo", output=>"Φ", tex=>'', ttype=>"CONST" }, -"pi" => { tag=>"mi", output=>"π", tex=>'', ttype=>"CONST" }, -"Pi" => { tag=>"mo", output=>"Π", tex=>'', ttype=>"CONST" }, -"psi" => { tag=>"mi", output=>"ψ", tex=>'', ttype=>"CONST" }, -"Psi" => { tag=>"mi", output=>"Ψ", tex=>'', ttype=>"CONST" }, -"rho" => { tag=>"mi", output=>"ρ", tex=>'', ttype=>"CONST" }, -"sigma" => { tag=>"mi", output=>"σ", tex=>'', ttype=>"CONST" }, -"Sigma" => { tag=>"mo", output=>"Σ", tex=>'', ttype=>"CONST" }, -"tau" => { tag=>"mi", output=>"τ", tex=>'', ttype=>"CONST" }, -"theta" => { tag=>"mi", output=>"θ", tex=>'', ttype=>"CONST" }, -"vartheta" => { tag=>"mi", output=>"ϑ", tex=>'', ttype=>"CONST" }, -"Theta" => { tag=>"mo", output=>"Θ", tex=>'', ttype=>"CONST" }, -"upsilon" => { tag=>"mi", output=>"υ", tex=>'', ttype=>"CONST" }, -"xi" => { tag=>"mi", output=>"ξ", tex=>'', ttype=>"CONST" }, -"Xi" => { tag=>"mo", output=>"Ξ", tex=>'', ttype=>"CONST" }, -"zeta" => { tag=>"mi", output=>"ζ", tex=>'', ttype=>"CONST" }, - -# binary operation symbols -"*" => { tag=>"mo", output=>"⋅", tex=>"cdot", ttype=>"CONST" }, -"**" => { tag=>"mo", output=>"⋆", tex=>"star", ttype=>"CONST" }, -"//" => { tag=>"mo", output=>"/", tex=>'', ttype=>"CONST" }, -"\\\\" => { tag=>"mo", output=>"\\", tex=>"backslash", ttype=>"CONST" }, -"setminus" => { tag=>"mo", output=>"\\", tex=>'', ttype=>"CONST" }, -"xx" => { tag=>"mo", output=>"×", tex=>"times", ttype=>"CONST" }, -"-:" => { tag=>"mo", output=>"÷", tex=>"div", ttype=>"CONST" }, -"@" => { tag=>"mo", output=>"∘", tex=>"circ", ttype=>"CONST" }, -"o+" => { tag=>"mo", output=>"⊕", tex=>"oplus", ttype=>"CONST" }, -"ox" => { tag=>"mo", output=>"⊗", tex=>"otimes", ttype=>"CONST" }, -"o." => { tag=>"mo", output=>"⊙", tex=>"odot", ttype=>"CONST" }, -"sum" => { tag=>"mo", output=>"∑", tex=>'', ttype=>"UNDEROVER" }, -"prod" => { tag=>"mo", output=>"∏", tex=>'', ttype=>"UNDEROVER" }, -"^^" => { tag=>"mo", output=>"∧", tex=>"wedge", ttype=>"CONST" }, -"^^^" => { tag=>"mo", output=>"⋀", tex=>"bigwedge", ttype=>"UNDEROVER" }, -"vv" => { tag=>"mo", output=>"∨", tex=>"vee", ttype=>"CONST" }, -"vvv" => { tag=>"mo", output=>"⋁", tex=>"bigvee", ttype=>"UNDEROVER" }, -"nn" => { tag=>"mo", output=>"∩", tex=>"cap", ttype=>"CONST" }, -"nnn" => { tag=>"mo", output=>"⋂", tex=>"bigcap", ttype=>"UNDEROVER" }, -"uu" => { tag=>"mo", output=>"∪", tex=>"cup", ttype=>"CONST" }, -"uuu" => { tag=>"mo", output=>"⋃", tex=>"bigcup", ttype=>"UNDEROVER" }, - -# binary relation symbols -"!=" => { tag=>"mo", output=>"≠", tex=>"ne", ttype=>"CONST" }, -":=" => { tag=>"mo", output=>":=", tex=>'', ttype=>"CONST" }, -#"lt" => { tag=>"mo", output=>"<", tex=>'', ttype=>"CONST" }, -"lt" => { tag=>"mo", output=>"<", tex=>'', ttype=>"CONST" }, -"<=" => { tag=>"mo", output=>"≤", tex=>"le", ttype=>"CONST" }, -"lt=" => { tag=>"mo", output=>"≤", tex=>"leq", ttype=>"CONST", latex=>1 }, -">=" => { tag=>"mo", output=>"≥", tex=>"ge", ttype=>"CONST" }, -"geq" => { tag=>"mo", output=>"≥", tex=>'', ttype=>"CONST", latex=>1 }, -"-<" => { tag=>"mo", output=>"≺", tex=>"prec", ttype=>"CONST", latex=>1 }, -"-lt" => { tag=>"mo", output=>"≺", tex=>'', ttype=>"CONST" }, -">-" => { tag=>"mo", output=>"≻", tex=>"succ", ttype=>"CONST" }, -"in" => { tag=>"mo", output=>"∈", tex=>'', ttype=>"CONST" }, -"!in" => { tag=>"mo", output=>"∉", tex=>"notin", ttype=>"CONST" }, -"sub" => { tag=>"mo", output=>"⊂", tex=>"subset", ttype=>"CONST" }, -"sup" => { tag=>"mo", output=>"⊃", tex=>"supset", ttype=>"CONST" }, -"sube" => { tag=>"mo", output=>"⊆", tex=>"subseteq", ttype=>"CONST" }, -"supe" => { tag=>"mo", output=>"⊇", tex=>"supseteq", ttype=>"CONST" }, -"-=" => { tag=>"mo", output=>"≡", tex=>"equiv", ttype=>"CONST" }, -"~=" => { tag=>"mo", output=>"≅", tex=>"cong", ttype=>"CONST" }, -"~~" => { tag=>"mo", output=>"≈", tex=>"approx", ttype=>"CONST" }, -"prop" => { tag=>"mo", output=>"∝", tex=>"propto", ttype=>"CONST" }, - -# new for perl -"<" => { tag=>"mo", output=>"<", tex=>'', ttype=>"CONST" }, -"gt" => { tag=>"mo", output=>">", tex=>'', ttype=>"CONST" }, -">" => { tag=>"mo", output=>">", tex=>'', ttype=>"CONST" }, -"\\!" => { tag=>"", output=>'', tex=>'', ttype=>"NOP" }, - - -# logical symbols -"and" => { tag=>"mtext", output=>"and", tex=>'', ttype=>"SPACE" }, -"or" => { tag=>"mtext", output=>"or", tex=>'', ttype=>"SPACE" }, -"not" => { tag=>"mo", output=>"¬", tex=>"neg", ttype=>"CONST" }, -"=>" => { tag=>"mo", output=>"⇒", tex=>"implies", ttype=>"CONST" }, -"if" => { tag=>"mo", output=>"if", tex=>'if', ttype=>"SPACE" }, -"<=>" => { tag=>"mo", output=>"⇔", tex=>"iff", ttype=>"CONST" }, -"AA" => { tag=>"mo", output=>"∀", tex=>"forall", ttype=>"CONST" }, -"EE" => { tag=>"mo", output=>"∃", tex=>"exists", ttype=>"CONST" }, -"_|_" => { tag=>"mo", output=>"⊥", tex=>"bot", ttype=>"CONST" }, -"TT" => { tag=>"mo", output=>"⊤", tex=>"top", ttype=>"CONST" }, -"|--" => { tag=>"mo", output=>"⊢", tex=>"vdash", ttype=>"CONST" }, -"|==" => { tag=>"mo", output=>"⊨", tex=>"models", ttype=>"CONST" }, - -# grouping brackets -"(" => { tag=>"mo", output=>"(", tex=>'', ttype=>"LEFTBRACKET" }, -")" => { tag=>"mo", output=>")", tex=>'', ttype=>"RIGHTBRACKET" }, -"[" => { tag=>"mo", output=>"[", tex=>'', ttype=>"LEFTBRACKET" }, -"]" => { tag=>"mo", output=>"]", tex=>'', ttype=>"RIGHTBRACKET" }, -"{" => { tag=>"mo", output=>"{", tex=>'', ttype=>"LEFTBRACKET" }, -"}" => { tag=>"mo", output=>"}", tex=>'', ttype=>"RIGHTBRACKET" }, -"|" => { tag=>"mo", output=>"|", tex=>'', ttype=>"LEFTRIGHT" }, -# {input:"||", tag:"mo", output:"||", tex:null, ttype:LEFTRIGHT}, -"(:" => { tag=>"mo", output=>"〈", tex=>"langle", ttype=>"LEFTBRACKET" }, -":)" => { tag=>"mo", output=>"〉", tex=>"rangle", ttype=>"RIGHTBRACKET" }, -"<<" => { tag=>"mo", output=>"〈", tex=>'langle', ttype=>"LEFTBRACKET" }, -">>" => { tag=>"mo", output=>"〉", tex=>'rangle', ttype=>"RIGHTBRACKET" }, -"{:" => { tag=>"mo", output=>"{:", tex=>'', ttype=>"LEFTBRACKET", invisible=>"true" }, -":}" => { tag=>"mo", output=>":}", tex=>'', ttype=>"RIGHTBRACKET", invisible=>"true" }, - -# miscellaneous symbols -"int" => { tag=>"mo", output=>"∫", tex=>'', ttype=>"CONST" }, -"dx" => { tag=>"mi", output=>"{:d x:}", tex=>'', ttype=>"DEFINITION" }, -"dy" => { tag=>"mi", output=>"{:d y:}", tex=>'', ttype=>"DEFINITION" }, -"dz" => { tag=>"mi", output=>"{:d z:}", tex=>'', ttype=>"DEFINITION" }, -"dt" => { tag=>"mi", output=>"{:d t:}", tex=>'', ttype=>"DEFINITION" }, -"oint" => { tag=>"mo", output=>"∮", tex=>'', ttype=>"CONST" }, -"del" => { tag=>"mo", output=>"∂", tex=>"partial", ttype=>"CONST" }, -"grad" => { tag=>"mo", output=>"∇", tex=>"nabla", ttype=>"CONST" }, -"+-" => { tag=>"mo", output=>"±", tex=>"pm", ttype=>"CONST" }, -"O/" => { tag=>"mo", output=>"∅", tex=>"emptyset", ttype=>"CONST" }, -"oo" => { tag=>"mo", output=>"∞", tex=>"infty", ttype=>"CONST" }, -"aleph" => { tag=>"mo", output=>"ℵ", tex=>'', ttype=>"CONST" }, -"..." => { tag=>"mo", output=>"...", tex=>"ldots", ttype=>"CONST" }, -":." => { tag=>"mo", output=>"∴", tex=>"therefore", ttype=>"CONST" }, -"/_" => { tag=>"mo", output=>"∠", tex=>"angle", ttype=>"CONST" }, -"&" => { tag=>"mo", output=>"&", tex=>'\&', ttype=>"CONST" }, -"\\ " => { tag=>"mo", output=>" ", tex=>'\,', ttype=>"CONST" }, -"quad" => { tag=>"mo", output=>"  ", tex=>'', ttype=>"CONST" }, -"qquad" => { tag=>"mo", output=>"    ", tex=>'', ttype=>"CONST" }, -"cdots" => { tag=>"mo", output=>"⋯", tex=>'', ttype=>"CONST" }, -"vdots" => { tag=>"mo", output=>"⋮", tex=>'', ttype=>"CONST" }, -"ddots" => { tag=>"mo", output=>"⋱", tex=>'', ttype=>"CONST" }, -"diamond" => { tag=>"mo", output=>"⋄", tex=>'', ttype=>"CONST" }, -"square" => { tag=>"mo", output=>"□", tex=>'', ttype=>"CONST" }, -"|__" => { tag=>"mo", output=>"⌊", tex=>"lfloor", ttype=>"CONST" }, -"__|" => { tag=>"mo", output=>"⌋", tex=>"rfloor", ttype=>"CONST" }, -"|~" => { tag=>"mo", output=>"⌈", tex=>"lceil", ttype=>"CONST" }, -"~|" => { tag=>"mo", output=>"⌉", tex=>"rceil", ttype=>"CONST" }, -"CC" => { tag=>"mo", output=>"ℂ", tex=>'', ttype=>"CONST" }, -"NN" => { tag=>"mo", output=>"ℕ", tex=>'', ttype=>"CONST" }, -"QQ" => { tag=>"mo", output=>"ℚ", tex=>'', ttype=>"CONST" }, -"RR" => { tag=>"mo", output=>"ℝ", tex=>'', ttype=>"CONST" }, -"ZZ" => { tag=>"mo", output=>"ℤ", tex=>'', ttype=>"CONST" }, -"f" => { tag=>"mi", output=>"f", tex=>'', ttype=>"UNARY", func=>"true" }, -"g" => { tag=>"mi", output=>"g", tex=>'', ttype=>"UNARY", func=>"true" }, - -# standard functions -"lim" => { tag=>"mo", output=>"lim", tex=>'', ttype=>"UNDEROVER" }, -"Lim" => { tag=>"mo", output=>"Lim", tex=>'', ttype=>"UNDEROVER" }, -"sin" => { tag=>"mo", output=>"sin", tex=>'', ttype=>"UNARY", func=>"true" }, -"cos" => { tag=>"mo", output=>"cos", tex=>'', ttype=>"UNARY", func=>"true" }, -"tan" => { tag=>"mo", output=>"tan", tex=>'', ttype=>"UNARY", func=>"true" }, -"sinh" => { tag=>"mo", output=>"sinh", tex=>'', ttype=>"UNARY", func=>"true" }, -"cosh" => { tag=>"mo", output=>"cosh", tex=>'', ttype=>"UNARY", func=>"true" }, -"tanh" => { tag=>"mo", output=>"tanh", tex=>'', ttype=>"UNARY", func=>"true" }, -"cot" => { tag=>"mo", output=>"cot", tex=>'', ttype=>"UNARY", func=>"true" }, -"sec" => { tag=>"mo", output=>"sec", tex=>'', ttype=>"UNARY", func=>"true" }, -"csc" => { tag=>"mo", output=>"csc", tex=>'', ttype=>"UNARY", func=>"true" }, -"log" => { tag=>"mo", output=>"log", tex=>'', ttype=>"UNARY", func=>"true" }, -"ln" => { tag=>"mo", output=>"ln", tex=>'', ttype=>"UNARY", func=>"true" }, -"det" => { tag=>"mo", output=>"det", tex=>'', ttype=>"UNARY", func=>"true" }, -"dim" => { tag=>"mo", output=>"dim", tex=>'', ttype=>"CONST" }, -"mod" => { tag=>"mo", output=>"mod", tex=>'', ttype=>"CONST" }, -"gcd" => { tag=>"mo", output=>"gcd", tex=>'', ttype=>"UNARY", func=>"true" }, -"lcm" => { tag=>"mo", output=>"lcm", tex=>'', ttype=>"UNARY", func=>"true" }, -"lub" => { tag=>"mo", output=>"lub", tex=>'', ttype=>"CONST" }, -"glb" => { tag=>"mo", output=>"glb", tex=>'', ttype=>"CONST" }, -"min" => { tag=>"mo", output=>"min", tex=>'', ttype=>"UNDEROVER" }, -"max" => { tag=>"mo", output=>"max", tex=>'', ttype=>"UNDEROVER" }, - -# arrows -"uarr" => { tag=>"mo", output=>"↑", tex=>"uparrow", ttype=>"CONST" }, -"darr" => { tag=>"mo", output=>"↓", tex=>"downarrow", ttype=>"CONST" }, -"rarr" => { tag=>"mo", output=>"→", tex=>"rightarrow", ttype=>"CONST" }, -"->" => { tag=>"mo", output=>"→", tex=>"to", ttype=>"CONST", latex=>1 }, -"|->" => { tag=>"mo", output=>"↦", tex=>"mapsto", ttype=>"CONST" }, -"larr" => { tag=>"mo", output=>"←", tex=>"leftarrow", ttype=>"CONST" }, -"harr" => { tag=>"mo", output=>"↔", tex=>"leftrightarrow", ttype=>"CONST" }, -"rArr" => { tag=>"mo", output=>"⇒", tex=>"Rightarrow", ttype=>"CONST", latex=>1 }, -"lArr" => { tag=>"mo", output=>"⇐", tex=>"Leftarrow", ttype=>"CONST" }, -"hArr" => { tag=>"mo", output=>"⇔", tex=>"Leftrightarrow", ttype=>"CONST", latex=>1 }, - -# commands with argument - -"hat" => { tag=>"mover", output=>"^", tex=>'', ttype=>"UNARY", acc=>"true" }, -"bar" => { tag=>"mover", output=>"¯", tex=>"overline", ttype=>"UNARY", acc=>"true" }, -"vec" => { tag=>"mover", output=>"→", tex=>'', ttype=>"UNARY", acc=>"true" }, -"dot" => { tag=>"mover", output=>".", tex=>'', ttype=>"UNARY", acc=>"true" }, -"ddot" => { tag=>"mover", output=>"..", tex=>'', ttype=>"UNARY", acc=>"true" }, -"ul" => { tag=>"munder", output=>"̲", tex=>"underline", ttype=>"UNARY", acc=>"true" }, - -"bb" => { tag=>"mstyle", atname=>"fontweight", atval=>"bold", output=>"bb", tex=>'', ttype=>"UNARY" }, -"mathbf" => { tag=>"mstyle", atname=>"fontweight", atval=>"bold", output=>"mathbf", tex=>'', ttype=>"UNARY" }, -"sf" => { tag=>"mstyle", atname=>"fontfamily", atval=>"sans-serif", output=>"sf", tex=>'', ttype=>"UNARY" }, -"mathsf" => { tag=>"mstyle", atname=>"fontfamily", atval=>"sans-serif", output=>"mathsf", tex=>'', ttype=>"UNARY" }, -"bbb" => { tag=>"mstyle", atname=>"mathvariant", atval=>"double-struck", output=>"bbb", tex=>'', ttype=>"UNARY", codes=>$AMbbb }, -"mathbb" => { tag=>"mstyle", atname=>"mathvariant", atval=>"double-struck", output=>"mathbb", tex=>'', ttype=>"UNARY", codes=>$AMbbb }, -"cc" => { tag=>"mstyle", atname=>"mathvariant", atval=>"script", output=>"cc", tex=>'', ttype=>"UNARY", codes=>$AMcal }, -"mathcal" => { tag=>"mstyle", atname=>"mathvariant", atval=>"script", output=>"mathcal", tex=>'', ttype=>"UNARY", codes=>$AMcal }, -"tt" => { tag=>"mstyle", atname=>"fontfamily", atval=>"monospace", output=>"tt", tex=>'', ttype=>"UNARY" }, -"mathtt" => { tag=>"mstyle", atname=>"fontfamily", atval=>"monospace", output=>"mathtt", tex=>'', ttype=>"UNARY" }, -"fr" => { tag=>"mstyle", atname=>"mathvariant", atval=>"fraktur", output=>"fr", tex=>'', ttype=>"UNARY", codes=>$AMfrk }, -"mathfrak" => { tag=>"mstyle", atname=>"mathvariant", atval=>"fraktur", output=>"mathfrak", tex=>'', ttype=>"UNARY", codes=>$AMfrk }, -); - -# Preprocess AMSymbol for lexer regular expression -# Preprocess AMSymbol for tex input -my %AMTexSym = map(($AMSymbol{$_}{tex} || $_, $_), - grep($AMSymbol{$_}{tex}, keys %AMSymbol)); -my $Ident_RE = join '|', map("\Q$_\E", - sort {length($b) - length($a)} (keys %AMSymbol, - keys %AMTexSym)); - -sub _getSymbol_ : method { - my ($self, $str) = @_; - for ($str) { - /^(\d+(\.\d+)?)/ || /^(\.\d+)/ - and return $1, {tag=>'mn', output=>$1, ttype=>'CONST'}; - $self->{Definition_RE} && /^($self->{Definition_RE})/ and - return $1, $self->{Definitions}{$1}; - /^($Ident_RE)/o and - return $1,$AMTexSym{$1} ? $AMSymbol{$AMTexSym{$1}} : $AMSymbol{$1}; - /^([A-Za-z])/ and - return $1, {tag=>'mi', output=>$1, ttype=>'CONST'}; - /^(.)/ and - return $1 eq '-' && defined $self->{previousSymbol} && - $self->{previousSymbol} eq 'INFIX' ? - ($1, {tag=>'mo', output=>$1, ttype=>'UNARY', func=>"true"} ) : - ($1, {tag=>'mo', output=>$1, ttype=>'CONST'}); - } -} - -# Used so that Text::ASCIIMathML::Node can get access to the symbol table -sub _get_amsymbol_ { - return \%AMSymbol; -} -} - -# Parses an E expression -# Arguments: string to parse, whether to look for a right bracket -# Returns: parsed node (if successful), remaining unparsed string -sub _parseExpr : method { - my ($self, $str, $rightbracket) = @_; - my $newFrag = $self->_createDocumentFragment(); - my ($node, $input, $symbol); - do { - $str = _removeCharsAndBlanks($str, 0); - ($node, $str) = $self->_parseIexpr($str); - ($input, $symbol) = $self->_getSymbol($str); - if (defined $symbol && $symbol->{ttype} eq 'INFIX' && $input eq '/') { - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseIexpr($str); - if ($result[0]) { - _removeBrackets($result[0]); - } - else { # show box in place of missing argument - $result[0] = $self->_createMmlNode - ('mo', $self->_createTextNode('A1;')); - } - $str = $result[1]; - _removeBrackets($node); - $node = $self->_createMmlNode($symbol->{tag}, $node); - $node->appendChild($result[0]); - $newFrag->appendChild($node); - ($input, $symbol) = $self->_getSymbol($str); - } - elsif (defined $node) { - $newFrag->appendChild($node); - } - } while (defined $symbol && ($symbol->{ttype} ne 'RIGHTBRACKET' && - ($symbol->{ttype} ne 'LEFTRIGHT' || - $rightbracket) - || $self->{nestingDepth} == 0) && - $symbol->{output} ne ''); - if (defined $symbol && $symbol->{ttype} =~ /RIGHTBRACKET|LEFTRIGHT/) { - my @childNodes = $newFrag->childNodes; - if (@childNodes > 1 && - $childNodes[-1]->nodeName eq 'mrow' && - $childNodes[-2]->nodeName eq 'mo' && - $childNodes[-2]->firstChild->nodeValue eq ',') { # matrix - my $right = $childNodes[-1]->lastChild->firstChild->nodeValue; - if ($right =~ /[\)\]]/) { - my $left = $childNodes[-1]->firstChild->firstChild->nodeValue; - if ("$left$right" =~ /^\(\)$/ && $symbol->{output} ne '}' || - "$left$right" =~ /^\[\]$/) { - my @pos; # positions of commas - my $matrix = 1; - my $m = @childNodes; - for (my $i=0; $matrix && $i < $m; $i += 2) { - $pos[$i] = []; - $node = $childNodes[$i]; - $matrix = - $node->nodeName eq 'mrow' && - ($i == $m-1 || - $node->nextSibling->nodeName eq 'mo' && - $node->nextSibling->firstChild->nodeValue eq ',')&& - $node->firstChild->firstChild->nodeValue eq $left&& - $node->lastChild->firstChild->nodeValue eq $right - if $matrix; - if ($matrix) { - for (my $j=0; $j<($node->childNodes); $j++) { - if (($node->childNodes)[$j]->firstChild-> - nodeValue eq ',') { - push @{$pos[$i]}, $j; - } - } - } - if ($matrix && $i > 1) { - $matrix = @{$pos[$i]} == @{$pos[$i-2]}; - } - } - if ($matrix) { - my $table = $self->_createDocumentFragment(); - for (my $i=0; $i<$m; $i += 2) { - my $row = $self->_createDocumentFragment(); - my $frag = $self->_createDocumentFragment(); - # (-,-,...,-,-) - $node = $newFrag->firstChild; - my $n = $node->childNodes; - my $k = 0; - $node->removeChild($node->firstChild); # remove ( - for (my $j=1; $j<$n-1; $j++) { - if ($k < @{$pos[$i]} && $j == $pos[$i][$k]) { - # remove , - $row->appendChild - ($self->_createMmlNode('mtd', $frag)); - $frag = $self->_createDocumentFragment(); - $k++; - } - else { - $frag->appendChild($node->firstChild); - } - $node->removeChild($node->firstChild); - } - $row->appendChild - ($self->_createMmlNode('mtd', $frag)); - if ($newFrag->childNodes > 2) { - # remove ) - $newFrag->removeChild($newFrag->firstChild); - # remove , - $newFrag->removeChild($newFrag->firstChild); - } - $table->appendChild - ($self->_createMmlNode('mtr', $row)); - } - $node = $self->_createMmlNode('mtable', $table); - $node->setAttribute('columnalign', 'left') - if $symbol->{invisible}; - $newFrag->replaceChild($node, $newFrag->firstChild); - } - } - } - } - $str = _removeCharsAndBlanks($str, length $input); - if (! $symbol->{invisible}) { - $node = $self->_createMmlNode - ('mo', $self->_createTextNode($symbol->{output})); - $newFrag->appendChild($node); - } - } - return $newFrag, $str; -} - -# Parses an I expression -# Arguments: string to parse -# Returns: parsed node (if successful), remaining unparsed string -sub _parseIexpr : method { - my ($self, $str) = @_; - $str = _removeCharsAndBlanks($str, 0); - my ($in1, $sym1) = $self->_getSymbol($str); - my $node; - ($node, $str) = $self->_parseSexpr($str); - my ($input, $symbol) = $self->_getSymbol($str); - if (defined $symbol && $symbol->{ttype} eq 'INFIX' && $input ne '/') { -# if (symbol.input == "/") result = AMparseIexpr(str); else ... - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseSexpr($str); - if ($result[0]) { - _removeBrackets($result[0]); - } - else { # show box in place of missing argument - $result[0] = $self->_createMmlNode - ('mo', $self->_createTextNode("A1;")); - } - $str = $result[1]; - if ($input eq '_') { - my ($in2, $sym2) = $self->_getSymbol($str); - my $underover = $sym1->{ttype} eq 'UNDEROVER'; - if ($in2 eq '^') { - $str = _removeCharsAndBlanks($str, length $in2); - my @res2 = $self->_parseSexpr($str); - _removeBrackets($res2[0]); - $str = $res2[1]; - $node = $self->_createMmlNode - ($underover ? 'munderover' : 'msubsup', $node); - $node->appendChild($result[0]); - $node->appendChild($res2[0]); - $node = $self->_createMmlNode('mrow',$node); # so sum does not stretch - } - else { - $node = $self->_createMmlNode - ($underover ? 'munder' : 'msub', $node); - $node->appendChild($result[0]); - } - } - elsif ($input eq '^') { - my ($in2, $sym2) = $self->_getSymbol($str); - my $underover = $sym1->{ttype} eq 'UNDEROVER'; - if ($in2 eq '_') { - $str = _removeCharsAndBlanks($str, length $in2); - my @res2 = $self->_parseSexpr($str); - _removeBrackets($res2[0]); - $str = $res2[1]; - $node = $self->_createMmlNode - ($underover ? 'munderover' : 'msubsup', $node); - $node->appendChild($res2[0]); - $node->appendChild($result[0]); - $node = $self->_createMmlNode('mrow',$node); # so sum does not stretch - } - else { - $node = $self->_createMmlNode - ($underover ? 'mover' : 'msup', $node); - $node->appendChild($result[0]); - } - } - else { - $node = $self->_createMmlNode($symbol->{tag}, $node); - $node->appendChild($result[0]); - } - } - return $node, $str; -} - -# Parses an S expression -# Arguments: string to parse -# Returns: parsed node (if successful), remaining unparsed string -sub _parseSexpr : method { - my ($self, $str) = @_; - my $newFrag = $self->_createDocumentFragment(); - $str = _removeCharsAndBlanks($str, 0); - my ($input, $symbol) = $self->_getSymbol($str); - return (undef, $str) - if ! defined $symbol || - $symbol->{ttype} eq 'RIGHTBRACKET' && $self->{nestingDepth} > 0; - if ($symbol->{ttype} eq 'DEFINITION') { - $str = $symbol->{output} . _removeCharsAndBlanks($str, length $input); - ($input, $symbol) = $self->_getSymbol($str); - } - my $ttype = $symbol->{ttype}; - if ($ttype =~ /UNDEROVER|CONST/) { - $str = _removeCharsAndBlanks($str, length $input); - return - $self->_createMmlNode($symbol->{tag}, - $self->_createTextNode($symbol->{output})), - $str; - } - if ($ttype eq 'LEFTBRACKET') { - $self->{nestingDepth}++; - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseExpr($str, 1); - $self->{nestingDepth}--; - my $node; - if ($symbol->{invisible}) { - $node = $self->_createMmlNode('mrow', $result[0]); - } - else { - $node = $self->_createMmlNode - ('mo', $self->_createTextNode($symbol->{output})); - $node = $self->_createMmlNode('mrow', $node); - $node->appendChild($result[0]); - } - return $node, $result[1]; - } - if ($ttype eq 'TEXT') { - $str = _removeCharsAndBlanks($str, length $input) unless $input eq '"'; - my $st; - ($input, $st) = ($1, $2) - if $str =~ /^(\"()\")/ || $str =~ /^(\"((?:\\\\|\\\"|.)+?)\")/; - ($input, $st) = ($1, $2) - if ($str =~ /^(\((.*?)\))/ || - $str =~ /^(\[(.*?)\])/ || - $str =~ /^(\{(.*?)\})/); - ($input, $st) = ($str) x 2 unless defined $st; - if (substr($st, 0, 1) eq ' ') { - my $node = $self->_createElementMathML('mspace'); - $node->setAttribute(width=>'1ex'); - $newFrag->appendChild($node); - } - $newFrag->appendChild - ($self->_createMmlNode($symbol->{tag}, - $self->_createTextNode($st))); - if (substr($st, -1) eq ' ') { - my $node = $self->_createElementMathML('mspace'); - $node->setAttribute(width=>'1ex'); - $newFrag->appendChild($node); - } - $str = _removeCharsAndBlanks($str, length $input); - return $self->_createMmlNode('mrow', $newFrag), $str; - } - if ($ttype eq 'UNARY') { - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseSexpr($str); - return ($self->_createMmlNode - ($symbol->{tag}, - $self->_createTextNode($symbol->{output})), $str) - if ! defined $result[0]; - if ($symbol->{func}) { - return ($self->_createMmlNode - ($symbol->{tag}, - $self->_createTextNode($symbol->{output})), $str) - if $str =~ m!^[\^_/|]!; - my $node = $self->_createMmlNode - ('mrow', $self->_createMmlNode - ($symbol->{tag}, $self->_createTextNode($symbol->{output}))); - $node->appendChild($result[0]); - return $node, $result[1]; - } - _removeBrackets($result[0]); - if ($symbol->{acc}) { # accent - my $node = $self->_createMmlNode($symbol->{tag}, $result[0]); - $node->appendChild - ($self->_createMmlNode - ('mo', $self->_createTextNode($symbol->{output}))); - return $node, $result[1]; - } - if ($symbol->{atname}) { # font change command - if ($self->{attr}{ForMoz} && $symbol->{codes}) { - my @childNodes = $result[0]->childNodes; - my $nodeName = $result[0]->nodeName; - for (my $i=0; $i<@childNodes; $i++) { - if ($childNodes[$i]->nodeName eq 'mi'||$nodeName eq 'mi') { - my $st = $nodeName eq 'mi' ? - $result[0] ->firstChild->nodeValue : - $childNodes[$i]->firstChild->nodeValue; - $st =~ s/([A-Z])/sprintf "&#x%X;",$symbol->{codes}[ord($1)-65]/ge; - if ($nodeName eq 'mi') { - $result[0] = $self->_createTextNode($st); - } - else { - $result[0]->replaceChild - ($self->_createTextNode($st), $childNodes[$i]); - } - } - } - } - my $node = $self->_createMmlNode($symbol->{tag}, $result[0]); - $node->setAttribute($symbol->{atname}=>$symbol->{atval}); - return $node, $result[1]; - } - return $self->_createMmlNode($symbol->{tag}, $result[0]), $result[1]; - } - if ($ttype eq 'BINARY') { - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseSexpr($str); - return ($self->_createMmlNode - ('mo', $self->_createTextNode($input)), $str) - if ! defined $result[0]; - _removeBrackets($result[0]); - my @result2 = $self->_parseSexpr($result[1]); - return ($self->_createMmlNode - ('mo', $self->_createTextNode($input)), $str) - if ! defined $result2[0]; - _removeBrackets($result2[0]); - if ($input =~ /new(command|symbol)/) { - my $what = $1; - # Look for text in both arguments - my $text1 = $result[0]; - my $haveTextArgs = 0; - $text1 = $text1->firstChild while $text1->nodeName eq 'mrow'; - if ($text1->nodeName eq 'mtext') { - my $text2 = $result2[0]; - $text2 = $text2->firstChild while $text2->nodeName eq 'mrow'; - my $latex; - if ($result2[0]->childNodes > 1 && $input eq 'newsymbol') { - # Process the latex string for a newsymbol - my $latexdef = $result2[0]->child(1); - $latexdef = $latexdef->firstChild - while $latexdef->nodeName eq 'mrow'; - $latex = $latexdef->firstChild->nodeValue; - } - if ($text2->nodeName eq 'mtext') { - $self->{Definitions}{$text1->firstChild->nodeValue} = { - tag =>'mo', - output=>$text2->firstChild->nodeValue, - ttype =>$what eq 'symbol' ? 'CONST' : 'DEFINITION', - }; - $self->{Definition_RE} = join '|', - map("\Q$_\E", sort {length($b) - length($a)} - keys %{$self->{Definitions}}); - $self->{Latex}{$text2->firstChild->nodeValue} = $latex - if defined $latex; - $haveTextArgs = 1; - } - } - if (! $haveTextArgs) { - $newFrag->appendChild($self->_createMmlNode - ('mo', $self->_createTextNode($input)), - $result[0], $result2[0]); - return $self->_createMmlNode('mrow', $newFrag), $result2[1]; - } - return undef, $result2[1]; - } - if ($input =~ /root|stackrel/) { - $newFrag->appendChild($result2[0]); - } - $newFrag->appendChild($result[0]); - if ($input eq 'frac') { - $newFrag->appendChild($result2[0]); - } - return $self->_createMmlNode($symbol->{tag}, $newFrag), $result2[1]; - } - if ($ttype eq 'INFIX') { - $str = _removeCharsAndBlanks($str, length $input); - return $self->_createMmlNode - ('mo', $self->_createTextNode($symbol->{output})), $str; - } - if ($ttype eq 'SPACE') { - $str = _removeCharsAndBlanks($str, length $input); - my $node = $self->_createElementMathML('mspace'); - $node->setAttribute('width', '1ex'); - $newFrag->appendChild($node); - $newFrag->appendChild - ($self->_createMmlNode($symbol->{tag}, - $self->_createTextNode($symbol->{output}))); - $node = $self->_createElementMathML('mspace'); - $node->setAttribute('width', '1ex'); - $newFrag->appendChild($node); - return $self->_createMmlNode('mrow', $newFrag), $str; - } - if ($ttype eq 'LEFTRIGHT') { - $self->{nestingDepth}++; - $str = _removeCharsAndBlanks($str, length $input); - my @result = $self->_parseExpr($str, 0); - $self->{nestingDepth}--; - my $st = $result[0]->lastChild ? - $result[0]->lastChild->firstChild->nodeValue : ''; - my $node = $self->_createMmlNode - ('mo',$self->_createTextNode($symbol->{output})); - $node = $self->_createMmlNode('mrow', $node); - if ($st eq '|') { # it's an absolute value subterm - $node->appendChild($result[0]); - return $node, $result[1]; - } - # the "|" is a \mid - return $node, $str; - } - if ($ttype eq 'NOP') { - $str = _removeCharsAndBlanks($str, length $input); - return $self->_parseSexpr($str); - } - $str = _removeCharsAndBlanks($str, length $input); - return $self->_createMmlNode - ($symbol->{tag}, # it's a constant - $self->_createTextNode($symbol->{output})), $str; -} - -# Removes brackets at the beginning or end of an mrow node -# Arguments: node object -# Returns: None -# Side-effects: may change children of node object -sub _removeBrackets { - my ($node) = @_; - if ($node->nodeName eq 'mrow') { - my $st = $node->firstChild->firstChild->nodeValue; - $node->removeChild($node->firstChild) if $st =~ /^[\(\[\{]$/; - $st = $node->lastChild->firstChild->nodeValue; - $node->removeChild($node->lastChild) if $st =~ /^[\)\]\}]$/; - } -} - -# Removes the first n characters and any following blanks -# Arguments: string, n -# Returns: resultant string -sub _removeCharsAndBlanks { - my ($str, $n) = @_; - my $st = substr($str, - substr($str, $n) =~ /^\\[^\\ ,!]/ ? $n+1 : $n); - $st =~ s/^[\x00-\x20]+//; - return $st; -} - -# Removes outermost parenthesis -# Arguments: string -# Returns: string with parentheses removed -sub _unparen { - my ($s) = @_; - $s =~ s!^()[\(\[\{]!$1!; - $s =~ s![\)\]\}]()$!$1!; - $s; -} - -BEGIN { -my %Conversion = ('<'=>'lt', '>'=>'gt', '"'=>'quot', '&'=>'amp'); - -# Encodes special xml characters -# Arguments: string -# Returns: encoded string -sub _xml_encode { - my ($s) = @_; - $s =~ s/([<>\"&])/&$Conversion{$1};/g; - $s; -} -} - -package Text::ASCIIMathML::Node; - -{ - # Create a closure for the following attributes - my %parser_of; - -# Creates a new Text::ASCIIMathML::Node object -# Arguments: Text::ASCIIMathML object, optional tag -# Returns: new object -sub new { - my ($class, $parser, $tag) = @_; - my $obj = bless { children=>[] }, $class; - if (defined $tag) { $obj->{tag} = $tag } - else { $obj->{frag} = 1 } - $parser_of{$obj} = $parser; - return $obj; -} - -# Creates a new Text::ASCIIMathML::Node text object -# Arguments: Text::ASCIIMathML object, text -# Returns: new object -sub newText { - my ($class, $parser, $text) = @_; - $text =~ s/^\s*(.*?)\s*$/$1/; # Delete leading/trailing spaces - my $obj = bless { text=>$text }, $class; - $parser_of{$obj} = $parser; - return $obj; -} - -my %Parent; -my $Null; -BEGIN { - $Null = new Text::ASCIIMathML::Node; -} - -# Appends one or more node objects to the children of an object -# Arguments: list of objects to append -# Returns: self -sub appendChild : method { - my $self = shift; - my @new = map $_->{frag} ? @{$_->{children}} : $_, @_; - push @{$self->{children}}, @new; - map do {$Parent{$_} = $self}, @new; - return $self; -} - -# Returns a the value for an attribute of a node object -# Arguments: Attribute name -# Returns: Value for the attribute -sub attribute { - my ($self, $attr) = @_; - return $self->{attr}{$attr}; -} - -# Returns a list of the attributes of a node object -# Arguments: None -# Returns: Array of attribute names -sub attributeList { - my ($self) = @_; - return $self->{attrlist} ? @{$self->{attrlist}} : (); -} - -# Returns a child with a given index in the array of children of a node -# Arguments: index -# Returns: Array of node objects -sub child { - my ($self, $index) = @_; - return $self->{children} && @{$self->{children}} > $index ? - $self->{children}[$index] : $Null; -} - -# Returns an array of children of a node -# Arguments: None -# Returns: Array of node objects -sub childNodes { - my ($self) = @_; - return $self->{children} ? @{$self->{children}} : (); -} - -# Returns the first child of a node; ignores any fragments -# Arguments: None -# Returns: node object or self -sub firstChild { - my ($self) = @_; - return $self->{children} && @{$self->{children}} ? - $self->{children}[0] : $Null; -} - -# Returns true if the object is a fragment -# Arguments: None -# Returns: Boolean -sub isFragment { - return $_[0]->{frag}; -} - -# Returns true if the object is a named node -# Arguments: None -# Returns: Boolean -sub isNamed { - return $_[0]->{tag}; -} - -# Returns true if the object is a text node -# Arguments: None -# Returns: Boolean -sub isText { - return defined $_[0]->{text}; -} - -# Returns the last child of a node -# Arguments: None -# Returns: node object or self -sub lastChild { - my ($self) = @_; - return $self->{children} && @{$self->{children}} ? - $self->{children}[-1] : $Null; -} - -BEGIN { -# Creates closure for following "static" variables -my (%LatexSym, %LatexMover, %LatexFont, %LatexOp); - -# Returns a latex representation of a node object -# Arguments: None -# Returns: Text string -sub latex : method { - my ($self) = @_; - - my $parser = $parser_of{$self}; - if (! %LatexSym) { - # Build the entity to latex symbol translator - my $amsymbol = Text::ASCIIMathML::_get_amsymbol_(); - foreach my $sym (keys %$amsymbol) { - next unless (defined $amsymbol->{$sym}{output} && - $amsymbol->{$sym}{output} =~ /&\#x.*;/); - my ($output, $tex) = map $amsymbol->{$sym}{$_}, qw(output tex); - next if defined $LatexSym{$output} && ! $amsymbol->{$sym}{latex}; - $tex = $sym if $tex eq ''; - $LatexSym{$output} = "\\$tex"; - } - my %math_font = (bbb => 'mathds', - mathbb => 'mathds', - cc => 'cal', - mathcal => 'cal', - fr => 'mathfrak', - mathfrak => 'mathfrak', - ); - # Add character codes - foreach my $coded (grep $amsymbol->{$_}{codes}, keys %$amsymbol) { - @LatexSym{map(sprintf("&#x%X;", $_), - @{$amsymbol->{$coded}{codes}})} = - map("\\$math_font{$coded}\{$_}", ('A' .. 'Z')); - } - # Post-process protected symbols - $LatexSym{$_} =~ s/^\\\\/\\/ foreach keys %LatexSym; - %LatexMover = ('^' => '\hat', - '\overline' => '\overline', - '\to' => '\vec', - '\vec' => '\vec', - '\rightarrow' => '\vec', - '.' => '\dot', - '..' => '\ddot', - ); - %LatexFont = (bold => '\bf', - 'double-struck' => '\mathds', - fraktur => '\mathfrak', - monospace => '\tt', - 'sans-serif' => '\sf', - script => '\cal', - ); - %LatexOp = (if => '\mbox{if }', - lcm => '\mbox{lcm}', - newcommand => '\mbox{newcommand}', - "\\" => '\backslash', - '<' => '<', - '>' => '>', - '&' => '\&', - '...' => '\ldots', - ); - } - if (defined $self->{text}) { - my $text = $self->{text}; - $text =~ s/([{}])/\\$1/; - $text =~ s/(&\#x.*?;)/ - defined $parser->{Latex}{$1} ? $parser->{Latex}{$1} : - defined $LatexSym{$1} ? $LatexSym{$1} : $1/eg; - $text =~ s/([\#])/\\$1/; - return $text; - } - my $tag = $self->{tag}; - my @child_str; - my $child_str = ''; - if (@{$self->{children}}) { - foreach (@{$self->{children}}) { - push @child_str, $_->latex($parser); - } - } - -# mo - if ($tag eq 'mo') { - # Need to distinguish bmod from pmod - my $parent = $self->parent; - return $self eq $parent->child(1) && - $parent->firstChild->firstChild->{text} eq '(' - ? '\pmod' : '\bmod' - if $child_str[0] eq 'mod'; - return $LatexOp{$child_str[0]} if $LatexOp{$child_str[0]}; - return $child_str[0] =~ /^\w+$/ ? "\\$child_str[0]" : $child_str[0]; - } - -# mrow - if ($tag eq 'mrow') { - @child_str = grep $_ ne '', @child_str; - # Check for pmod function - if (@child_str > 1 && $child_str[1] eq '\pmod') { - pop @child_str if $child_str[-1] eq ')'; - splice @child_str, 0, 2; - return "\\pmod{@child_str}"; - } - # Check if we need \left ... \right - my $is_tall = grep(/[_^]|\\(begin\{array\}|frac|sqrt|stackrel)/, - @child_str); - if ($is_tall && @child_str > 1 && - ($child_str[0] =~ /^([\(\[|]|\\\{)$/ || - $child_str[-1] =~ /^([\)\]|]|\\\})$/)) { - if ($child_str[0] =~ /^([\(\[|]|\\\{)$/) { - $child_str[0] = "\\left$child_str[0]"; - } - else { - unshift @child_str, "\\left."; - } - if ($child_str[-1] =~ /^([\)\]|]|\\\})$/) { - $child_str[-1] = "\\right$child_str[-1]"; - } - else { - push @child_str, "\\right."; - } - } - return "@child_str"; - } - - -# mi -# mn -# math -# mtd - if ($tag =~ /^m([in]|ath|row|td)$/) { - @child_str = grep $_ ne '', @child_str; - return "@child_str"; - } - -# msub -# msup -# msubsup -# munderover - if ($tag =~ /^(msu[bp](sup)?|munderover)$/) { - my $base = shift @child_str; - $base = '\mbox{}' if $base eq ''; - # Put {} around arguments with more than one character - @child_str = map length($_) > 1 ? "{$_}" : $_, @child_str; - return ($tag eq 'msub' ? "${base}_$child_str[0]" : - $tag eq 'msup' ? "${base}^$child_str[0]" : - "${base}_$child_str[0]^$child_str[1]"); - } - -# mover - if ($tag eq 'mover') { - # Need to special-case math mode accents - return - ($child_str[1] eq '\overline' && length($child_str[0]) == 1 ? - "\\bar{$child_str[0]}" : - $LatexMover{$child_str[1]} ? - "$LatexMover{$child_str[1]}\{$child_str[0]\}" : - "\\stackrel{$child_str[1]}{$child_str[0]}"); - } - -# munder - if ($tag eq 'munder') { - return $child_str[1] eq '\underline' ? "$child_str[1]\{$child_str[0]}" - : "$child_str[0]_\{$child_str[1]\}"; - } - -# mfrac - if ($tag eq 'mfrac') { - return "\\frac{$child_str[0]}{$child_str[1]}"; - } - -# msqrt - if ($tag eq 'msqrt') { - return "\\sqrt{$child_str[0]}"; - } - -# mroot - if ($tag eq 'mroot') { - return "\\sqrt[$child_str[1]]{$child_str[0]}"; - } - -# mtext - if ($tag eq 'mtext') { - my $text = $child_str[0]; - my $next = $self->nextSibling; - my $prev = $self->previousSibling; - if (defined $next->{tag} && $next->{tag} eq 'mspace') { - $text = "$text "; - } - if (defined $prev->{tag} && $prev->{tag} eq 'mspace') { - $text = " $text"; - } - $text = ' ' if $text eq ' '; - return "\\mbox{$text}"; - } - - -# mspace - if ($tag eq 'mspace') { - return ''; - } - -# mtable - if ($tag eq 'mtable') { - my $cols = ($child_str[0] =~ tr/&//) + 1; - my $colspec = ($self->{attr}{columnalign} || '') eq 'left' ? 'l' : 'c'; - my $colspecs = $colspec x $cols; - return ("\\begin{array}{$colspecs}\n" . - join('', map(" $_ \\\\\n", @child_str)) . - "\\end{array}\n"); - } - -# mtr - if ($tag eq 'mtr') { - return join ' & ', @child_str; - } - -# mstyle - if ($tag eq 'mstyle') { - @child_str = grep $_ ne '', @child_str; - if ($self->parent->{tag} eq 'math') { - push @child_str, ' ' unless @child_str; - # The top-level mstyle - return (defined $self->{attr}{displaystyle} && - $self->{attr}{displaystyle} eq 'true') ? - "\$\$@child_str\$\$" : "\$@child_str\$"; - } - else { - # It better be a font changing command - return $child_str[0] if $self->{attr}{mathvariant}; - my ($attr) = map($self->{attr}{$_}, - grep $self->{attr}{$_}, - qw(fontweight fontfamily)); - return $attr && $LatexFont{$attr} ? - "$LatexFont{$attr}\{$child_str[0]}" : $child_str[0]; - } - } -} -} - -# Returns the next sibling of a node -# Arguments: None -# Returns: node object or undef -sub nextSibling { - my ($self) = @_; - my $parent = $self->parent; - for (my $i=0; $i<@{$parent->{children}}; $i++) { - return $parent->{children}[$i+1] if $self eq $parent->{children}[$i]; - } - return $Null; -} - -# Returns the tag of a node -# Arguments: None -# Returns: string -sub nodeName : method { - return $_[0]{tag} || ''; -} - -# Returns the text of a text node -# Arguments: None -# Returns: string -sub nodeValue : method { - return $_[0]{text} || ''; -} - -# Returns the parent of a node -# Arguments: none -# Returns: parent node object or undef -sub parent : method { - return $Parent{$_[0]} || $Null; -} - -# Returns the previous sibling of a node -# Arguments: None -# Returns: node object or undef -sub previousSibling { - my ($self) = @_; - my $parent = $self->parent; - for (my $i=1; $i<@{$parent->{children}}; $i++) { - return $parent->{children}[$i-1] if $self eq $parent->{children}[$i]; - } - return $Null; -} - -# Removes a given child node from a node -# Arguments: child node -# Returns: None -# Side-effects: May affect children of the node -sub removeChild : method { - my ($self, $child) = @_; - @{$self->{children}} = grep $_ ne $child, @{$self->{children}} - if $self->{children}; - delete $Parent{$child}; -} - -# Replaces one child node object with another -# Arguments: old child node object, new child node object -# Returns: None -sub replaceChild : method { - my ($self, $new, $old) = @_; - @{$self->{children}} = map $_ eq $old ? $new : $_, @{$self->{children}}; - delete $Parent{$old}; - $Parent{$new} = $self; -} - -# Sets one or more attributes on a node object -# Arguments: set of attribute/value pairs -# Returns: None -sub setAttribute : method { - my $self = shift; - if (@_) { - $self->{attr} = {} unless $self->{attr}; - $self->{attrlist} = [] unless $self->{attrlist}; - } - while (my($aname, $aval) = splice(@_, 0, 2)) { - $aval =~ s/\n//g; - push @{$self->{attrlist}}, $aname unless defined $self->{attr}{$aname}; - $self->{attr}{$aname} = $aval; - } -} - -# Returns the ASCII representation of a node object -# Arguments: None -# Returns: Text string -sub text : method { - my ($self) = @_; - return $self->{text} if defined $self->{text}; - my $tag = $self->{tag}; - my $attr = join '', map(" $_=\"" . - ($_ eq 'xmlns' ? $self->{attr}{$_} : - Text::ASCIIMathML::_xml_encode($self->{attr}{$_})) . - "\"", @{$self->{attrlist}}) - if $tag; - if (@{$self->{children}}) { - my $child_str; - foreach (@{$self->{children}}) { - $child_str .= $_->text; - } - return $tag ? "<$tag$attr>$child_str" : $child_str; - } - return $tag ? "<$tag$attr/>" : ''; -} -} - -1; diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown.pl deleted file mode 100755 index 9c9f5b15..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown.pl +++ /dev/null @@ -1,2728 +0,0 @@ -#!/usr/bin/env perl - -# MultiMarkdown -- A modification of John Gruber's original Markdown -# that adds new features and an output format that can more readily -# be converted into other document formats -# -# $Id: MultiMarkdown.pl 525 2009-06-15 18:45:44Z fletcher $ -# -# Original Code Copyright (c) 2004-2007 John Gruber -# -# -# MultiMarkdown changes Copyright (c) 2005-2009 Fletcher T. Penney -# -# -# MultiMarkdown Version 2.0.b6 -# -# Based on Markdown.pl 1.0.2b8 - Wed 09 May 2007 -# -# -# TODO: Change math mode delimiter? -# TODO: Still need to get the glossary working in non-memoir documents -# TODO: A mechanism to include arbitrary code (LaTeX, etc) without being "ugly" -# TODO: Look into discussion re: assigning classes to div's/span's on Markdown list. -# TODO: Improve support for tables with long items and overall width in LaTeX -# TODO: Need a syntax for long table cells in MMD, even if no rowspan feature yet -# TODO: Create utilities to convert MMD tables to/from tab-delimited - - -package MultiMarkdown; -require 5.006_000; -use strict; -use warnings; - -use File::Basename; - -eval {require MT}; # Test to see if we're running in MT. -unless ($@) { - require Text::ASCIIMathML; -} else { # Otherwise look for ASCIIMathML.pm next to MultiMarkdown.pl - my $me = $0; # Where am I? - - # Am I running in Windoze? - my $os = $^O; - - # Get just the directory portion - if ($os =~ /MSWin/) { - $me = dirname($me) . "\\"; - } else { - $me = dirname($me) . "/"; - } - require $me ."ASCIIMathML.pm"; -} - - -use Digest::MD5 qw(md5_hex); -use vars qw($VERSION $g_use_metadata $g_base_url - $g_bibliography_title $g_allow_mathml $g_base_header_level $mathParser); -$VERSION = '2.0.b6'; - -$mathParser = new Text::ASCIIMathML(); - -## Disabled; causes problems under Perl 5.6.1: -# use utf8; -# binmode( STDOUT, ":utf8" ); # c.f.: http://acis.openlib.org/dev/perl-unicode-struggle.html - -# -# Global default settings: -# -my $g_empty_element_suffix = " />"; # Change to ">" for HTML output -my $g_tab_width = 4; -my $g_allow_mathml = 1; -my $g_base_header_level = 1; - -# -# Globals: -# - -# Reusable patterns to match balanced [brackets] and (parens). See -# Friedl's "Mastering Regular Expressions", 2nd Ed., pp. 328-331. -my ($g_nested_brackets, $g_nested_parens); -$g_nested_brackets = qr{ - (?> # Atomic matching - [^\[\]]+ # Anything other than brackets - | - \[ - (??{ $g_nested_brackets }) # Recursive set of nested brackets - \] - )* -}x; - -# Doesn't allow for whitespace, because we're using it to match URLs: -$g_nested_parens = qr{ - (?> # Atomic matching - [^()\s]+ # Anything other than parens or whitespace - | - \( - (??{ $g_nested_parens }) # Recursive set of nested brackets - \) - )* -}x; - - -# Table of hash values for escaped characters: -my %g_escape_table; -foreach my $char (split //, '\\`*_{}[]()>#+-.!') { - $g_escape_table{$char} = md5_hex($char); -} - - -# Global hashes, used by various utility routines -my %g_urls = (); -my %g_titles= (); -my %g_html_blocks = (); -my %g_metadata = (); -my %g_metadata_newline = (); -my %g_crossrefs = (); -my %g_footnotes = (); -my %g_attributes = (); -my @g_used_footnotes = (); -my $g_footnote_counter = 0; - -my $g_citation_counter = 0; -my @g_used_references = (); -my %g_references = (); -$g_bibliography_title = "Bibliography"; - -$g_use_metadata = 1; -$g_metadata_newline{default} = "\n"; -$g_metadata_newline{keywords} = ", "; -my $g_document_format = ""; - -# Used to track when we're inside an ordered or unordered list -# (see _ProcessListItems() for details): -my $g_list_level = 0; - - -#### Blosxom plug-in interface ########################################## - -# Set $g_blosxom_use_meta to 1 to use Blosxom's meta plug-in to determine -# which posts Markdown should process, using a "meta-markup: markdown" -# header. If it's set to 0 (the default), Markdown will process all -# entries. -my $g_blosxom_use_meta = 0; - -sub start { 1; } -sub story { - my($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_; - - if ( (! $g_blosxom_use_meta) or - (defined($meta::markup) and ($meta::markup =~ /^\s*markdown\s*$/i)) - ){ - $$body_ref = Markdown($$body_ref); - } - 1; -} - - -#### Movable Type plug-in interface ##################################### -eval {require MT}; # Test to see if we're running in MT. -unless ($@) { - require MT; - import MT; - require MT::Template::Context; - import MT::Template::Context; - - eval {require MT::Plugin}; # Test to see if we're running >= MT 3.0. - unless ($@) { - require MT::Plugin; - import MT::Plugin; - my $plugin = new MT::Plugin({ - name => "MultiMarkdown", - description => "Based on the original Markdown", - doc_link => 'http://fletcherpenney.net/MultiMarkdown/' - }); - MT->add_plugin( $plugin ); - } - - MT::Template::Context->add_container_tag(MultiMarkdownOptions => sub { - my $ctx = shift; - my $args = shift; - my $builder = $ctx->stash('builder'); - my $tokens = $ctx->stash('tokens'); - - if (defined ($args->{'output'}) ) { - $ctx->stash('multimarkdown_output', lc $args->{'output'}); - } - - defined (my $str = $builder->build($ctx, $tokens) ) - or return $ctx->error($builder->errstr); - $str; # return value - }); - - MT->add_text_filter('multimarkdown' => { - label => 'MultiMarkdown', - docs => 'http://fletcherpenney.net/MultiMarkdown/', - on_format => sub { - my $text = shift; - my $ctx = shift; - my $raw = 0; - if (defined $ctx) { - my $output = $ctx->stash('multimarkdown_output'); - if (defined $output && $output =~ m/^html/i) { - $g_empty_element_suffix = ">"; - $ctx->stash('multimarkdown_output', ''); - } - elsif (defined $output && $output eq 'raw') { - $raw = 1; - $ctx->stash('multimarkdown_output', ''); - } - else { - $raw = 0; - $g_empty_element_suffix = " />"; - } - } - $text = $raw ? $text : Markdown($text); - $text; - }, - }); - - # If SmartyPants is loaded, add a combo Markdown/SmartyPants text filter: - my $smartypants; - - { - no warnings "once"; - $smartypants = $MT::Template::Context::Global_filters{'smarty_pants'}; - } - - if ($smartypants) { - MT->add_text_filter('multimarkdown_with_smartypants' => { - label => 'MultiMarkdown With SmartyPants', - docs => 'http://fletcherpenney.net/MultiMarkdown/', - on_format => sub { - my $text = shift; - my $ctx = shift; - if (defined $ctx) { - my $output = $ctx->stash('multimarkdown_output'); - if (defined $output && $output eq 'html') { - $g_empty_element_suffix = ">"; - } - else { - $g_empty_element_suffix = " />"; - } - } - $text = Markdown($text); - $text = $smartypants->($text, '1'); - }, - }); - } -} -else { -#### BBEdit/command-line text filter interface ########################## -# Needs to be hidden from MT (and Blosxom when running in static mode). - - # We're only using $blosxom::version once; tell Perl not to warn us: - no warnings 'once'; - unless ( defined($blosxom::version) ) { - use warnings; - - #### Check for command-line switches: ################# - my %cli_opts; - use Getopt::Long; - Getopt::Long::Configure('pass_through'); - GetOptions(\%cli_opts, - 'version', - 'shortversion', - 'html4tags', - ); - if ($cli_opts{'version'}) { # Version info - print "\nThis is MultiMarkdown, version $VERSION.\n"; - print "Original code Copyright 2004 John Gruber\n"; - print "MultiMarkdown changes Copyright 2005-2009 Fletcher Penney\n"; - print "http://fletcherpenney.net/multimarkdown/\n"; - print "http://daringfireball.net/projects/markdown/\n\n"; - exit 0; - } - if ($cli_opts{'shortversion'}) { # Just the version number string. - print $VERSION; - exit 0; - } - if ($cli_opts{'html4tags'}) { # Use HTML tag style instead of XHTML - $g_empty_element_suffix = ">"; - } - - - #### Process incoming text: ########################### - my $text; - { - local $/; # Slurp the whole file - $text = <>; - } - print Markdown($text); - } -} - - - -sub Markdown { -# -# Main function. The order in which other subs are called here is -# essential. Link and image substitutions need to happen before -# _EscapeSpecialCharsWithinTagAttributes(), so that any *'s or _'s in the -# and tags get encoded. -# - my $text = shift; - - # Clear the global hashes. If we don't clear these, you get conflicts - # from other articles when generating a page which contains more than - # one article (e.g. an index page that shows the N most recent - # articles): - %g_urls = (); - %g_titles = (); - %g_html_blocks = (); - %g_metadata = (); - %g_crossrefs = (); - %g_footnotes = (); - @g_used_footnotes = (); - $g_footnote_counter = 0; - @g_used_references = (); - %g_references = (); - $g_citation_counter = 0; - %g_attributes = (); - - - # Standardize line endings: - $text =~ s{\r\n}{\n}g; # DOS to Unix - $text =~ s{\r}{\n}g; # Mac to Unix - - # Make sure $text ends with a couple of newlines: - $text .= "\n\n"; - - # Convert all tabs to spaces. - $text = _Detab($text); - - # Strip any lines consisting only of spaces and tabs. - # This makes subsequent regexen easier to write, because we can - # match consecutive blank lines with /\n+/ instead of something - # contorted like /[ \t]*\n+/ . - $text =~ s/^[ \t]+$//mg; - - # Strip out MetaData - $text = _ParseMetaData($text) if $g_use_metadata; - - # And recheck for leading blank lines - $text =~ s/^\n+//s; - - # Turn block-level HTML blocks into hash entries - $text = _HashHTMLBlocks($text); - - # Strip footnote and link definitions, store in hashes. - $text = _StripFootnoteDefinitions($text); - - $text = _StripLinkDefinitions($text); - - _GenerateImageCrossRefs($text); - - $text = _StripMarkdownReferences($text); - - $text = _RunBlockGamut($text); - - $text = _DoMarkdownCitations($text); - - $text = _DoFootnotes($text); - - $text = _UnescapeSpecialChars($text); - - # Clean encoding within HTML comments - $text = _UnescapeComments($text); - - $text = _FixFootnoteParagraphs($text); - $text .= _PrintFootnotes(); - - $text .= _PrintMarkdownBibliography(); - - $text = _ConvertCopyright($text); - - if (lc($g_document_format) =~ /^complete\s*$/i) { - return xhtmlMetaData() . "\n\n" . $text . "\n\n"; - } elsif (lc($g_document_format) =~ /^snippet\s*$/i) { - return $text . "\n"; - } else { - return $g_document_format . textMetaData() . $text . "\n"; - } - -} - - -sub _StripLinkDefinitions { -# -# Strips link definitions from text, stores the URLs and titles in -# hash references. -# - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Link defs are in the form: ^[id]: url "optional title" - while ($text =~ s{ - # Pattern altered for MultiMarkdown - # in order to not match citations or footnotes - ^[ ]{0,$less_than_tab}\[([^#^].*)\]: # id = $1 - [ \t]* - \n? # maybe *one* newline - [ \t]* - ? # url = $2 - [ \t]* - \n? # maybe one newline - [ \t]* - (?: - (?<=\s) # lookbehind for whitespace - ["(] - (.+?) # title = $3 - [")] - [ \t]* - )? # title is optional - - # MultiMarkdown addition for attribute support - \n? - ( # Attributes = $4 - (?<=\s) # lookbehind for whitespace - (([ \t]*\n)?[ \t]*((\S+=\S+)|(\S+=".*?")))* - )? - [ \t]* - # /addition - (?:\n+|\Z) - } - {}mx) { - $g_urls{lc $1} = _EncodeAmpsAndAngles( $2 ); # Link IDs are case-insensitive - if ($3) { - $g_titles{lc $1} = $3; - $g_titles{lc $1} =~ s/"/"/g; - } - - # MultiMarkdown addition " - if ($4) { - $g_attributes{lc $1} = $4; - } - # /addition - } - - return $text; -} - -sub _StripHTML { - # Strip (X)HTML code from string - my $text = shift; - - $text =~ s/<.*?>//g; - - return $text; -} - -sub _HashHTMLBlocks { - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Hashify HTML blocks: - # We only want to do this for block-level HTML tags, such as headers, - # lists, and tables. That's because we still want to wrap

    s around - # "paragraphs" that are wrapped in non-block-level tags, such as anchors, - # phrase emphasis, and spans. The list of tags we're looking for is - # hard-coded: - my $block_tags = qr{ - (?: - p | div | h[1-6] | blockquote | pre | table | - dl | ol | ul | script | noscript | form | - fieldset | iframe | ins | del - ) - }x; # MultiMarkdown does not include `math` in the above list so that - # Equations can optionally be included in separate paragraphs - - my $tag_attrs = qr{ - (?: # Match one attr name/value pair - \s+ # There needs to be at least some whitespace - # before each attribute name. - [\w.:_-]+ # Attribute name - \s*=\s* - (?: - ".+?" # "Attribute value" - | - '.+?' # 'Attribute value' - ) - )* # Zero or more - }x; - - my $empty_tag = qr{< \w+ $tag_attrs \s* />}xms; - my $open_tag = qr{< $block_tags $tag_attrs \s* >}xms; - my $close_tag = undef; # let Text::Balanced handle this - - use Text::Balanced qw(gen_extract_tagged); - my $extract_block = gen_extract_tagged($open_tag, $close_tag, undef, { ignore => [$empty_tag] }); - - my @chunks; - ## TO-DO: the 0,3 on the next line ought to respect the - ## tabwidth, or else, we should mandate 4-space tabwidth and - ## be done with it: - while ($text =~ s{^(([ ]{0,3}<)?.*\n)}{}m) { - my $cur_line = $1; - if (defined $2) { - # current line could be start of code block - - my ($tag, $remainder) = $extract_block->($cur_line . $text); - if ($tag) { - my $key = md5_hex($tag); - $g_html_blocks{$key} = $tag; - push @chunks, "\n\n" . $key . "\n\n"; - $text = $remainder; - } - else { - # No tag match, so toss $cur_line into @chunks - push @chunks, $cur_line; - } - } - else { - # current line could NOT be start of code block - push @chunks, $cur_line; - } - - } - push @chunks, $text; # Whatever is left. - - $text = join '', @chunks; - - - - # Special case just for


    . It was easier to make a special case than - # to make the other regex more complicated. - $text =~ s{ - (?: - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - [ ]{0,$less_than_tab} - <(hr) # start tag = $2 - \b # word break - ([^<>])*? # - /?> # the matching end tag - [ \t]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egx; - - # Special case for standalone HTML comments: - $text =~ s{ - (?: - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - [ ]{0,$less_than_tab} - (?s: - - ) - [ \t]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egx; - - # PHP and ASP-style processor instructions ( and <%…%>) - $text =~ s{ - (?: - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - [ ]{0,$less_than_tab} - (?s: - <([?%]) # $2 - .*? - \2> - ) - [ \t]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egx; - - - return $text; -} - - -sub _RunBlockGamut { -# -# These are all the transformations that form block-level -# tags like paragraphs, headers, and list items. -# - my $text = shift; - - $text = _DoHeaders($text); - - # Do tables first to populate the table id's for cross-refs - # Escape
     so we don't get greedy with tables
    -	$text = _DoTables($text);
    -	
    -	# And now, protect our tables
    -	$text = _HashHTMLBlocks($text);
    -
    -	# Do Horizontal Rules:
    -	$text =~ s{^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$}{\n tags around block-level tags.
    -	$text = _HashHTMLBlocks($text);
    -	$text = _FormParagraphs($text);
    -
    -	return $text;
    -}
    -
    -
    -sub _RunSpanGamut {
    -#
    -# These are all the transformations that occur *within* block-level
    -# tags like paragraphs, headers, and list items.
    -#
    -	my $text = shift;
    -
    -	$text = _DoCodeSpans($text);
    -	$text = _DoMathSpans($text);
    -	$text = _EscapeSpecialCharsWithinTagAttributes($text);
    -	$text = _EncodeBackslashEscapes($text);
    -
    -	# Process anchor and image tags. Images must come first,
    -	# because ![foo][f] looks like an anchor.
    -	$text = _DoImages($text);
    -	$text = _DoAnchors($text);	
    -
    -	# Make links out of things like ``
    -	# Must come after _DoAnchors(), because you can use < and >
    -	# delimiters in inline links like [this]().
    -	$text = _DoAutoLinks($text);
    -	$text = _EncodeAmpsAndAngles($text);
    -	$text = _DoItalicsAndBold($text);
    -
    -	# Do hard breaks:
    -	$text =~ s/ {2,}\n/  -- encode [\ ` * _] so they
    -# don't conflict with their use in Markdown for code, italics and strong.
    -# We're replacing each such character with its corresponding MD5 checksum
    -# value; this is likely overkill, but it should prevent us from colliding
    -# with the escape values by accident.
    -#
    -	my $text = shift;
    -	my $tokens ||= _TokenizeHTML($text);
    -	$text = '';   # rebuild $text from the tokens
    -
    -	foreach my $cur_token (@$tokens) {
    -		if ($cur_token->[0] eq "tag") {
    -			$cur_token->[1] =~  s! \\ !$g_escape_table{'\\'}!gx;
    -			$cur_token->[1] =~  s{ (?<=.)(?=.)  }{$g_escape_table{'`'}}gx;
    -			$cur_token->[1] =~  s! \* !$g_escape_table{'*'}!gx;
    -			$cur_token->[1] =~  s! _  !$g_escape_table{'_'}!gx;
    -		}
    -		$text .= $cur_token->[1];
    -	}
    -	return $text;
    -}
    -
    -
    -sub _DoAnchors {
    -#
    -# Turn Markdown link shortcuts into XHTML  tags.
    -#
    -	my $text = shift;
    -
    -	#
    -	# First, handle reference-style links: [link text] [id]
    -	#
    -	$text =~ s{
    -		(					# wrap whole match in $1
    -		  \[
    -		    ($g_nested_brackets)	# link text = $2
    -		  \]
    -
    -		  [ ]?				# one optional space
    -		  (?:\n[ ]*)?		# one optional newline followed by spaces
    -
    -		  \[
    -		    (.*?)		# id = $3
    -		  \]
    -		)
    -	}{
    -		my $result;
    -		my $whole_match = $1;
    -		my $link_text   = $2;
    -		my $link_id     = lc $3;
    -
    -		if ($link_id eq "") {
    -			$link_id = lc $link_text;     # for shortcut links like [this][].
    -		}
    -
    -		# Allow automatic cross-references to headers
    -		my $label = Header2Label($link_id);
    -		if (defined $g_urls{$link_id}) {
    -			my $url = $g_urls{$link_id};
    -			$url =~ s! \* !$g_escape_table{'*'}!gx;		# We've got to encode these to avoid
    -			$url =~ s!  _ !$g_escape_table{'_'}!gx;		# conflicting with italics/bold.
    -			$result = "$}{$1};					# Remove <>'s surrounding URL, if present
    -		$result = " tags.
    -#
    -	my $text = shift;
    -
    -	#
    -	# First, handle reference-style labeled images: ![alt text][id]
    -	#
    -	$text =~ s{
    -		(				# wrap whole match in $1
    -		  !\[
    -		    (.*?)		# alt text = $2
    -		  \]
    -
    -		  [ ]?				# one optional space
    -		  (?:\n[ ]*)?		# one optional newline followed by spaces
    -
    -		  \[
    -		    (.*?)		# id = $3
    -		  \]
    -
    -		)
    -	}{
    -		my $result;
    -		my $whole_match = $1;
    -		my $alt_text    = $2;
    -		my $link_id     = lc $3;
    -
    -		if ($link_id eq "") {
    -			$link_id = lc $alt_text;     # for shortcut links like ![this][].
    -		}
    -
    -		$alt_text =~ s/"/"/g;
    -		if (defined $g_urls{$link_id}) {
    -			my $url = $g_urls{$link_id};
    -			$url =~ s! \* !$g_escape_table{'*'}!gx;		# We've got to encode these to avoid
    -			$url =~ s!  _ !$g_escape_table{'_'}!gx;		# conflicting with italics/bold.
    -			
    -			my $label = Header2Label($alt_text);
    -			$g_crossrefs{$label} = "#$label";
    -			if (! defined $g_titles{$link_id}) {
    -				$g_titles{$link_id} = $alt_text;
    -			}
    -			
    -			$result = "\"$alt_text\"";$}{$1};					# Remove <>'s surrounding URL, if present
    -
    -		my $label = Header2Label($alt_text);
    -		$g_crossrefs{$label} = "#$label";
    -#		$g_titles{$label} = $alt_text;			# I think this line should not be here
    -			
    -		$result = "\"$alt_text\"";"  .  $header  .  "\n\n";
    -	}egmx;
    -
    -	$text =~ s{ ^(.+?)(?:\s*(?"  .  $header  .  "\n\n";
    -	}egmx;
    -
    -
    -	# atx-style headers:
    -	#	# Header 1
    -	#	## Header 2
    -	#	## Header 2 with closing hashes ##
    -	#	...
    -	#	###### Header 6
    -	#
    -	$text =~ s{
    -			^(\#{1,6})	# $1 = string of #'s
    -			[ \t]*
    -			(.+?)		# $2 = Header text
    -			[ \t]*
    -			(?:(?"  .  $header  .  "\n\n";
    -		}egmx;
    -
    -	return $text;
    -}
    -
    -
    -sub _DoLists {
    -#
    -# Form HTML ordered (numbered) and unordered (bulleted) lists.
    -#
    -	my $text = shift;
    -	my $less_than_tab = $g_tab_width - 1;
    -
    -	# Re-usable patterns to match list item bullets and number markers:
    -	my $marker_ul  = qr/[*+-]/;
    -	my $marker_ol  = qr/\d+[.]/;
    -	my $marker_any = qr/(?:$marker_ul|$marker_ol)/;
    -
    -	# Re-usable pattern to match any entirel ul or ol list:
    -	my $whole_list = qr{
    -		(								# $1 = whole list
    -		  (								# $2
    -			[ ]{0,$less_than_tab}
    -			(${marker_any})				# $3 = first list item marker
    -			[ \t]+
    -		  )
    -		  (?s:.+?)
    -		  (								# $4
    -			  \z
    -			|
    -			  \n{2,}
    -			  (?=\S)
    -			  (?!						# Negative lookahead for another list item marker
    -				[ \t]*
    -				${marker_any}[ \t]+
    -			  )
    -		  )
    -		)
    -	}mx;
    -
    -	# We use a different prefix before nested lists than top-level lists.
    -	# See extended comment in _ProcessListItems().
    -	#
    -	# Note: There's a bit of duplication here. My original implementation
    -	# created a scalar regex pattern as the conditional result of the test on
    -	# $g_list_level, and then only ran the $text =~ s{...}{...}egmx
    -	# substitution once, using the scalar as the pattern. This worked,
    -	# everywhere except when running under MT on my hosting account at Pair
    -	# Networks. There, this caused all rebuilds to be killed by the reaper (or
    -	# perhaps they crashed, but that seems incredibly unlikely given that the
    -	# same script on the same server ran fine *except* under MT. I've spent
    -	# more time trying to figure out why this is happening than I'd like to
    -	# admit. My only guess, backed up by the fact that this workaround works,
    -	# is that Perl optimizes the substition when it can figure out that the
    -	# pattern will never change, and when this optimization isn't on, we run
    -	# afoul of the reaper. Thus, the slightly redundant code that uses two
    -	# static s/// patterns rather than one conditional pattern.
    -
    -	if ($g_list_level) {
    -		$text =~ s{
    -				^
    -				$whole_list
    -			}{
    -				my $list = $1;
    -				my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol";
    -
    -				# Turn double returns into triple returns, so that we can make a
    -				# paragraph for the last item in a list, if necessary:
    -				$list =~ s/\n{2,}/\n\n\n/g;
    -				my $result = _ProcessListItems($list, $marker_any);
    -
    -				# Trim any trailing whitespace, to put the closing ``
    -				# up on the preceding line, to get it past the current stupid
    -				# HTML block parser. This is a hack to work around the terrible
    -				# hack that is the HTML block parser.
    -				$result =~ s{\s+$}{};
    -				$result = "<$list_type>" . $result . "\n";
    -				$result;
    -			}egmx;
    -	}
    -	else {
    -		$text =~ s{
    -				(?:(?<=\n\n)|\A\n?)
    -				$whole_list
    -			}{
    -				my $list = $1;
    -				my $list_type = ($3 =~ m/$marker_ul/) ? "ul" : "ol";
    -				# Turn double returns into triple returns, so that we can make a
    -				# paragraph for the last item in a list, if necessary:
    -				$list =~ s/\n{2,}/\n\n\n/g;
    -				my $result = _ProcessListItems($list, $marker_any);
    -				$result = "<$list_type>\n" . $result . "\n";
    -				$result;
    -			}egmx;
    -	}
    -
    -
    -	return $text;
    -}
    -
    -
    -sub _ProcessListItems {
    -#
    -#	Process the contents of a single ordered or unordered list, splitting it
    -#	into individual list items.
    -#
    -
    -	my $list_str = shift;
    -	my $marker_any = shift;
    -
    -
    -	# The $g_list_level global keeps track of when we're inside a list.
    -	# Each time we enter a list, we increment it; when we leave a list,
    -	# we decrement. If it's zero, we're not in a list anymore.
    -	#
    -	# We do this because when we're not inside a list, we want to treat
    -	# something like this:
    -	#
    -	#		I recommend upgrading to version
    -	#		8. Oops, now this line is treated
    -	#		as a sub-list.
    -	#
    -	# As a single paragraph, despite the fact that the second line starts
    -	# with a digit-period-space sequence.
    -	#
    -	# Whereas when we're inside a list (or sub-list), that line will be
    -	# treated as the start of a sub-list. What a kludge, huh? This is
    -	# an aspect of Markdown's syntax that's hard to parse perfectly
    -	# without resorting to mind-reading. Perhaps the solution is to
    -	# change the syntax rules such that sub-lists must start with a
    -	# starting cardinal number; e.g. "1." or "a.".
    -
    -	$g_list_level++;
    -
    -	# trim trailing blank lines:
    -	$list_str =~ s/\n{2,}\z/\n/;
    -
    -
    -	$list_str =~ s{
    -		(\n)?							# leading line = $1
    -		(^[ \t]*)						# leading whitespace = $2
    -		($marker_any) [ \t]+			# list marker = $3
    -		((?s:.+?)						# list item text   = $4
    -		(\n{1,2}))
    -		(?= \n* (\z | \2 ($marker_any) [ \t]+))
    -	}{
    -		my $item = $4;
    -		my $leading_line = $1;
    -		my $leading_space = $2;
    -
    -		if ($leading_line or ($item =~ m/\n{2,}/)) {
    -			$item = _RunBlockGamut(_Outdent($item));
    -		}
    -		else {
    -			# Recursion for sub-lists:
    -			$item = _DoLists(_Outdent($item));
    -			chomp $item;
    -			$item = _RunSpanGamut($item);
    -		}
    -
    -		"
  • " . $item . "
  • \n"; - }egmx; - - $g_list_level--; - return $list_str; -} - - - -sub _DoCodeBlocks { -# -# Process Markdown `
    ` blocks.
    -#	
    -
    -	my $text = shift;
    -
    -	$text =~ s{
    -			(?:\n\n|\A)
    -			(	            # $1 = the code block -- one or more lines, starting with a space/tab
    -			  (?:
    -			    (?:[ ]{$g_tab_width} | \t)  # Lines must start with a tab or a tab-width of spaces
    -			    .*\n+
    -			  )+
    -			)
    -			((?=^[ ]{0,$g_tab_width}\S)|\Z)	# Lookahead for non-space at line-start, or end of doc
    -		}{
    -			my $codeblock = $1;
    -			my $result; # return value
    -
    -			$codeblock = _EncodeCode(_Outdent($codeblock));
    -			$codeblock = _Detab($codeblock);
    -			$codeblock =~ s/\A\n+//; # trim leading newlines
    -			$codeblock =~ s/\n+\z//; # trim trailing newlines
    -
    -			$result = "\n\n
    " . $codeblock . "
    \n\n"; # CHANGED: Removed newline for MMD - - $result; - }egmx; - - return $text; -} - - -sub _DoCodeSpans { -# -# * Backtick quotes are used for spans. -# -# * You can use multiple backticks as the delimiters if you want to -# include literal backticks in the code span. So, this input: -# -# Just type ``foo `bar` baz`` at the prompt. -# -# Will translate to: -# -#

    Just type foo `bar` baz at the prompt.

    -# -# There's no arbitrary limit to the number of backticks you -# can use as delimters. If you need three consecutive backticks -# in your code, use four for delimiters, etc. -# -# * You can use spaces to get literal backticks at the edges: -# -# ... type `` `bar` `` ... -# -# Turns to: -# -# ... type `bar` ... -# - - my $text = shift; - - $text =~ s@ - (?$c
    "; - @egsx; - - return $text; -} - - -sub _EncodeCode { -# -# Encode/escape certain characters inside Markdown code runs. -# The point is that in code, these characters are literals, -# and lose their special Markdown meanings. -# - local $_ = shift; - - # Encode all ampersands; HTML entities are not - # entities within a Markdown code span. - s/&/&/g; - - # Encode $'s, but only if we're running under Blosxom. - # (Blosxom interpolates Perl variables in article bodies.) - { - no warnings 'once'; - if (defined($blosxom::version)) { - s/\$/$/g; - } - } - - - # Do the angle bracket song and dance: - s! < !<!gx; - s! > !>!gx; - - # Now, escape characters that are magic in Markdown: - s! \* !$g_escape_table{'*'}!gx; - s! _ !$g_escape_table{'_'}!gx; - s! { !$g_escape_table{'{'}!gx; - s! } !$g_escape_table{'}'}!gx; - s! \[ !$g_escape_table{'['}!gx; - s! \] !$g_escape_table{']'}!gx; - s! \\ !$g_escape_table{'\\'}!gx; - - return $_; -} - - -sub _DoItalicsAndBold { - my $text = shift; - - # Cave in - `*` and `_` behave differently... We'll see how it works out - - - # must go first: - $text =~ s{ (?$2}gsx; - - $text =~ s{ (?$2}gsx; - - # And now, a second pass to catch nested strong and emphasis special cases - $text =~ s{ (?$2}gsx; - - $text =~ s{ (?$2}gsx; - - # And now, allow `*` in the middle of words - - # must go first: - $text =~ s{ (\*\*) (?=\S) (.+?[*]*) (?<=\S) \1 } - {$2}gsx; - - $text =~ s{ (\*) (?=\S) (.+?) (?<=\S) \1 } - {$2}gsx; - - return $text; -} - - -sub _DoBlockQuotes { - my $text = shift; - - $text =~ s{ - ( # Wrap whole match in $1 - ( - ^[ \t]*>[ \t]? # '>' at the start of a line - .+\n # rest of the first line - (.+\n)* # subsequent consecutive lines - \n* # blanks - )+ - ) - }{ - my $bq = $1; - $bq =~ s/^[ \t]*>[ \t]?//gm; # trim one level of quoting - $bq =~ s/^[ \t]+$//mg; # trim whitespace-only lines - $bq = _RunBlockGamut($bq); # recurse - - $bq =~ s/^/ /g; - # These leading spaces screw with
     content, so we need to fix that:
    -			$bq =~ s{
    -					(\s*
    .+?
    ) - }{ - my $pre = $1; - $pre =~ s/^ //mg; - $pre; - }egsx; - - "
    \n$bq\n
    \n\n"; - }egmx; - - - return $text; -} - - -sub _FormParagraphs { -# -# Params: -# $text - string to process with html

    tags -# - my $text = shift; - - # Strip leading and trailing lines: - $text =~ s/\A\n+//; - $text =~ s/\n+\z//; - - my @grafs = split(/\n{2,}/, $text); - - # - # Wrap

    tags. - # - foreach (@grafs) { - unless (defined( $g_html_blocks{$_} )) { - $_ = _RunSpanGamut($_); - s/^([ \t]*)/

    /; - $_ .= "

    "; - } - } - - # - # Unhashify HTML blocks - # -# foreach my $graf (@grafs) { -# my $block = $g_html_blocks{$graf}; -# if (defined $block) { -# $graf = $block; -# } -# } - - foreach my $graf (@grafs) { - # Modify elements of @grafs in-place... - my $block = $g_html_blocks{$graf}; - if (defined $block) { - $graf = $block; - if ($block =~ m{ - \A - ( # $1 =
    tag -
    ]* - \b - markdown\s*=\s* (['"]) # $2 = attr quote char - 1 - \2 - [^>]* - > - ) - ( # $3 = contents - .* - ) - (
    ) # $4 = closing tag - \z - - }xms - ) { - my ($div_open, $div_content, $div_close) = ($1, $3, $4); - - # We can't call Markdown(), because that resets the hash; - # that initialization code should be pulled into its own sub, though. - $div_content = _HashHTMLBlocks($div_content); - $div_content = _StripLinkDefinitions($div_content); - $div_content = _RunBlockGamut($div_content); - $div_content = _UnescapeSpecialChars($div_content); - - $div_open =~ s{\smarkdown\s*=\s*(['"]).+?\1}{}ms; - - $graf = $div_open . "\n" . $div_content . "\n" . $div_close; - } - } - } - - - return join "\n\n", @grafs; -} - - -sub _EncodeAmpsAndAngles { -# Smart processing for ampersands and angle brackets that need to be encoded. - - my $text = shift; - - # Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: - # http://bumppo.net/projects/amputator/ - $text =~ s/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/&/g; - - # Encode naked <'s - $text =~ s{<(?![a-z/?\$!])}{<}gi; - - return $text; -} - - -sub _EncodeBackslashEscapes { -# -# Parameter: String. -# Returns: The string, with after processing the following backslash -# escape sequences. -# - local $_ = shift; - - s! \\\\ !$g_escape_table{'\\'}!gx; # Must process escaped backslashes first. - s! \\` !$g_escape_table{'`'}!gx; - s! \\\* !$g_escape_table{'*'}!gx; - s! \\_ !$g_escape_table{'_'}!gx; - s! \\\{ !$g_escape_table{'{'}!gx; - s! \\\} !$g_escape_table{'}'}!gx; - s! \\\[ !$g_escape_table{'['}!gx; - s! \\\] !$g_escape_table{']'}!gx; - s! \\\( !$g_escape_table{'('}!gx; - s! \\\) !$g_escape_table{')'}!gx; - s! \\> !$g_escape_table{'>'}!gx; - s! \\\# !$g_escape_table{'#'}!gx; - s! \\\+ !$g_escape_table{'+'}!gx; - s! \\\- !$g_escape_table{'-'}!gx; - s! \\\. !$g_escape_table{'.'}!gx; - s{ \\! }{$g_escape_table{'!'}}gx; - - return $_; -} - - -sub _DoAutoLinks { - my $text = shift; - - $text =~ s{<((https?|ftp|dict):[^'">\s]+)>}{
    $1}gi; - - # Email addresses: - $text =~ s{ - < - (?:mailto:)? - ( - [-.\w]+ - \@ - [-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+ - ) - > - }{ - _EncodeEmailAddress( _UnescapeSpecialChars($1) ); - }egix; - - return $text; -} - - -sub _EncodeEmailAddress { -# -# Input: an email address, e.g. "foo@example.com" -# -# Output: the email address as a mailto link, with each character -# of the address encoded as either a decimal or hex entity, in -# the hopes of foiling most address harvesting spam bots. E.g.: -# -# foo -# @example.com -# -# Based on a filter by Matthew Wickline, posted to the BBEdit-Talk -# mailing list: -# - - my $addr = shift; - - srand; - my @encode = ( - sub { '&#' . ord(shift) . ';' }, - sub { '&#x' . sprintf( "%X", ord(shift) ) . ';' }, - sub { shift }, - ); - - $addr = "mailto:" . $addr; - - $addr =~ s{(.)}{ - my $char = $1; - if ( $char eq '@' ) { - # this *must* be encoded. I insist. - $char = $encode[int rand 1]->($char); - } elsif ( $char ne ':' ) { - # leave ':' alone (to spot mailto: later) - my $r = rand; - # roughly 10% raw, 45% hex, 45% dec - $char = ( - $r > .9 ? $encode[2]->($char) : - $r < .45 ? $encode[1]->($char) : - $encode[0]->($char) - ); - } - $char; - }gex; - - $addr = qq{$addr}; - $addr =~ s{">.+?:}{">}; # strip the mailto: from the visible part - - return $addr; -} - - -sub _UnescapeSpecialChars { -# -# Swap back in all the special characters we've hidden. -# - my $text = shift; - - while( my($char, $hash) = each(%g_escape_table) ) { - $text =~ s/$hash/$char/g; - } - return $text; -} - - -sub _TokenizeHTML { -# -# Parameter: String containing HTML markup. -# Returns: Reference to an array of the tokens comprising the input -# string. Each token is either a tag (possibly with nested, -# tags contained therein, such as , or a -# run of text between tags. Each element of the array is a -# two-element array; the first is either 'tag' or 'text'; -# the second is the actual value. -# -# -# Derived from the _tokenize() subroutine from Brad Choate's MTRegex plugin. -# -# - - my $str = shift; - my $pos = 0; - my $len = length $str; - my @tokens; - - my $depth = 6; - my $nested_tags = join('|', ('(?:<[a-z/!$](?:[^<>]') x $depth) . (')*>)' x $depth); - my $match = qr/(?s: ) | # comment - (?s: <\? .*? \?> ) | # processing instruction - $nested_tags/ix; # nested tags - - while ($str =~ m/($match)/g) { - my $whole_tag = $1; - my $sec_start = pos $str; - my $tag_start = $sec_start - length $whole_tag; - if ($pos < $tag_start) { - push @tokens, ['text', substr($str, $pos, $tag_start - $pos)]; - } - push @tokens, ['tag', $whole_tag]; - $pos = pos $str; - } - push @tokens, ['text', substr($str, $pos, $len - $pos)] if $pos < $len; - - return \@tokens; -} - - -sub _Outdent { -# -# Remove one level of line-leading tabs or spaces -# - my $text = shift; - - $text =~ s/^(\t|[ ]{1,$g_tab_width})//gm; - return $text; -} - - -sub _Detab { -# -# Cribbed from a post by Bart Lateur: -# -# - my $text = shift; - - $text =~ s{(.*?)\t}{$1.(' ' x ($g_tab_width - length($1) % $g_tab_width))}ge; - return $text; -} - -# -# MultiMarkdown Routines -# - -sub _ParseMetaData { - my $text = shift; - my $clean_text = ""; - - my ($inMetaData, $currentKey) = (1,''); - - # If only metadata is "Format: complete" then skip - - if ($text =~ s/^(Format):\s*complete\n(.*?)\n/$2\n/is) { - # If "Format: complete" was added automatically, don't force first - # line of text to be metadata - $g_metadata{$1}= "complete"; - $g_document_format = "complete"; - } - - foreach my $line ( split /\n/, $text ) { - $line =~ /^$/ and $inMetaData = 0; - if ($inMetaData) { - if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]*?):\s*(.*)$/ ) { - $currentKey = $1; - my $meta = $2; - $currentKey =~ s/\s+/ /g; - $currentKey =~ s/\s$//; - $g_metadata{$currentKey} = $meta; - if (lc($currentKey) eq "format") { - $g_document_format = lc($g_metadata{$currentKey}); - } - if (lc($currentKey) eq "base url") { - $g_base_url = $g_metadata{$currentKey}; - } - if (lc($currentKey) eq "bibliography title") { - $g_bibliography_title = $g_metadata{$currentKey}; - $g_bibliography_title =~ s/\s*$//; - } - if (lc($currentKey) eq "base header level") { - $g_base_header_level = $g_metadata{$currentKey}; - } - if (!$g_metadata_newline{$currentKey}) { - $g_metadata_newline{$currentKey} = $g_metadata_newline{default}; - } - } else { - if ($currentKey eq "") { - # No metadata present - $clean_text .= "$line\n"; - $inMetaData = 0; - next; - } - if ($line =~ /^\s*(.+)$/ ) { - $g_metadata{$currentKey} .= "$g_metadata_newline{$currentKey}$1"; - } - } - } else { - $clean_text .= "$line\n"; - } - } - - return $clean_text; -} - -sub _StripFootnoteDefinitions { - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - while ($text =~ s{ - \n[ ]{0,$less_than_tab}\[\^([^\n]+?)\]\:[ \t]*# id = $1 - \n? - (.*?)\n{1,2} # end at new paragraph - ((?=\n[ ]{0,$less_than_tab}\S)|\Z) # Lookahead for non-space at line-start, or end of doc - } - {\n}sx) - { - my $id = $1; - my $footnote = "$2\n"; - $footnote =~ s/^[ ]{0,$g_tab_width}//gm; - - $g_footnotes{id2footnote($id)} = $footnote; - } - - return $text; -} - -sub _DoFootnotes { - my $text = shift; - - # First, run routines that get skipped in footnotes - foreach my $label (sort keys %g_footnotes) { - my $footnote = _RunBlockGamut($g_footnotes{$label}); - - $footnote = _DoMarkdownCitations($footnote); - $g_footnotes{$label} = $footnote; - } - - $text =~ s{ - \[\^(.+?)\] # id = $1 - }{ - my $result = ""; - my $id = id2footnote($1); - if (defined $g_footnotes{$id} ) { - $g_footnote_counter++; - if ($g_footnotes{$id} =~ /^(

    )?glossary:/i) { - $result = "$g_footnote_counter"; - } else { - $result = "$g_footnote_counter"; - } - push (@g_used_footnotes,$id); - } - $result; - }xsge; - - return $text; -} - -sub _FixFootnoteParagraphs { - my $text = shift; - - $text =~ s/^\\<\/footnote\>/<\/footnote>/gm; - - return $text; -} - -sub _PrintFootnotes{ - my $footnote_counter = 0; - my $result = ""; - - foreach my $id (@g_used_footnotes) { - $footnote_counter++; - my $footnote = $g_footnotes{$id}; - my $footnote_closing_tag = ""; - - $footnote =~ s/(\<\/(p(re)?|ol|ul)\>)$//; - $footnote_closing_tag = $1; - - if ($footnote =~ s/^(

    )?glossary:\s*//i) { - # Add some formatting for glossary entries - - $footnote =~ s{ - ^(.*?) # $1 = term - \s* - (?:\(([^\(\)]*)\)[^\n]*)? # $2 = optional sort key - \n - }{ - my $glossary = "$1"; - - if ($2) { - $glossary.="$2"; - }; - - $glossary . ":

    "; - }egsx; - - $result.="

  • $footnote ↩$footnote_closing_tag
  • \n\n"; - } else { - $result.="
  • $footnote ↩$footnote_closing_tag
  • \n\n"; - } - } - $result .= "\n
    "; - - if ($footnote_counter > 0) { - $result = "\n\n
    \n\n\n".$result; - } else { - $result = ""; - } - - $result= _UnescapeSpecialChars($result); - return $result; -} - -sub Header2Label { - my $header = shift; - my $label = lc $header; - $label =~ s/[^A-Za-z0-9:_.-]//g; # Strip illegal characters - while ($label =~ s/^[^A-Za-z]//g) - {}; # Strip illegal leading characters - return $label; -} - -sub id2footnote { - # Since we prepend "fn:", we can allow leading digits in footnotes - my $id = shift; - my $footnote = lc $id; - $footnote =~ s/[^A-Za-z0-9:_.-]//g; # Strip illegal characters - return $footnote; -} - - -sub xhtmlMetaData { - my $result = qq{\n}; - - # This screws up xsltproc - make sure to use `-nonet -novalid` if you - # have difficulty - if ($g_allow_mathml) { - $result .= qq{ -\n}; - - $result.= qq{\n\t\n}; - } else { - $result .= qq{\n}; - - $result.= qq!\n\t\n!; - } - - $result.= "\t\t\n"; - - foreach my $key (sort keys %g_metadata ) { - # Strip trailing spaces - $g_metadata{$key} =~ s/(\s)*$//s; - - # Strip spaces from key - my $export_key = $key; - $export_key =~ s/\s//g; - - if (lc($key) eq "title") { - $result.= "\t\t" . _EncodeAmpsAndAngles($g_metadata{$key}) . "\n"; - } elsif (lc($key) eq "css") { - $result.= "\t\t\n/g; - - if ($result ne "") { - $result.= "\n"; - } - - return $result; -} - -sub _ConvertCopyright{ - my $text = shift; - # Convert to an XML compatible form of copyright symbol - - $text =~ s/©/©/gi; - - return $text; -} - - -sub _DoTables { - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Algorithm inspired by PHP Markdown Extra's table support - # - - # Reusable regexp's to match table - - my $line_start = qr{ - [ ]{0,$less_than_tab} - }mx; - - my $table_row = qr{ - [^\n]*?\|[^\n]*?\n - }mx; - - my $first_row = qr{ - $line_start - \S+.*?\|.*?\n - }mx; - - my $table_rows = qr{ - (\n?$table_row) - }mx; - - my $table_caption = qr{ - $line_start - \[.*?\][ \t]*\n - }mx; - - my $table_divider = qr{ - $line_start - [\|\-\+\:\.][ \-\+\|\:\.]* \| [ \-\+\|\:\.]* - }mx; - - my $whole_table = qr{ - ($table_caption)? # Optional caption - ($first_row # First line must start at beginning - ($table_row)*?)? # Header Rows - $table_divider # Divider/Alignment definitions - $table_rows+ # Body Rows - ($table_caption)? # Optional caption - }mx; - - - # Find whole tables, then break them up and process them - - $text =~ s{ - ^($whole_table) # Whole table in $1 - (\n|\Z) # End of file or 2 blank lines - }{ - my $table = $1; - - # Clean extra spaces at end of lines - - # they cause the processing to choke - $table =~ s/[\t ]*\n/\n/gs; - - my $result = "
    \n"; - my @alignments; - my $use_row_header = 1; - - # Add Caption, if present - - if ($table =~ s/^$line_start(?:\[\s*(.*)\s*\])?(?:\[\s*(.*?)\s*\])[ \t]*$//m) { - my $table_id = ""; - my $table_caption = ""; - - $table_id = Header2Label($2); - - if (defined $1) { - $table_caption = $1; - } else { - $table_caption = $2; - } - $result .= "\n"; - - $g_crossrefs{$table_id} = "#$table_id"; - $g_titles{$table_id} = "see table"; # captions with "stuff" in them break links - } - - # If a second "caption" is present, treat it as a summary - # However, this is not valid in XHTML 1.0 Strict - # But maybe in future - - # A summary might be longer than one line - if ($table =~ s/\n$line_start\[\s*(.*?)\s*\][ \t]*\n/\n/s) { - # $result .= "" . _RunSpanGamut($1) . "\n"; - } - - # Now, divide table into header, alignment, and body - - # First, add leading \n in case there is no header - - $table = "\n" . $table; - - # Need to be greedy - - $table =~ s/\n($table_divider)\n(($table_rows)+)//s; - - my $body = ""; - my $alignment_string = ""; - if (defined $1){ - $alignment_string = $1; - } - if (defined $2){ - $body = $2; - } - - # Process column alignment - while ($alignment_string =~ /\|?\s*(.+?)\s*(\||\Z)/gs) { - my $cell = _RunSpanGamut($1); - if ($cell =~ /\+/){ - $result .= "$cell\n"; - } else { - $result .= "\t<$cell_type$colspan>$cell\n"; - } - $count++; - } - $result .= "\n"; - } - - # Strip out empty sections - $result =~ s/\s*<\/thead>\s*//s; - - # Handle pull-quotes - - # This might be too specific for my needs. If others want it - # removed, I am open to discussion. - - $result =~ s/
    " . _RunSpanGamut($table_caption). "
    \s*\s*/
    \n\n/s; - - $result .= "\n
    \n"; - $result - }egmx; - - my $table_body = qr{ - ( # wrap whole match in $2 - - (.*?\|.*?)\n # wrap headers in $3 - - [ ]{0,$less_than_tab} - ($table_divider) # alignment in $4 - - ( # wrap cells in $5 - $table_rows - ) - ) - }mx; - - return $text; -} - - -sub _DoAttributes{ - my $id = shift; - my $result = ""; - - if (defined $g_attributes{$id}) { - my $attributes = $g_attributes{$id}; - while ($attributes =~ s/(\S+)="(.*?)"//) { - $result .= " $1=\"$2\""; - } - while ($attributes =~ /(\S+)=(\S+)/g) { - $result .= " $1=\"$2\""; - } - } - - return $result; -} - - -sub _StripMarkdownReferences { - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - while ($text =~ s{ - \n\[\#(.+?)\]:[ \t]* # id = $1 - \n? - (.*?)\n{1,2} # end at new paragraph - ((?=\n[ ]{0,$less_than_tab}\S)|\Z) # Lookahead for non-space at line-start, or end of doc - } - {\n}sx) - { - my $id = $1; - my $reference = "$2\n"; - - $reference =~ s/^[ ]{0,$g_tab_width}//gm; - - $reference = _RunBlockGamut($reference); - - # strip leading and trailing

    tags (they will be added later) - $reference =~ s/^\//s; - $reference =~ s/\<\/p\>\s*$//s; - - $g_references{$id} = $reference; - } - - return $text; -} - -sub _DoMarkdownCitations { - my $text = shift; - - $text =~ s{ # Allow for citations without locator to be written - \[\#([^\[]*?)\] # in usual manner, e.g. [#author][] rather than - [ ]? # [][#author] - (?:\n[ ]*)? - \[\s*\] - }{ - "[][#$1]"; - }xsge; - - $text =~ s{ - \[([^\[]*?)\] # citation text = $1 - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - \[\#(.*?)\] # id = $2 - }{ - my $result; - my $anchor_text = $1; - my $id = $2; - my $count; - - # implement equivalent to \citet - my $textual_string = ""; - if ($anchor_text =~ s/^(.*?);\s*//) { - $textual_string = "$1"; - } - - if (defined $g_references{$id} ) { - my $citation_counter=0; - - # See if citation has been used before - foreach my $old_id (@g_used_references) { - $citation_counter++; - $count = $citation_counter if ($old_id eq $id); - } - - if (! defined $count) { - $g_citation_counter++; - $count = $g_citation_counter; - push (@g_used_references,$id); - } - - $result = "$textual_string ($count"; - - if ($anchor_text ne "") { - $result .=", $anchor_text"; - } - - $result .= ")"; - } else { - # No reference exists - $result = "$textual_string ($id"; - - if ($anchor_text ne "") { - $result .=", $anchor_text"; - } - - $result .= ")"; - } - - if (Header2Label($anchor_text) eq "notcited"){ - $result = ""; - } - $result; - }xsge; - - return $text; - -} - -sub _PrintMarkdownBibliography{ - my $citation_counter = 0; - my $result; - - foreach my $id (@g_used_references) { - $citation_counter++; - $result.="

    [$citation_counter] $g_references{$id}

    \n\n"; - } - $result .= "
    "; - - if ($citation_counter > 0) { - $result = "\n\n
    \n$g_bibliography_title

    \n\n".$result; - } else { - $result = ""; - } - - return $result; -} - -sub _GenerateImageCrossRefs { - my $text = shift; - - # - # First, handle reference-style labeled images: ![alt text][id] - # - $text =~ s{ - ( # wrap whole match in $1 - !\[ - (.*?) # alt text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - - ) - }{ - my $result; - my $whole_match = $1; - my $alt_text = $2; - my $link_id = lc $3; - - if ($link_id eq "") { - $link_id = lc $alt_text; # for shortcut links like ![this][]. - } - - $alt_text =~ s/"/"/g; - if (defined $g_urls{$link_id}) { - my $label = Header2Label($alt_text); - $g_crossrefs{$label} = "#$label"; - } - else { - # If there's no such link ID, leave intact: - $result = $whole_match; - } - - $whole_match; - }xsge; - - # - # Next, handle inline images: ![alt text](url "optional title") - # Don't forget: encode * and _ - - $text =~ s{ - ( # wrap whole match in $1 - !\[ - (.*?) # alt text = $2 - \] - \( # literal paren - [ \t]* - ? # src url = $3 - [ \t]* - ( # $4 - (['"]) # quote char = $5 ' - (.*?) # title = $6 - \5 # matching quote - [ \t]* - )? # title is optional - \) - ) - }{ - my $result; - my $whole_match = $1; - my $alt_text = $2; - - $alt_text =~ s/"/"/g; - my $label = Header2Label($alt_text); - $g_crossrefs{$label} = "#$label"; - $whole_match; - }xsge; - - return $text; -} - -sub _FindMathEquations{ - my $text = shift; - - $text =~ s{ - (\]*)id=\"(.*?)\"> # " - }{ - my $label = Header2Label($2); - my $header = _RunSpanGamut($2); - - $g_crossrefs{$label} = "#$label"; - $g_titles{$label} = $header; - - $1 . "id=\"$label\">"; - }xsge; - - return $text; -} - -sub _DoMathSpans { - # Based on Gruber's _DoCodeSpans - - my $text = shift; - my $display_as_block = 0; - $display_as_block = 1 if ($text =~ /^<<[^\>\>]*>>$/); - - $text =~ s{ - (?>) - }{ - my $m = "$2"; - my $label = ""; - my @attr = (xmlns=>"http://www.w3.org/1998/Math/MathML"); - - if (defined $3) { - $label = Header2Label($3); - my $header = _RunSpanGamut($3); - - $g_crossrefs{$label} = "#$label"; - $g_titles{$label} = $header; - } - $m =~ s/^[ \t]*//g; # leading whitespace - $m =~ s/[ \t]*$//g; # trailing whitespace - push(@attr,(id=>"$label")) if ($label ne ""); - push(@attr,(display=>"block")) if ($display_as_block == 1); - - $m = $mathParser->TextToMathML($m,\@attr); - "$m"; - }egsx; - - return $text; -} - -sub _DoDefinitionLists { - # Uses the syntax proposed by Michel Fortin in PHP Markdown Extra - - my $text = shift; - my $less_than_tab = $g_tab_width -1; - - my $line_start = qr{ - [ ]{0,$less_than_tab} - }mx; - - my $term = qr{ - $line_start - [^:\s][^\n]*\n - }sx; - - my $definition = qr{ - \n?[ ]{0,$less_than_tab} - \:[ \t]+(.*?)\n - ((?=\n?\:)|\n|\Z) # Lookahead for next definition, two returns, - # or the end of the document - }sx; - - my $definition_block = qr{ - ((?:$term)+) # $1 = one or more terms - ((?:$definition)+) # $2 = by one or more definitions - }sx; - - my $definition_list = qr{ - (?:$definition_block\n*)+ # One ore more definition blocks - }sx; - - $text =~ s{ - ($definition_list) # $1 = the whole list - }{ - my $list = $1; - my $result = $1; - - $list =~ s{ - (?:$definition_block)\n* - }{ - my $terms = $1; - my $defs = $2; - - $terms =~ s{ - [ ]{0,$less_than_tab} - (.*) - \s* - }{ - my $term = $1; - my $result = ""; - $term =~ s/^\s*(.*?)\s*$/$1/; - if ($term !~ /^\s*$/){ - $result = "
    " . _RunSpanGamut($1) . "
    \n"; - } - $result; - }xmge; - - $defs =~ s{ - $definition - }{ - my $def = $1 . "\n"; - $def =~ s/^[ ]{0,$g_tab_width}//gm; - "
    \n" . _RunBlockGamut($def) . "\n
    \n"; - }xsge; - - $terms . $defs . "\n"; - }xsge; - - "
    \n" . $list . "
    \n\n"; - }xsge; - - return $text -} - -sub _UnescapeComments{ - # Remove encoding inside comments - # Based on proposal by Toras Doran (author of Text::MultiMarkdown) - - my $text = shift; - $text =~ s{ - (?<=) # End comments - }{ - my $t = $1; - $t =~ s/&/&/g; - $t =~ s/</ - - -=head1 SYNOPSIS - -B [ B<--html4tags> ] [ B<--version> ] [ B<-shortversion> ] - [ I ... ] - - -=head1 DESCRIPTION - -MultiMarkdown is an extended version of Markdown. See the website for more -information. - - http://fletcherpenney.net/multimarkdown/ - -Markdown is a text-to-HTML filter; it translates an easy-to-read / -easy-to-write structured text format into HTML. Markdown's text format -is most similar to that of plain text email, and supports features such -as headers, *emphasis*, code blocks, blockquotes, and links. - -Markdown's syntax is designed not as a generic markup language, but -specifically to serve as a front-end to (X)HTML. You can use span-level -HTML tags anywhere in a Markdown document, and you can use block level -HTML tags (like
    and as well). - -For more information about Markdown's syntax, see: - - http://daringfireball.net/projects/markdown/ - - -=head1 OPTIONS - -Use "--" to end switch parsing. For example, to open a file named "-z", use: - - Markdown.pl -- -z - -=over 4 - - -=item B<--html4tags> - -Use HTML 4 style for empty element tags, e.g.: - -
    - -instead of Markdown's default XHTML style tags, e.g.: - -
    - - -=item B<-v>, B<--version> - -Display Markdown's version number and copyright information. - - -=item B<-s>, B<--shortversion> - -Display the short-form version number. - - -=back - - - -=head1 BUGS - -To file bug reports or feature requests (other than topics listed in the -Caveats section above) please send email to: - - support@daringfireball.net (for Markdown issues) - - owner@fletcherpenney.net (for MultiMarkdown issues) - -Please include with your report: (1) the example input; (2) the output -you expected; (3) the output (Multi)Markdown actually produced. - - -=head1 AUTHOR - - John Gruber - http://daringfireball.net/ - - PHP port and other contributions by Michel Fortin - http://michelf.com/ - - MultiMarkdown changes by Fletcher Penney - http://fletcherpenney.net/ - -=head1 COPYRIGHT AND LICENSE - -Original Markdown Code Copyright (c) 2003-2007 John Gruber - -All rights reserved. - -MultiMarkdown changes Copyright (c) 2005-2009 Fletcher T. Penney - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. - -=cut - diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown/Support.pm b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown/Support.pm deleted file mode 100755 index a0e03abb..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/MultiMarkdown/Support.pm +++ /dev/null @@ -1,622 +0,0 @@ -# -# $Id: Support.pm 534 2009-06-19 20:52:55Z fletcher $ -# -# MultiMarkdown Version 2.0.b6 -# - -# TODO: Add an option to turn SmartyPants off? - -package MultiMarkdown::Support; - -# use 5.00; -use strict; -use warnings; - -use File::Basename; -use File::Path; -use File::Temp qw/tempdir/; -use File::Copy; -use File::Glob qw/:globally/; -use Cwd; -use Cwd 'abs_path'; - - -use vars qw(%g_metadata); - -our $VERSION = '1.0'; - -sub ProcessMMD2XHTML { - my $MMDPath = shift; - my $input_file = shift; - my $text = "Format: complete\n"; - $text .= shift; - - my $output_file = ""; - $output_file = _Input2Output($input_file, "html") if ($input_file ne ""); - - my $SmartyPants = _WhichSmarty($text); - my $xslt_file = _XhtmlXSLT($text); - - # Generate the pipe command and run - - my $os = $^O; - my $xslt = ""; - my $out = ""; - - if ($input_file ne "") { - $out = "> \"$output_file\""; - } - - if ($os =~ /MSWin/) { - $xslt = "| xsltproc -nonet -novalid XSLT\\$xslt_file -" if ($xslt_file ne ""); - $MMDPath =~ s/\//\\/g; - open (MultiMarkdown, "| cd $MMDPath & perl bin\\MultiMarkdown.pl | perl bin\\$SmartyPants $xslt $out"); - } else { - $xslt = "| xsltproc -nonet -novalid XSLT/$xslt_file -" if ($xslt_file ne ""); - open (MultiMarkdown, "| cd \"$MMDPath\"; bin/MultiMarkdown.pl | bin/$SmartyPants $xslt $out"); - } - - print MultiMarkdown $text; - close (MultiMarkdown); -} - -sub ProcessMMD2RTF { - my $MMDPath = shift; - my $input_file = shift; - my $text = "Format: complete\n"; - $text .= shift; - - my $output_file = ""; - $output_file = _Input2Output($input_file, "rtf") if ($input_file ne ""); - - my $SmartyPants = _WhichSmarty($text); - my $xslt_file = _RTFXSLT($text); - $xslt_file = "xhtml2rtf.xslt" if ($xslt_file eq ""); # Default - - # Generate the pipe command and run - - my $os = $^O; - my $xslt = ""; - my $out = ""; - - if ($input_file ne "") { - $out = "> \"$output_file\""; - } - - if ($os =~ /MSWin/) { - $xslt = "| xsltproc -nonet -novalid XSLT\\$xslt_file -" if ($xslt_file ne ""); - $MMDPath =~ s/\//\\/g; - # TOD: This version won't crash on windows, but the regexp's aren't - # quite right. I welcome input from Windows users but I'm tired of - # messing with it myself for the time being. - my $command = "| cd \"$MMDPath\" & perl -pi -e \"s/(? \"$output_file\""; - } - - if ($os =~ /MSWin/) { - $xslt = "| xsltproc -nonet -novalid XSLT\\$xslt_file -" if ($xslt_file ne ""); - $MMDPath =~ s/\//\\/g; - open (MultiMarkdown, "| cd \"$MMDPath\" & perl bin\\MultiMarkdown.pl | perl bin\\$SmartyPants $xslt | perl Utilities\\cleancites.pl $out"); - } else { - $xslt = "| xsltproc -nonet -novalid XSLT/$xslt_file -" if ($xslt_file ne ""); - open (MultiMarkdown, "| cd \"$MMDPath\"; bin/MultiMarkdown.pl | bin/$SmartyPants $xslt | Utilities/cleancites.pl $out"); - } - - print MultiMarkdown $text; - close (MultiMarkdown); -} - - -sub ProcessMMD2PDF { - my $MMDPath = shift; - my $input_file = shift; - my $text = shift; - - # These are not all necessary for simple files, but are included to try - # and be as thorough as possible... Sort of a poor man's latexmk.pl - - my $tex_string = "; pdflatex mmd.tex; bibtex mmd; makeindex -t mmd.glg -o mmd.gls -s mmd.ist mmd.glo; makeindex -s `kpsewhich basic.gst` -o mmd.gls mmd.glo; pdflatex mmd.tex; pdflatex mmd.tex; pdflatex mmd.tex; pdflatex mmd.tex"; - - if ($^O =~ /MSWin/) { - $tex_string = "& pdflatex mmd.tex & bibtex mmd & makeindex -t mmd.glg -o mmd.gls -s mmd.ist mmd.glo & makeindex -s `kpsewhich basic.gst` -o mmd.gls mmd.glo & pdflatex mmd.tex & pdflatex mmd.tex & pdflatex mmd.tex & pdflatex mmd.tex"; - } - PDFEngine($MMDPath, $input_file, $tex_string, $text); - -} - - -sub ProcessMMD2PDFXeLaTeX { - my $MMDPath = shift; - my $input_file = shift; - my $text = shift; - - # These are not all necessary for simple files, but are included to try - # and be as thorough as possible... Sort of a poor man's latexmk.pl - - my $tex_string = "; xelatex mmd.tex; bibtex mmd; makeindex -t mmd.glg -o mmd.gls -s mmd.ist mmd.glo; makeindex -s `kpsewhich basic.gst` -o mmd.gls mmd.glo; xelatex mmd.tex; xelatex mmd.tex; xelatex mmd.tex; xelatex mmd.tex"; - - if ($^O =~ /MSWin/) { - $tex_string = "& xelatex mmd.tex & bibtex mmd & makeindex -t mmd.glg -o mmd.gls -s mmd.ist mmd.glo & makeindex -s `kpsewhich basic.gst` -o mmd.gls mmd.glo & xelatex mmd.tex & xelatex mmd.tex & xelatex mmd.tex & xelatex mmd.tex"; - } - PDFEngine($MMDPath, $input_file, $tex_string, $text); -} - -sub ProcessXHTML2MMD { - my $MMDPath = shift; - my $input_file = shift; - my $text = shift; - - my $output_file = ""; - $output_file = _Input2Output($input_file, "txt") if ($input_file ne ""); - - my $xslt_file = "multimarkdown.xslt"; - - # Generate the pipe command and run - - my $os = $^O; - my $xslt = ""; - my $out = ""; - - if ($input_file ne "") { - $out = "> \"$output_file\""; - } - - if ($os =~ /MSWin/) { - $xslt = "| xsltproc -nonet -novalid XSLT\\$xslt_file -" if ($xslt_file ne ""); - $MMDPath =~ s/\//\\/g; - open (MultiMarkdown, "| cd \"$MMDPath\" & xsltproc -nonet -novalid XSLT\\$xslt_file - $out"); - } else { - $xslt = "| xsltproc -nonet -novalid XSLT/$xslt_file -" if ($xslt_file ne ""); - open (MultiMarkdown, "| cd \"$MMDPath\"; xsltproc -nonet -novalid XSLT/$xslt_file - $out"); - } - - print MultiMarkdown $text; - close (MultiMarkdown); -} - - -sub ProcessOPML2MMD { - my $MMDPath = shift; - my $input_file = shift; - my $text = shift; - - # Preserve tab characters - $text =~ s/\t/ /g; - - my $output_file = ""; - $output_file = _Input2Output($input_file, "txt") if ($input_file ne ""); - - my $xslt_file = "opml2mmd.xslt"; - - # Generate the pipe command and run - - my $os = $^O; - my $xslt = ""; - my $out = ""; - - if ($input_file ne "") { - $out = "> \"$output_file\""; - } - - if ($os =~ /MSWin/) { - $xslt = "| xsltproc -nonet -novalid XSLT\\$xslt_file -" if ($xslt_file ne ""); - $MMDPath =~ s/\//\\/g; - open (MultiMarkdown, "| cd \"$MMDPath\" & xsltproc -nonet -novalid XSLT\\$xslt_file - $out"); - } else { - $xslt = "| xsltproc -nonet -novalid XSLT/$xslt_file -" if ($xslt_file ne ""); - open (MultiMarkdown, "| cd \"$MMDPath\"; xsltproc -nonet -novalid XSLT/$xslt_file - $out"); - } - - print MultiMarkdown $text; - close (MultiMarkdown); -} - - -sub PDFEngine { - my $MMDPath = shift; - my $input_file = shift; - my $tex_string = shift; - my $text = shift; - - my $latex_file = _Input2Output($input_file, "tex"); - my $output_file = _Input2Output($input_file, "pdf"); - my $parent_folder = dirname($latex_file); - my $temp_tex_file = ""; - my @support_files = (); - - # Create a temporary working folder - my $temp_folder = tempdir(); - - # Create the LaTeX file - ProcessMMD2LaTeX($MMDPath, $input_file, $text); - - if ($^O =~ /MSWin/) { - # We're in Windows - $temp_folder =~ s/\//\\/g; - $parent_folder =~ s/\\/\//g; - $temp_tex_file = "$temp_folder\\mmd.tex"; - @support_files = <'$parent_folder\\*.{bib,pdf,png,gif,jpg}'>; - } else { - # Not in Windows - $temp_tex_file = "$temp_folder/mmd.tex"; - my $temp_parent_folder = $parent_folder; - $temp_parent_folder =~ s/ /\\ /g; - @support_files = <$temp_parent_folder/*.{bib,pdf,png,gif,jpg}>; - - # Try to be sure we have access to the LaTeX binaries in our PATH, - # especially if they were installed by Fink - $ENV{'PATH'} .= ':/usr/texbin:/usr/local/teTeX/bin/powerpc-apple-darwin-current:/sw/bin'; - } - - # Copy tex into temp directory - copy($latex_file, $temp_tex_file); - - # Copy possible images, .bib files, etc to the temp folder - copy($_,$temp_folder) foreach(@support_files); - - # Now, do the latex stuff - system("cd \"$temp_folder\" $tex_string"); - - # Retrieve the pdf - my $temp_pdf_file = _Input2Output($temp_tex_file, "pdf"); - copy($temp_pdf_file, $output_file); - - # Remove temporary files - File::Path::rmtree($temp_folder); -} - -sub _Input2Output { - # Convert the filename given to an output file with new extension - my $input_file = shift; - my $file_extension = shift; - my $output_file = abs_path($input_file); - - $output_file =~ s/\.[^\.\\\/]*?$/.$file_extension/; # strip extension - - return $output_file; -} - -sub _WhichSmarty { - my $text = shift; - my $language = _Language($text); - - if ($language =~ /^\s*german\s*$/i) { - return "SmartyPantsGerman.pl"; - } elsif ($language =~ /^\s*french\s*$/i) { - return "SmartyPantsFrench.pl"; - } elsif ($language =~ /^\s*swedish|norwegian|finnish|danish\s*$/i) { - return "SmartyPantsSwedish.pl"; - } elsif ($language =~ /^\s*dutch\s*$/i) { - return "SmartyPantsDutch.pl"; - } - - return "SmartyPants.pl"; -} - -sub _Language { - my $text = shift; - - my ($inMetaData, $currentKey) = (1,''); - - foreach my $line ( split /\n/, $text ) { - $line =~ /^$/ and $inMetaData = 0 and next; - if ($inMetaData) { - if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]*?):\s*(.*)$/ ) { - $currentKey = $1; - $currentKey =~ s/ / /g; - $g_metadata{$currentKey} = $2; - if (lc($currentKey) eq "language") { - return $g_metadata{$currentKey}; - } - } else { - if ($currentKey eq "") { - # No metadata present - $inMetaData = 0; - next; - } - } - } - } - - return ""; -} - -sub _XhtmlXSLT { - my $text = shift; - - my ($inMetaData, $currentKey) = (1,''); - - foreach my $line ( split /\n/, $text ) { - $line =~ /^$/ and $inMetaData = 0 and next; - if ($inMetaData) { - if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]*?):\s*(.*)$/ ) { - $currentKey = $1; - my $temp = $2; - $currentKey =~ s/ //g; - $g_metadata{$currentKey} = $temp; - if (lc($currentKey) eq "xhtmlxslt") { - $g_metadata{$currentKey} =~ s/\s*(\.xslt)?\s*$/.xslt/; - return $g_metadata{$currentKey}; - } - } else { - if ($currentKey eq "") { - # No metadata present - $inMetaData = 0; - next; - } - } - } - } - - return ""; -} - -sub _LatexXSLT { - my $text = shift; - - my ($inMetaData, $currentKey) = (1,''); - - foreach my $line ( split /\n/, $text ) { - $line =~ /^$/ and $inMetaData = 0 and next; - if ($inMetaData) { - if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]*?):\s*(.*)$/ ) { - $currentKey = $1; - my $temp = $2; - $currentKey =~ s/ //g; - $g_metadata{$currentKey} = $temp; - if (lc($currentKey) eq "latexxslt") { - $g_metadata{$currentKey} =~ s/\s*(\.xslt)?\s*$/.xslt/; - return $g_metadata{$currentKey}; - } - } else { - if ($currentKey eq "") { - # No metadata present - $inMetaData = 0; - next; - } - } - } - } - - return ""; -} - - -sub _RTFXSLT { - my $text = shift; - - my ($inMetaData, $currentKey) = (1,''); - - foreach my $line ( split /\n/, $text ) { - $line =~ /^$/ and $inMetaData = 0 and next; - if ($inMetaData) { - if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]*?):\s*(.*)$/ ) { - $currentKey = $1; - my $temp = $2; - $currentKey =~ s/ //g; - $g_metadata{$currentKey} = $temp; - if (lc($currentKey) eq "rtfxslt") { - $g_metadata{$currentKey} =~ s/\s*(\.xslt)?\s*$/.xslt/; - return $g_metadata{$currentKey}; - } - } else { - if ($currentKey eq "") { - # No metadata present - $inMetaData = 0; - next; - } - } - } - } - - return ""; -} - -sub LocateMMD { - my $me = shift; # Where am I running from? - - my $os = $^O; # Mac = darwin; Linux = linux; Windows contains MSWin - my $MMDPath = ""; - - # Determine where MMD is installed. Use a "common installation" - # if available. - - $me = dirname($me); - - if ($os =~ /MSWin/) { - # We're running Windows - - # First check our directory to see if we're running inside MMD - - if ( -f "$me\\MultiMarkdown\\Support.pm") { - $MMDPath = "$me\\.."; - } - - # Next, look in user's home directory, then in common directories - if ($MMDPath eq "") { - if ( -d "$ENV{HOMEDRIVE}$ENV{HOMEPATH}\\MultiMarkdown") { - $MMDPath = "$ENV{HOMEDRIVE}$ENV{HOMEPATH}\\MultiMarkdown"; - } elsif ( -d "$ENV{HOMEDRIVE}\\Documents and Settings\\All Users\\MultiMarkdown") { - $MMDPath = "$ENV{HOMEDRIVE}\\Documents and Settings\\All Users\\MultiMarkdown"; - } - } - - # Load the MultiMarkdown::Support.pm module - do "$MMDPath\\bin\\MultiMarkdown\\Support.pm" if ($MMDPath ne ""); - } else { - # We're running Mac OS X or some *nix - - # First check our directory to see if we're running inside MMD - - if ( -f "$me/MultiMarkdown/Support.pm") { - $MMDPath = "$me/.."; - } - - # Next, look in user's home directory, then in common directories - if ($MMDPath eq "") { - if (defined($ENV{HOME})) { - if ( -d "$ENV{HOME}/Library/Application Support/MultiMarkdown") { - $MMDPath = "$ENV{HOME}/Library/Application Support/MultiMarkdown"; - } elsif ( -d "$ENV{HOME}/.multimarkdown") { - $MMDPath = "$ENV{HOME}/.multimarkdown"; - } - } - if ($MMDPath eq "") { - if ( -d "/Library/Application Support/MultiMarkdown") { - $MMDPath = "/Library/Application Support/MultiMarkdown"; - } elsif ( -d "/usr/share/multimarkdown") { - $MMDPath = "/usr/share/multimarkdown"; - } - } - } - } - - if ($MMDPath eq "") { - die "You do not appear to have MultiMarkdown installed.\n"; - } else { - # Load the MultiMarkdown::Support.pm module - $MMDPath = abs_path($MMDPath); - LoadModule("$MMDPath/bin/MultiMarkdown/Support.pm"); - } - - # Clean up the path - $MMDPath = abs_path($MMDPath); - - return $MMDPath; -} - -sub LoadModule { - my $file = shift; - my $os = $^O; # Mac = darwin; Linux = linux; Windows contains MSWin - - if ($os =~ /MSWin/) { - # Not sure what I can do here - } else { - unless (my $return = eval `cat "$file"`) { - warn "couldn't parse $file: $@" if $@; - warn "couldn't do $file: $!" unless defined $return; - warn "couldn't run $file" unless $return; - } - } -} - - -1; -__END__ - -=head1 NAME - -MultiMarkdown::Support - Perl extension to provide support routines to -MultiMarkdown utility scripts. - -=head1 SYNOPSIS - -use MultiMarkdown::Support; - -=head1 FUNCTIONS - -LocateMMD(path/to/script/that/was/running); - -=over 4 - -Returns the path to the MultiMarkdown installation to be used. It first tries -for a "common installation", and then checks the parent of the running script. - -Unless the module is properly installed, and loaded first, this routine is not -likely to be needed and should be embedded in the utility script. See -mmd2XHTML for an example. - -=back - -ProcessMMD2XHTML(Path/to/MultiMarkdown, input_filename, multimarkdown_text); - -ProcessMMD2LaTeX(Path/to/MultiMarkdown, input_filename, multimarkdown_text); - -ProcessMMD2PDF(Path/to/MultiMarkdown, input_filename, multimarkdown_text); - -ProcessMMD2PDFXeLaTeX(Path/to/MultiMarkdown, input_filename, multimarkdown_text); - -=over 4 - -These routines convert the raw MultiMarkdown text into the appropriate format. -If a filename is specified, the output is written to a file with an -appropriate extension. Otherwise, when possible, it is presented on stdout. - -=back - -=head1 DESCRIPTION - -This module contains some of the core code used by the MultiMarkdown utility -scripts (mmd2XHTML, mmd2LaTeX, etc). The idea is to try and centralize as -much of that code as possible to simplify maintaining everything else. - - -=head1 SEE ALSO - -Designed for use with MultiMarkdown. - - - -Mailing list support for MultiMarkdown: - - - - OR - - - -=head1 AUTHOR - -Fletcher T. Penney, Eowner@fletcherpenney.netE - -=head1 COPYRIGHT AND LICENSE - -Copyright (C) 2009 by Fletcher T. Penney - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the - Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA - -=cut \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/OPML2mmd.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/OPML2mmd.pl deleted file mode 100755 index 3eb06f61..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/OPML2mmd.pl +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/env perl -## -# Utility script to process OPML files back into MMD -# -# Copyright (c) 2010 Fletcher T. Penney -# -# - -# This script will process the text received via stdin, and output to stdout, -# OR -# will accept a list of files, and process each file individually. -# -# If a list of files is received, the input from "test.opml" will be output -# to "test.txt", for example. - -use strict; -use warnings; - -use File::Basename; -use Cwd; -use Cwd 'abs_path'; - - -# Determine where MMD is installed. Use a "common installation" if available. - -my $me = $0; # Where is this script located? -my $MMDPath = LocateMMD($me); - - -# Determine whether we are in "file mode" or "stdin mode" - -my $count = @ARGV; - -if ($count == 0) { - # We're in "stdin mode" - - # process stdin - undef $/; - my $data .= <>; - - MultiMarkdown::Support::ProcessOPML2MMD($MMDPath, "", $data); - -} else { - # We're in "file mode" - - foreach(@ARGV) { - # process each file individually - - # warn if directory - if ( -d $_ ) { - warn "This utility will not process directories. Please specify the files to process.\n"; - } elsif ( -f $_ ) { - # Determine filenames - my $filename = $_; - - # Read input and process - open(INPUT, "<$filename"); - local $/; - my $data = ; - close(INPUT); - - MultiMarkdown::Support::ProcessOPML2MMD($MMDPath, $filename, $data); - } else { - system("perldoc $0"); - } - } -} - -sub LocateMMD { - my $me = shift; # Where am I running from? - - my $os = $^O; # Mac = darwin; Linux = linux; Windows contains MSWin - my $MMDPath = ""; - - # Determine where MMD is installed. Use a "common installation" - # if available. - - $me = dirname($me); - - if ($os =~ /MSWin/) { - # We're running Windows - - # First check our directory to see if we're running inside MMD - - if ( -f "$me\\MultiMarkdown\\Support.pm") { - $MMDPath = "$me\\.."; - } - - # Next, look in user's home directory, then in common directories - if ($MMDPath eq "") { - if ( -d "$ENV{HOMEDRIVE}$ENV{HOMEPATH}\\MultiMarkdown") { - $MMDPath = "$ENV{HOMEDRIVE}$ENV{HOMEPATH}\\MultiMarkdown"; - } elsif ( -d "$ENV{HOMEDRIVE}\\Documents and Settings\\All Users\\MultiMarkdown") { - $MMDPath = "$ENV{HOMEDRIVE}\\Documents and Settings\\All Users\\MultiMarkdown"; - } - } - - # Load the MultiMarkdown::Support.pm module - do "$MMDPath\\bin\\MultiMarkdown\\Support.pm" if ($MMDPath ne ""); - } else { - # We're running Mac OS X or some *nix - - # First check our directory to see if we're running inside MMD - - if ( -f "$me/MultiMarkdown/Support.pm") { - $MMDPath = "$me/.."; - } - - # Next, look in user's home directory, then in common directories - if ($MMDPath eq "") { - if (defined($ENV{HOME})) { - if ( -d "$ENV{HOME}/Library/Application Support/MultiMarkdown") { - $MMDPath = "$ENV{HOME}/Library/Application Support/MultiMarkdown"; - } elsif ( -d "$ENV{HOME}/.multimarkdown") { - $MMDPath = "$ENV{HOME}/.multimarkdown"; - } - } - if ($MMDPath eq "") { - if ( -d "/Library/Application Support/MultiMarkdown") { - $MMDPath = "/Library/Application Support/MultiMarkdown"; - } elsif ( -d "/usr/share/multimarkdown") { - $MMDPath = "/usr/share/multimarkdown"; - } - } - } - } - - if ($MMDPath eq "") { - die "You do not appear to have MultiMarkdown installed.\n"; - } else { - # Load the MultiMarkdown::Support.pm module - $MMDPath = abs_path($MMDPath); - LoadModule("$MMDPath/bin/MultiMarkdown/Support.pm"); - } - - # Clean up the path - $MMDPath = abs_path($MMDPath); - - return $MMDPath; -} - -sub LoadModule { - my $file = shift; - my $os = $^O; # Mac = darwin; Linux = linux; Windows contains MSWin - - if ($os =~ /MSWin/) { - # Not sure what I can do her - } else { - unless (my $return = eval `cat "$file"`) { - warn "couldn't parse $file: $@" if $@; - warn "couldn't do $file: $!" unless defined $return; - warn "couldn't run $file" unless $return; - } - } -} - -=head1 NAME - -OPML2mmd - utility script for MultiMarkdown to convert OPML back into -MultiMarkdown text. - -=head1 SYNOPSIS - -OPML2mmd.pl [file ...] - - -=head1 DESCRIPTION - -This script is designed as a "reversal" for MultiMarkdown generated OPML -files. It can convert a series of text files from OPML back into MultiMarkdown -text files. - - -=head1 SEE ALSO - -Designed for use with MultiMarkdown. - - - -Mailing list support for MultiMarkdown: - - - - OR - - - -=head1 AUTHOR - -Fletcher T. Penney, Eowner@fletcherpenney.netE - -=head1 COPYRIGHT AND LICENSE - -Copyright (C) 2010 by Fletcher T. Penney - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the - - Free Software Foundation, Inc. - 59 Temple Place, Suite 330 - Boston, MA 02111-1307 USA - -=cut \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPants.pl b/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPants.pl deleted file mode 100755 index f22cdf45..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/MultiMarkdown/bin/SmartyPants.pl +++ /dev/null @@ -1,1175 +0,0 @@ -#!/usr/bin/perl -w - -# -# SmartyPants - A Plug-In for Movable Type, Blosxom, and BBEdit -# by John Gruber -# http://daringfireball.net -# -# See the readme or POD for details, installation instructions, and -# license information. -# -# Copyright (c) 2003-2004 John Gruber -# - -package SmartyPants; -use strict; -use vars qw($VERSION); -$VERSION = "1.5.1"; -# Fri 12 Mar 2004 - - -# Configurable variables: -my $smartypants_attr = "2"; # Blosxom and BBEdit users: change this to configure. - # 1 => "--" for em-dashes; no en-dash support - # 2 => "---" for em-dashes; "--" for en-dashes - # 3 => "--" for em-dashes; "---" for en-dashes - # See docs for more configuration options. - - -# Globals: -my $tags_to_skip = qr!<(/?)(?:pre|code|kbd|script|math|style)[\s>]!; - - -# Blosxom plug-in interface: -sub start { 1; } -sub story { - my($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_; - - $$title_ref = SmartyPants($$title_ref, $smartypants_attr, undef); - $$body_ref = SmartyPants($$body_ref, $smartypants_attr, undef); - 1; -} - - -# Movable Type plug-in interface: -eval {require MT::Template::Context}; # Test to see if we're running in MT. -unless ($@) { - require MT::Template::Context; - import MT::Template::Context; - MT::Template::Context->add_global_filter( smarty_pants => \&SmartyPants); - MT::Template::Context->add_global_filter( smart_quotes => \&SmartQuotes); - MT::Template::Context->add_global_filter( smart_dashes => \&SmartDashes); - MT::Template::Context->add_global_filter( smart_ellipses => \&SmartEllipses); - MT::Template::Context->add_tag( SmartyPantsVersion => \&SmartyPantsVersion); - - # If Markdown is loaded, add a combo Markdown/SmartyPants text filter: - my $filters = MT->all_text_filters(); - if (exists( $filters->{'markdown'} )) { - my $markdown_ref = $filters->{'markdown'}{on_format}; - if ($markdown_ref) { - MT->add_text_filter('markdown_with_smartypants' => { - label => 'Markdown With SmartyPants', - on_format => sub { - my $text = shift; - $text = &$markdown_ref($text); - $text = SmartyPants($text, $smartypants_attr); - }, - docs => 'http://daringfireball.net/projects/markdown/' - }); - } - } -} -else { - # BBEdit text filter interface; needs to be hidden from MT - # (and Blosxom when running in static mode). - - # Set up a do-nothing variable to keep Perl from warning us that - # we're only using $blosxom::version once. The right way to do this - # is to use "no warnings", but that doesn't work in Perl 5.005. - my $in_blosxom = defined($blosxom::version); - - unless ( defined($blosxom::version) ) { - #### Check for command-line switches: ########################### - my %cli_opts; - use Getopt::Long; - Getopt::Long::Configure('pass_through'); - GetOptions(\%cli_opts, - 'version', - 'shortversion', - '1', - '2', - '3', - ); - if ($cli_opts{'version'}) { # Version info - print "\nThis is Markdown, version $VERSION.\n"; - print "Copyright 2004 John Gruber\n"; - print "http://daringfireball.net/projects/markdown/\n"; - exit 0; - } - if ($cli_opts{'shortversion'}) { # Just the version number string. - print $VERSION; - exit 0; - } - if ($cli_opts{'1'}) { $smartypants_attr = 1 }; - if ($cli_opts{'2'}) { $smartypants_attr = 2 }; - if ($cli_opts{'3'}) { $smartypants_attr = 3 }; - - - #### Process incoming text: ##################################### - my $old = $/; - undef $/; # slurp the whole file - my $text = <>; - $/ = $old; - print SmartyPants($text, $smartypants_attr, undef); - } -} - - -sub SmartyPants { - # Paramaters: - my $text = shift; # text to be parsed - my $attr = shift; # value of the smart_quotes="" attribute - my $ctx = shift; # MT context object (unused) - - # Options to specify which transformations to make: - my ($do_quotes, $do_backticks, $do_dashes, $do_ellipses, $do_stupefy); - my $convert_quot = 0; # should we translate " entities into normal quotes? - - # Parse attributes: - # 0 : do nothing - # 1 : set all - # 2 : set all, using old school en- and em- dash shortcuts - # 3 : set all, using inverted old school en and em- dash shortcuts - # - # q : quotes - # b : backtick quotes (``double'' only) - # B : backtick quotes (``double'' and `single') - # d : dashes - # D : old school dashes - # i : inverted old school dashes - # e : ellipses - # w : convert " entities to " for Dreamweaver users - - if ($attr eq "0") { - # Do nothing. - return $text; - } - elsif ($attr eq "1") { - # Do everything, turn all options on. - $do_quotes = 1; - $do_backticks = 1; - $do_dashes = 1; - $do_ellipses = 1; - } - elsif ($attr eq "2") { - # Do everything, turn all options on, use old school dash shorthand. - $do_quotes = 1; - $do_backticks = 1; - $do_dashes = 2; - $do_ellipses = 1; - } - elsif ($attr eq "3") { - # Do everything, turn all options on, use inverted old school dash shorthand. - $do_quotes = 1; - $do_backticks = 1; - $do_dashes = 3; - $do_ellipses = 1; - } - elsif ($attr eq "-1") { - # Special "stupefy" mode. - $do_stupefy = 1; - } - else { - my @chars = split(//, $attr); - foreach my $c (@chars) { - if ($c eq "q") { $do_quotes = 1; } - elsif ($c eq "b") { $do_backticks = 1; } - elsif ($c eq "B") { $do_backticks = 2; } - elsif ($c eq "d") { $do_dashes = 1; } - elsif ($c eq "D") { $do_dashes = 2; } - elsif ($c eq "i") { $do_dashes = 3; } - elsif ($c eq "e") { $do_ellipses = 1; } - elsif ($c eq "w") { $convert_quot = 1; } - else { - # Unknown attribute option, ignore. - } - } - } - - my $tokens ||= _tokenize($text); - my $result = ''; - my $in_pre = 0; # Keep track of when we're inside
     or  tags.
    -
    -    my $prev_token_last_char = "";  # This is a cheat, used to get some context
    -                                    # for one-character tokens that consist of 
    -                                    # just a quote char. What we do is remember
    -                                    # the last character of the previous text
    -                                    # token, to use as context to curl single-
    -                                    # character quote tokens correctly.
    -
    -    foreach my $cur_token (@$tokens) {
    -        if ($cur_token->[0] eq "tag") {
    -            # Don't mess with quotes inside tags.
    -            $result .= $cur_token->[1];
    -            if ($cur_token->[1] =~ m/$tags_to_skip/) {
    -                $in_pre = defined $1 && $1 eq '/' ? 0 : 1;
    -            }
    -        } else {
    -            my $t = $cur_token->[1];
    -            my $last_char = substr($t, -1); # Remember last char of this token before processing.
    -            if (! $in_pre) {
    -                $t = ProcessEscapes($t);
    -
    -                if ($convert_quot) {
    -                    $t =~ s/"/"/g;
    -                }
    -
    -                if ($do_dashes) {
    -                    $t = EducateDashes($t)                  if ($do_dashes == 1);
    -                    $t = EducateDashesOldSchool($t)         if ($do_dashes == 2);
    -                    $t = EducateDashesOldSchoolInverted($t) if ($do_dashes == 3);
    -                }
    -
    -                $t = EducateEllipses($t) if $do_ellipses;
    -
    -                # Note: backticks need to be processed before quotes.
    -                if ($do_backticks) {
    -                    $t = EducateBackticks($t);
    -                    $t = EducateSingleBackticks($t) if ($do_backticks == 2);
    -                }
    -
    -                if ($do_quotes) {
    -                    if ($t eq q/'/) {
    -                        # Special case: single-character ' token
    -                        if ($prev_token_last_char =~ m/\S/) {
    -                            $t = "’";
    -                        }
    -                        else {
    -                            $t = "‘";
    -                        }
    -                    }
    -                    elsif ($t eq q/"/) {
    -                        # Special case: single-character " token
    -                        if ($prev_token_last_char =~ m/\S/) {
    -                            $t = "”";
    -                        }
    -                        else {
    -                            $t = "“";
    -                        }
    -                    }
    -                    else {
    -                        # Normal case:                  
    -                        $t = EducateQuotes($t);
    -                    }
    -                }
    -
    -                $t = StupefyEntities($t) if $do_stupefy;
    -            }
    -            $prev_token_last_char = $last_char;
    -            $result .= $t;
    -        }
    -    }
    -
    -    return $result;
    -}
    -
    -
    -sub SmartQuotes {
    -    # Paramaters:
    -    my $text = shift;   # text to be parsed
    -    my $attr = shift;   # value of the smart_quotes="" attribute
    -    my $ctx  = shift;   # MT context object (unused)
    -
    -    my $do_backticks;   # should we educate ``backticks'' -style quotes?
    -
    -    if ($attr == 0) {
    -        # do nothing;
    -        return $text;
    -    }
    -    elsif ($attr == 2) {
    -        # smarten ``backticks'' -style quotes
    -        $do_backticks = 1;
    -    }
    -    else {
    -        $do_backticks = 0;
    -    }
    -
    -    # Special case to handle quotes at the very end of $text when preceded by
    -    # an HTML tag. Add a space to give the quote education algorithm a bit of
    -    # context, so that it can guess correctly that it's a closing quote:
    -    my $add_extra_space = 0;
    -    if ($text =~ m/>['"]\z/) {
    -        $add_extra_space = 1; # Remember, so we can trim the extra space later.
    -        $text .= " ";
    -    }
    -
    -    my $tokens ||= _tokenize($text);
    -    my $result = '';
    -    my $in_pre = 0;  # Keep track of when we're inside 
     or  tags
    -
    -    my $prev_token_last_char = "";  # This is a cheat, used to get some context
    -                                    # for one-character tokens that consist of 
    -                                    # just a quote char. What we do is remember
    -                                    # the last character of the previous text
    -                                    # token, to use as context to curl single-
    -                                    # character quote tokens correctly.
    -
    -    foreach my $cur_token (@$tokens) {
    -        if ($cur_token->[0] eq "tag") {
    -            # Don't mess with quotes inside tags
    -            $result .= $cur_token->[1];
    -            if ($cur_token->[1] =~ m/$tags_to_skip/) {
    -                $in_pre = defined $1 && $1 eq '/' ? 0 : 1;
    -            }
    -        } else {
    -            my $t = $cur_token->[1];
    -            my $last_char = substr($t, -1); # Remember last char of this token before processing.
    -            if (! $in_pre) {
    -                $t = ProcessEscapes($t);
    -                if ($do_backticks) {
    -                    $t = EducateBackticks($t);
    -                }
    -
    -                if ($t eq q/'/) {
    -                    # Special case: single-character ' token
    -                    if ($prev_token_last_char =~ m/\S/) {
    -                        $t = "’";
    -                    }
    -                    else {
    -                        $t = "‘";
    -                    }
    -                }
    -                elsif ($t eq q/"/) {
    -                    # Special case: single-character " token
    -                    if ($prev_token_last_char =~ m/\S/) {
    -                        $t = "”";
    -                    }
    -                    else {
    -                        $t = "“";
    -                    }
    -                }
    -                else {
    -                    # Normal case:                  
    -                    $t = EducateQuotes($t);
    -                }
    -
    -            }
    -            $prev_token_last_char = $last_char;
    -            $result .= $t;
    -        }
    -    }
    -
    -    if ($add_extra_space) {
    -        $result =~ s/ \z//;  # Trim trailing space if we added one earlier.
    -    }
    -    return $result;
    -}
    -
    -
    -sub SmartDashes {
    -    # Paramaters:
    -    my $text = shift;   # text to be parsed
    -    my $attr = shift;   # value of the smart_dashes="" attribute
    -    my $ctx  = shift;   # MT context object (unused)
    -
    -    # reference to the subroutine to use for dash education, default to EducateDashes:
    -    my $dash_sub_ref = \&EducateDashes;
    -
    -    if ($attr == 0) {
    -        # do nothing;
    -        return $text;
    -    }
    -    elsif ($attr == 2) {
    -        # use old smart dash shortcuts, "--" for en, "---" for em
    -        $dash_sub_ref = \&EducateDashesOldSchool; 
    -    }
    -    elsif ($attr == 3) {
    -        # inverse of 2, "--" for em, "---" for en
    -        $dash_sub_ref = \&EducateDashesOldSchoolInverted; 
    -    }
    -
    -    my $tokens;
    -    $tokens ||= _tokenize($text);
    -
    -    my $result = '';
    -    my $in_pre = 0;  # Keep track of when we're inside 
     or  tags
    -    foreach my $cur_token (@$tokens) {
    -        if ($cur_token->[0] eq "tag") {
    -            # Don't mess with quotes inside tags
    -            $result .= $cur_token->[1];
    -            if ($cur_token->[1] =~ m/$tags_to_skip/) {
    -                $in_pre = defined $1 && $1 eq '/' ? 0 : 1;
    -            }
    -        } else {
    -            my $t = $cur_token->[1];
    -            if (! $in_pre) {
    -                $t = ProcessEscapes($t);
    -                $t = $dash_sub_ref->($t);
    -            }
    -            $result .= $t;
    -        }
    -    }
    -    return $result;
    -}
    -
    -
    -sub SmartEllipses {
    -    # Paramaters:
    -    my $text = shift;   # text to be parsed
    -    my $attr = shift;   # value of the smart_ellipses="" attribute
    -    my $ctx  = shift;   # MT context object (unused)
    -
    -    if ($attr == 0) {
    -        # do nothing;
    -        return $text;
    -    }
    -
    -    my $tokens;
    -    $tokens ||= _tokenize($text);
    -
    -    my $result = '';
    -    my $in_pre = 0;  # Keep track of when we're inside 
     or  tags
    -    foreach my $cur_token (@$tokens) {
    -        if ($cur_token->[0] eq "tag") {
    -            # Don't mess with quotes inside tags
    -            $result .= $cur_token->[1];
    -            if ($cur_token->[1] =~ m/$tags_to_skip/) {
    -                $in_pre = defined $1 && $1 eq '/' ? 0 : 1;
    -            }
    -        } else {
    -            my $t = $cur_token->[1];
    -            if (! $in_pre) {
    -                $t = ProcessEscapes($t);
    -                $t = EducateEllipses($t);
    -            }
    -            $result .= $t;
    -        }
    -    }
    -    return $result;
    -}
    -
    -
    -sub EducateQuotes {
    -#
    -#   Parameter:  String.
    -#
    -#   Returns:    The string, with "educated" curly quote HTML entities.
    -#
    -#   Example input:  "Isn't this fun?"
    -#   Example output: “Isn’t this fun?”
    -#
    -
    -    local $_ = shift;
    -
    -    # Tell perl not to gripe when we use $1 in substitutions,
    -    # even when it's undefined. Use $^W instead of "no warnings"
    -    # for compatibility with Perl 5.005:
    -    local $^W = 0;
    -
    -
    -    # Make our own "punctuation" character class, because the POSIX-style
    -    # [:PUNCT:] is only available in Perl 5.6 or later:
    -    my $punct_class = qr/[!"#\$\%'()*+,-.\/:;<=>?\@\[\\\]\^_`{|}~]/;
    -
    -    # Special case if the very first character is a quote
    -    # followed by punctuation at a non-word-break. Close the quotes by brute force:
    -    s/^'(?=$punct_class\B)/’/;
    -    s/^"(?=$punct_class\B)/”/;
    -
    -
    -    # Special case for double sets of quotes, e.g.:
    -    #   

    He said, "'Quoted' words in a larger quote."

    - s/"'(?=\w)/“‘/g; - s/'"(?=\w)/‘“/g; - - # Special case for decade abbreviations (the '80s): - s/'(?=\d{2}s)/’/g; - - my $close_class = qr![^\ \t\r\n\[\{\(\-]!; - my $dec_dashes = qr/–|—/; - - # Get most opening single quotes: - s { - ( - \s | # a whitespace char, or -   | # a non-breaking space entity, or - -- | # dashes, or - &[mn]dash; | # named dash entities - $dec_dashes | # or decimal entities - &\#x201[34]; # or hex - ) - ' # the quote - (?=\w) # followed by a word character - } {$1‘}xg; - # Single closing quotes: - s { - ($close_class)? - ' - (?(1)| # If $1 captured, then do nothing; - (?=\s | s\b) # otherwise, positive lookahead for a whitespace - ) # char or an 's' at a word ending position. This - # is a special case to handle something like: - # "Custer's Last Stand." - } {$1’}xgi; - - # Any remaining single quotes should be opening ones: - s/'/‘/g; - - - # Get most opening double quotes: - s { - ( - \s | # a whitespace char, or -   | # a non-breaking space entity, or - -- | # dashes, or - &[mn]dash; | # named dash entities - $dec_dashes | # or decimal entities - &\#x201[34]; # or hex - ) - " # the quote - (?=\w) # followed by a word character - } {$1“}xg; - - # Double closing quotes: - s { - ($close_class)? - " - (?(1)|(?=\s)) # If $1 captured, then do nothing; - # if not, then make sure the next char is whitespace. - } {$1”}xg; - - # Any remaining quotes should be opening ones. - s/"/“/g; - - return $_; -} - - -sub EducateBackticks { -# -# Parameter: String. -# Returns: The string, with ``backticks'' -style double quotes -# translated into HTML curly quote entities. -# -# Example input: ``Isn't this fun?'' -# Example output: “Isn't this fun?” -# - - local $_ = shift; - s/``/“/g; - s/''/”/g; - return $_; -} - - -sub EducateSingleBackticks { -# -# Parameter: String. -# Returns: The string, with `backticks' -style single quotes -# translated into HTML curly quote entities. -# -# Example input: `Isn't this fun?' -# Example output: ‘Isn’t this fun?’ -# - - local $_ = shift; - s/`/‘/g; - s/'/’/g; - return $_; -} - - -sub EducateDashes { -# -# Parameter: String. -# -# Returns: The string, with each instance of "--" translated to -# an em-dash HTML entity. -# - - local $_ = shift; - s/--/—/g; - return $_; -} - - -sub EducateDashesOldSchool { -# -# Parameter: String. -# -# Returns: The string, with each instance of "--" translated to -# an en-dash HTML entity, and each "---" translated to -# an em-dash HTML entity. -# - - local $_ = shift; - s/---/—/g; # em - s/--/–/g; # en - return $_; -} - - -sub EducateDashesOldSchoolInverted { -# -# Parameter: String. -# -# Returns: The string, with each instance of "--" translated to -# an em-dash HTML entity, and each "---" translated to -# an en-dash HTML entity. Two reasons why: First, unlike the -# en- and em-dash syntax supported by -# EducateDashesOldSchool(), it's compatible with existing -# entries written before SmartyPants 1.1, back when "--" was -# only used for em-dashes. Second, em-dashes are more -# common than en-dashes, and so it sort of makes sense that -# the shortcut should be shorter to type. (Thanks to Aaron -# Swartz for the idea.) -# - - local $_ = shift; - s/---/–/g; # en - s/--/—/g; # em - return $_; -} - - -sub EducateEllipses { -# -# Parameter: String. -# Returns: The string, with each instance of "..." translated to -# an ellipsis HTML entity. Also converts the case where -# there are spaces between the dots. -# -# Example input: Huh...? -# Example output: Huh…? -# - - local $_ = shift; - s/\.\.\./…/g; - s/\. \. \./…/g; - return $_; -} - - -sub StupefyEntities { -# -# Parameter: String. -# Returns: The string, with each SmartyPants HTML entity translated to -# its ASCII counterpart. -# -# Example input: “Hello — world.” -# Example output: "Hello -- world." -# - - local $_ = shift; - - s/–/-/g; # en-dash - s/—/--/g; # em-dash - - s/‘/'/g; # open single quote - s/’/'/g; # close single quote - - s/“/"/g; # open double quote - s/”/"/g; # close double quote - - s/…/.../g; # ellipsis - - return $_; -} - - -sub SmartyPantsVersion { - return $VERSION; -} - - -sub ProcessEscapes { -# -# Parameter: String. -# Returns: The string, with after processing the following backslash -# escape sequences. This is useful if you want to force a "dumb" -# quote or other character to appear. -# -# Escape Value -# ------ ----- -# \\ \ -# \" " -# \' ' -# \. . -# \- - -# \` ` -# - local $_ = shift; - - s! \\\\ !\!gx; - s! \\" !"!gx; - s! \\' !'!gx; - s! \\\. !.!gx; - s! \\- !-!gx; - s! \\` !`!gx; - - return $_; -} - - -sub _tokenize { -# -# Parameter: String containing HTML markup. -# Returns: Reference to an array of the tokens comprising the input -# string. Each token is either a tag (possibly with nested, -# tags contained therein, such as , or a -# run of text between tags. Each element of the array is a -# two-element array; the first is either 'tag' or 'text'; -# the second is the actual value. -# -# -# Based on the _tokenize() subroutine from Brad Choate's MTRegex plugin. -# -# - - my $str = shift; - my $pos = 0; - my $len = length $str; - my @tokens; - - my $depth = 6; - my $nested_tags = join('|', ('(?:<(?:[^<>]') x $depth) . (')*>)' x $depth); - my $match = qr/(?s: ) | # comment - (?s: <\? .*? \?> ) | # processing instruction - $nested_tags/x; # nested tags - - while ($str =~ m/($match)/g) { - my $whole_tag = $1; - my $sec_start = pos $str; - my $tag_start = $sec_start - length $whole_tag; - if ($pos < $tag_start) { - push @tokens, ['text', substr($str, $pos, $tag_start - $pos)]; - } - push @tokens, ['tag', $whole_tag]; - $pos = pos $str; - } - push @tokens, ['text', substr($str, $pos, $len - $pos)] if $pos < $len; - \@tokens; -} - - -1; -__END__ - - -=pod - -=head1 NAME - -B - - -=head1 SYNOPSIS - -B [ B<-1> ] [ B<-2> ] [ B<-3> ] [ B<--version> ] [ B<--shortversion> ] - [ I ... ] - - -=head1 DESCRIPTION - -SmartyPants is a web publishing utility that translates plain ASCII -punctuation characters into "smart" typographic punctuation HTML -entities. SmartyPants can perform the following transformations: - -=over 4 - -=item * - -Straight quotes ( " and ' ) into "curly" quote HTML entities - -=item * - -Backticks-style quotes (``like this'') into "curly" quote HTML entities - -=item * - -Dashes (C<--> and C<--->) into en- and em-dash entities - -=item * - -Three consecutive dots (C<...>) into an ellipsis entity - -=back - -SmartyPants is a combination plug-in -- the same file works with Movable -Type, Blosxom, BBEdit, and as a standalone Perl script. Version -requirements and installation instructions for each of these tools can -be found in the readme file that accompanies this script. - -SmartyPants does not modify characters within C<<
     >>, C<<  >>,
    -C<<  >>, C<< 

    4!+=`X)GyOO8?TU`<%#Czp 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 J|G%Rp{{st>c)S1r diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/PTKeyComboPanel.nib b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/PTKeyComboPanel.nib deleted file mode 100644 index 92ea1d5591b50f7bcb69236edd9d8acb3a0130c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8979 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 diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Raccourcis incroyablement utiles.nvhelp b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Raccourcis incroyablement utiles.nvhelp deleted file mode 100755 index 6b8daabc..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/Raccourcis incroyablement utiles.nvhelp +++ /dev/null @@ -1,74 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf540 -\readonlydoc1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9160\viewh10600\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\f0\fs24 \cf0 \CocoaLigature0 Du plus utile au moins utile :\ -\ - -\f1 \uc0\u8984 -\f0 L Place le curseur dans la zone de Recherche/Cr\'e9ation de notes\ -Echap. Efface la recherche active\ -Retour Commencer \'e0 \'e9diter la note, la cr\'e9er si n\'e9cessaire\ -Tab D\'e9place le curseur entre les zones de texte\ - -\f1 \uc0\u8984 -\f0 K S\'e9lectionne la note pr\'e9c\'e9dente dans la liste\ - -\f1 \uc0\u8984 -\f0 J S\'e9lectionne la note suivante dans la liste\ - -\f1 \uc0\u8984 -\f0 D D\'e9selectionne la note active, restaure la zone de recherche\ - -\f1 \uc0\u8984 -\f0 Maj V Colle le contenu du presse-papier dans une nouvelle note\ - -\f1 \uc0\u8984 -\f0 R Renomme la note s\'e9lectionn\'e9e\ - -\f1 \uc0\u8984 -\f0 Suppr Supprime la ou les note(s) s\'e9lectionn\'e9e(s)\ - -\f1 \uc0\u8984 -\f0 G Occurrence suivante du texte recherch\'e9\ - -\f1 \uc0\u8984 -\f0 Maj G Occurrence pr\'e9c\'e9dente du texte recherch\'e9\ - -\f1 \uc0\u8984 -\f0 Maj D Ajouter la note s\'e9lectionn\'e9e aux signets\ - -\f1 \uc0\u8984 -\f0 P Imprimer la/les note(s)\ - -\f1 \uc0\u8984 -\f0 E Exporter la/les note(s) s\'e9lectionn\'e9e(s) dans d'autres formats\ -\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\i \cf0 Raccourcis pour la mise en forme du texte : -\i0 \ -\ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural - -\f1 \cf0 \uc0\u8984 -\f0 [ (left square bracket) D\'e9cale vers la droite une ou plusieurs lignes\ - -\f1 \uc0\u8984 -\f0 ] (right square bracket) D\'e9cale vers la gauche une ou plusieurs lignes\ -Option Tab Indente la ligne\ - -\f1 \uc0\u8984 -\f0 T Convertir en texte brut (supprime les styles)\ - -\f1 \uc0\u8984 -\f0 B Mettre en gras\ - -\f1 \uc0\u8984 -\f0 I Mettre en italiques\ - -\f1 \uc0\u8984 -\f0 U Souligner\ -} \ No newline at end of file diff --git a/build/Deployment/nvALT.app/Contents/Resources/French.lproj/URLGetter.nib b/build/Deployment/nvALT.app/Contents/Resources/French.lproj/URLGetter.nib deleted file mode 100644 index 5f6cb91695fd2aaef8c99e92e800c5be8f41fe62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5174 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 HRT};uX?5~s diff --git a/build/Deployment/nvALT.app/Contents/Resources/General.tiff b/build/Deployment/nvALT.app/Contents/Resources/General.tiff deleted file mode 100644 index fa025c612825d8f04c4e12f8feab34fd3eee05f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4334 zcmcha$xGx%6vw+~l0gy(&V(p&8WV#XLgqTxIVOjJFaZff+&2{UBKZpx^e6-ra}Yhm z!>mazil7h`A&2O}ec$(e-z)D^(C?Hhlhu%tgKACnwgnVp_reaSN0s% zdwhKC!)^2r4i0Xmzp${N^-D`j)#>S}wu#5)Hv0Sf`(f!97Z)q$I&qi!X8#Kd3)SA< zo+IJvPft&)P|VHE>Afx}C{Q~)JC1~_KRG$6Lc#guU8BFXwdF{-`rN_s@$sNcO-*Ti za>d5Rh9lwXqdhh@78Le}_2=c~skOB=NBs4ZlaqD+B{$nJ&OZNWkB*K8g&4WBxw*M& zWo0FR)zwwp`s5#@PmTmT2F|d_Ki8cnyPxss=j7z5rKP0+mY0_U^pld3-qJ~)1QQ3f zt$*Epvis47?CfksF7jt_aWOzYF)>l=lds5^U}D+b-Mw1B@g1z@-Sa#vD@$<~{UJY4 z?EIgQkf8NVp60v4#KPW^ODT2^z0N*5I@0=?nVF8?6|=Lm+Lx^#A0PjQPR<&!=HMeEBSUc){ULu*Z2h>nIIX|Ey{+?=IYX?4J6uvyqUW$Dq2S%2pPrts zzq831Hr!8t{n*&p*YwHnBCW@odGG88cbHs8F=rxFZSR($XCB1UZCa>&L{zyrPfX&3Ppb@&xwa;Glm0jg5^u z2I2@sU0t0jFE3Za!@~iLjEo@VqaPg|{gOWRi}Qjm_0Z6e8W(y#XoUEsG|XJ@BsXlT&CK`SdORWPcnt5s7|lj`p7*7J=YYJ9Vw z{`yf-QF{I68Jae|y}deywzf9a+S(cv#&mUcDdyNduqnhrG3$SCy6WZ5op9Iu=X~fk z=i2`N!>gZKR8;i0JUb$`yDVr(ZtRft>;J!`{z!Nr{3QG)ycAvuuZ1_lTj8DXhw!KH zR|puxSmrPnANay2zR^JIV*%|?h0g_#kRUt}o(j)|?}Zn_&qA(HB9sfiTm#P-!&v4p z7az|Ae10p$3y+0I0@}pD`XjvU&!m1R5L1-!r9f<73Ev3JCr&4L#u&yjhq?H`7e4Wg zCR*>;AL(|v?n}$<`da?DE&HCfCA!Fe-S@ryGT8mVYu^+5p^jd9T@mg_)|fB6w#;@% zd2RehoAHq@cZ`le=0*;>A79y%Zja?B*=wWq!m@wVHnA;=HtW%!@5Ce+Q%ggC{sZ`t Biq8N5 diff --git a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/License.text b/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/License.text deleted file mode 100755 index 6d765065..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/License.text +++ /dev/null @@ -1,30 +0,0 @@ -Copyright (c) 2004, John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown Readme.text b/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown Readme.text deleted file mode 100755 index 6fbb95fd..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown Readme.text +++ /dev/null @@ -1,341 +0,0 @@ -Markdown -======== - -Version 1.0.1 - Tue 14 Dec 2004 - -by John Gruber - - - -Introduction ------------- - -Markdown is a text-to-HTML conversion tool for web writers. Markdown -allows you to write using an easy-to-read, easy-to-write plain text -format, then convert it to structurally valid XHTML (or HTML). - -Thus, "Markdown" is two things: a plain text markup syntax, and a -software tool, written in Perl, that converts the plain text markup -to HTML. - -Markdown works both as a Movable Type plug-in and as a standalone Perl -script -- which means it can also be used as a text filter in BBEdit -(or any other application that supporst filters written in Perl). - -Full documentation of Markdown's syntax and configuration options is -available on the web: . -(Note: this readme file is formatted in Markdown.) - - - -Installation and Requirements ------------------------------ - -Markdown requires Perl 5.6.0 or later. Welcome to the 21st Century. -Markdown also requires the standard Perl library module `Digest::MD5`. - - -### Movable Type ### - -Markdown works with Movable Type version 2.6 or later (including -MT 3.0 or later). - -1. Copy the "Markdown.pl" file into your Movable Type "plugins" - directory. The "plugins" directory should be in the same directory - as "mt.cgi"; if the "plugins" directory doesn't already exist, use - your FTP program to create it. Your installation should look like - this: - - (mt home)/plugins/Markdown.pl - -2. Once installed, Markdown will appear as an option in Movable Type's - Text Formatting pop-up menu. This is selectable on a per-post basis. - Markdown translates your posts to HTML when you publish; the posts - themselves are stored in your MT database in Markdown format. - -3. If you also install SmartyPants 1.5 (or later), Markdown will offer - a second text formatting option: "Markdown with SmartyPants". This - option is the same as the regular "Markdown" formatter, except that - automatically uses SmartyPants to create typographically correct - curly quotes, em-dashes, and ellipses. See the SmartyPants web page - for more information: - -4. To make Markdown (or "Markdown with SmartyPants") your default - text formatting option for new posts, go to Weblog Config -> - Preferences. - -Note that by default, Markdown produces XHTML output. To configure -Markdown to produce HTML 4 output, see "Configuration", below. - - -### Blosxom ### - -Markdown works with Blosxom version 2.x. - -1. Rename the "Markdown.pl" plug-in to "Markdown" (case is - important). Movable Type requires plug-ins to have a ".pl" - extension; Blosxom forbids it. - -2. Copy the "Markdown" plug-in file to your Blosxom plug-ins folder. - If you're not sure where your Blosxom plug-ins folder is, see the - Blosxom documentation for information. - -3. That's it. The entries in your weblog will now automatically be - processed by Markdown. - -4. If you'd like to apply Markdown formatting only to certain posts, - rather than all of them, see Jason Clark's instructions for using - Markdown in conjunction with Blosxom's Meta plugin: - - - - -### BBEdit ### - -Markdown works with BBEdit 6.1 or later on Mac OS X. (It also works -with BBEdit 5.1 or later and MacPerl 5.6.1 on Mac OS 8.6 or later.) - -1. Copy the "Markdown.pl" file to appropriate filters folder in your - "BBEdit Support" folder. On Mac OS X, this should be: - - BBEdit Support/Unix Support/Unix Filters/ - - See the BBEdit documentation for more details on the location of - these folders. - - You can rename "Markdown.pl" to whatever you wish. - -2. That's it. To use Markdown, select some text in a BBEdit document, - then choose Markdown from the Filters sub-menu in the "#!" menu, or - the Filters floating palette - - - -Configuration -------------- - -By default, Markdown produces XHTML output for tags with empty elements. -E.g.: - -
    - -Markdown can be configured to produce HTML-style tags; e.g.: - -
    - - -### Movable Type ### - -You need to use a special `MTMarkdownOptions` container tag in each -Movable Type template where you want HTML 4-style output: - - - ... put your entry content here ... - - -The easiest way to use MTMarkdownOptions is probably to put the -opening tag right after your `` tag, and the closing tag right -before ``. - -To suppress Markdown processing in a particular template, i.e. to -publish the raw Markdown-formatted text without translation into -(X)HTML, set the `output` attribute to 'raw': - - - ... put your entry content here ... - - - -### Command-Line ### - -Use the `--html4tags` command-line switch to produce HTML output from a -Unix-style command line. E.g.: - - % perl Markdown.pl --html4tags foo.text - -Type `perldoc Markdown.pl`, or read the POD documentation within the -Markdown.pl source code for more information. - - - -Bugs ----- - -To file bug reports or feature requests please send email to: -. - - - -Version History ---------------- - -1.0.1 (14 Dec 2004): - -+ Changed the syntax rules for code blocks and spans. Previously, - backslash escapes for special Markdown characters were processed - everywhere other than within inline HTML tags. Now, the contents - of code blocks and spans are no longer processed for backslash - escapes. This means that code blocks and spans are now treated - literally, with no special rules to worry about regarding - backslashes. - - **NOTE**: This changes the syntax from all previous versions of - Markdown. Code blocks and spans involving backslash characters - will now generate different output than before. - -+ Tweaked the rules for link definitions so that they must occur - within three spaces of the left margin. Thus if you indent a link - definition by four spaces or a tab, it will now be a code block. - - [a]: /url/ "Indented 3 spaces, this is a link def" - - [b]: /url/ "Indented 4 spaces, this is a code block" - - **IMPORTANT**: This may affect existing Markdown content if it - contains link definitions indented by 4 or more spaces. - -+ Added `>`, `+`, and `-` to the list of backslash-escapable - characters. These should have been done when these characters - were added as unordered list item markers. - -+ Trailing spaces and tabs following HTML comments and `
    ` tags - are now ignored. - -+ Inline links using `<` and `>` URL delimiters weren't working: - - like [this]() - -+ Added a bit of tolerance for trailing spaces and tabs after - Markdown hr's. - -+ Fixed bug where auto-links were being processed within code spans: - - like this: `` - -+ Sort-of fixed a bug where lines in the middle of hard-wrapped - paragraphs, which lines look like the start of a list item, - would accidentally trigger the creation of a list. E.g. a - paragraph that looked like this: - - I recommend upgrading to version - 8. Oops, now this line is treated - as a sub-list. - - This is fixed for top-level lists, but it can still happen for - sub-lists. E.g., the following list item will not be parsed - properly: - - + I recommend upgrading to version - 8. Oops, now this line is treated - as a sub-list. - - Given Markdown's list-creation rules, I'm not sure this can - be fixed. - -+ Standalone HTML comments are now handled; previously, they'd get - wrapped in a spurious `

    ` tag. - -+ Fix for horizontal rules preceded by 2 or 3 spaces. - -+ `


    ` HTML tags in must occur within three spaces of left - margin. (With 4 spaces or a tab, they should be code blocks, but - weren't before this fix.) - -+ Capitalized "With" in "Markdown With SmartyPants" for - consistency with the same string label in SmartyPants.pl. - (This fix is specific to the MT plug-in interface.) - -+ Auto-linked email address can now optionally contain - a 'mailto:' protocol. I.e. these are equivalent: - - - - -+ Fixed annoying bug where nested lists would wind up with - spurious (and invalid) `

    ` tags. - -+ You can now write empty links: - - [like this]() - - and they'll be turned into anchor tags with empty href attributes. - This should have worked before, but didn't. - -+ `***this***` and `___this___` are now turned into - - this - - Instead of - - this - - which isn't valid. (Thanks to Michel Fortin for the fix.) - -+ Added a new substitution in `_EncodeCode()`: s/\$/$/g; This - is only for the benefit of Blosxom users, because Blosxom - (sometimes?) interpolates Perl scalars in your article bodies. - -+ Fixed problem for links defined with urls that include parens, e.g.: - - [1]: http://sources.wikipedia.org/wiki/Middle_East_Policy_(Chomsky) - - "Chomsky" was being erroneously treated as the URL's title. - -+ At some point during 1.0's beta cycle, I changed every sub's - argument fetching from this idiom: - - my $text = shift; - - to: - - my $text = shift || return ''; - - The idea was to keep Markdown from doing any work in a sub - if the input was empty. This introduced a bug, though: - if the input to any function was the single-character string - "0", it would also evaluate as false and return immediately. - How silly. Now fixed. - - - -Donations ---------- - -Donations to support Markdown's development are happily accepted. See: - for details. - - - -Copyright and License ---------------------- - -Copyright (c) 2003-2004 John Gruber - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* Neither the name "Markdown" nor the names of its contributors may - be used to endorse or promote products derived from this software - without specific prior written permission. - -This software is provided by the copyright holders and contributors "as -is" and any express or implied warranties, including, but not limited -to, the implied warranties of merchantability and fitness for a -particular purpose are disclaimed. In no event shall the copyright owner -or contributors be liable for any direct, indirect, incidental, special, -exemplary, or consequential damages (including, but not limited to, -procurement of substitute goods or services; loss of use, data, or -profits; or business interruption) however caused and on any theory of -liability, whether in contract, strict liability, or tort (including -negligence or otherwise) arising in any way out of the use of this -software, even if advised of the possibility of such damage. diff --git a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown.pl b/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown.pl deleted file mode 100755 index e4c8469d..00000000 --- a/build/Deployment/nvALT.app/Contents/Resources/Markdown_1.0.1/Markdown.pl +++ /dev/null @@ -1,1450 +0,0 @@ -#!/usr/bin/perl - -# -# Markdown -- A text-to-HTML conversion tool for web writers -# -# Copyright (c) 2004 John Gruber -# -# - - -package Markdown; -require 5.006_000; -use strict; -use warnings; - -use Digest::MD5 qw(md5_hex); -use vars qw($VERSION); -$VERSION = '1.0.1'; -# Tue 14 Dec 2004 - -## Disabled; causes problems under Perl 5.6.1: -# use utf8; -# binmode( STDOUT, ":utf8" ); # c.f.: http://acis.openlib.org/dev/perl-unicode-struggle.html - - -# -# Global default settings: -# -my $g_empty_element_suffix = " />"; # Change to ">" for HTML output -my $g_tab_width = 4; - - -# -# Globals: -# - -# Regex to match balanced [brackets]. See Friedl's -# "Mastering Regular Expressions", 2nd Ed., pp. 328-331. -my $g_nested_brackets; -$g_nested_brackets = qr{ - (?> # Atomic matching - [^\[\]]+ # Anything other than brackets - | - \[ - (??{ $g_nested_brackets }) # Recursive set of nested brackets - \] - )* -}x; - - -# Table of hash values for escaped characters: -my %g_escape_table; -foreach my $char (split //, '\\`*_{}[]()>#+-.!') { - $g_escape_table{$char} = md5_hex($char); -} - - -# Global hashes, used by various utility routines -my %g_urls; -my %g_titles; -my %g_html_blocks; - -# Used to track when we're inside an ordered or unordered list -# (see _ProcessListItems() for details): -my $g_list_level = 0; - - -#### Blosxom plug-in interface ########################################## - -# Set $g_blosxom_use_meta to 1 to use Blosxom's meta plug-in to determine -# which posts Markdown should process, using a "meta-markup: markdown" -# header. If it's set to 0 (the default), Markdown will process all -# entries. -my $g_blosxom_use_meta = 0; - -sub start { 1; } -sub story { - my($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_; - - if ( (! $g_blosxom_use_meta) or - (defined($meta::markup) and ($meta::markup =~ /^\s*markdown\s*$/i)) - ){ - $$body_ref = Markdown($$body_ref); - } - 1; -} - - -#### Movable Type plug-in interface ##################################### -eval {require MT}; # Test to see if we're running in MT. -unless ($@) { - require MT; - import MT; - require MT::Template::Context; - import MT::Template::Context; - - eval {require MT::Plugin}; # Test to see if we're running >= MT 3.0. - unless ($@) { - require MT::Plugin; - import MT::Plugin; - my $plugin = new MT::Plugin({ - name => "Markdown", - description => "A plain-text-to-HTML formatting plugin. (Version: $VERSION)", - doc_link => 'http://daringfireball.net/projects/markdown/' - }); - MT->add_plugin( $plugin ); - } - - MT::Template::Context->add_container_tag(MarkdownOptions => sub { - my $ctx = shift; - my $args = shift; - my $builder = $ctx->stash('builder'); - my $tokens = $ctx->stash('tokens'); - - if (defined ($args->{'output'}) ) { - $ctx->stash('markdown_output', lc $args->{'output'}); - } - - defined (my $str = $builder->build($ctx, $tokens) ) - or return $ctx->error($builder->errstr); - $str; # return value - }); - - MT->add_text_filter('markdown' => { - label => 'Markdown', - docs => 'http://daringfireball.net/projects/markdown/', - on_format => sub { - my $text = shift; - my $ctx = shift; - my $raw = 0; - if (defined $ctx) { - my $output = $ctx->stash('markdown_output'); - if (defined $output && $output =~ m/^html/i) { - $g_empty_element_suffix = ">"; - $ctx->stash('markdown_output', ''); - } - elsif (defined $output && $output eq 'raw') { - $raw = 1; - $ctx->stash('markdown_output', ''); - } - else { - $raw = 0; - $g_empty_element_suffix = " />"; - } - } - $text = $raw ? $text : Markdown($text); - $text; - }, - }); - - # If SmartyPants is loaded, add a combo Markdown/SmartyPants text filter: - my $smartypants; - - { - no warnings "once"; - $smartypants = $MT::Template::Context::Global_filters{'smarty_pants'}; - } - - if ($smartypants) { - MT->add_text_filter('markdown_with_smartypants' => { - label => 'Markdown With SmartyPants', - docs => 'http://daringfireball.net/projects/markdown/', - on_format => sub { - my $text = shift; - my $ctx = shift; - if (defined $ctx) { - my $output = $ctx->stash('markdown_output'); - if (defined $output && $output eq 'html') { - $g_empty_element_suffix = ">"; - } - else { - $g_empty_element_suffix = " />"; - } - } - $text = Markdown($text); - $text = $smartypants->($text, '1'); - }, - }); - } -} -else { -#### BBEdit/command-line text filter interface ########################## -# Needs to be hidden from MT (and Blosxom when running in static mode). - - # We're only using $blosxom::version once; tell Perl not to warn us: - no warnings 'once'; - unless ( defined($blosxom::version) ) { - use warnings; - - #### Check for command-line switches: ################# - my %cli_opts; - use Getopt::Long; - Getopt::Long::Configure('pass_through'); - GetOptions(\%cli_opts, - 'version', - 'shortversion', - 'html4tags', - ); - if ($cli_opts{'version'}) { # Version info - print "\nThis is Markdown, version $VERSION.\n"; - print "Copyright 2004 John Gruber\n"; - print "http://daringfireball.net/projects/markdown/\n\n"; - exit 0; - } - if ($cli_opts{'shortversion'}) { # Just the version number string. - print $VERSION; - exit 0; - } - if ($cli_opts{'html4tags'}) { # Use HTML tag style instead of XHTML - $g_empty_element_suffix = ">"; - } - - - #### Process incoming text: ########################### - my $text; - { - local $/; # Slurp the whole file - $text = <>; - } - print Markdown($text); - } -} - - - -sub Markdown { -# -# Main function. The order in which other subs are called here is -# essential. Link and image substitutions need to happen before -# _EscapeSpecialChars(), so that any *'s or _'s in the -# and tags get encoded. -# - my $text = shift; - - # Clear the global hashes. If we don't clear these, you get conflicts - # from other articles when generating a page which contains more than - # one article (e.g. an index page that shows the N most recent - # articles): - %g_urls = (); - %g_titles = (); - %g_html_blocks = (); - - - # Standardize line endings: - $text =~ s{\r\n}{\n}g; # DOS to Unix - $text =~ s{\r}{\n}g; # Mac to Unix - - # Make sure $text ends with a couple of newlines: - $text .= "\n\n"; - - # Convert all tabs to spaces. - $text = _Detab($text); - - # Strip any lines consisting only of spaces and tabs. - # This makes subsequent regexen easier to write, because we can - # match consecutive blank lines with /\n+/ instead of something - # contorted like /[ \t]*\n+/ . - $text =~ s/^[ \t]+$//mg; - - # Turn block-level HTML blocks into hash entries - $text = _HashHTMLBlocks($text); - - # Strip link definitions, store in hashes. - $text = _StripLinkDefinitions($text); - - $text = _RunBlockGamut($text); - - $text = _UnescapeSpecialChars($text); - - return $text . "\n"; -} - - -sub _StripLinkDefinitions { -# -# Strips link definitions from text, stores the URLs and titles in -# hash references. -# - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Link defs are in the form: ^[id]: url "optional title" - while ($text =~ s{ - ^[ ]{0,$less_than_tab}\[(.+)\]: # id = $1 - [ \t]* - \n? # maybe *one* newline - [ \t]* - ? # url = $2 - [ \t]* - \n? # maybe one newline - [ \t]* - (?: - (?<=\s) # lookbehind for whitespace - ["(] - (.+?) # title = $3 - [")] - [ \t]* - )? # title is optional - (?:\n+|\Z) - } - {}mx) { - $g_urls{lc $1} = _EncodeAmpsAndAngles( $2 ); # Link IDs are case-insensitive - if ($3) { - $g_titles{lc $1} = $3; - $g_titles{lc $1} =~ s/"/"/g; - } - } - - return $text; -} - - -sub _HashHTMLBlocks { - my $text = shift; - my $less_than_tab = $g_tab_width - 1; - - # Hashify HTML blocks: - # We only want to do this for block-level HTML tags, such as headers, - # lists, and tables. That's because we still want to wrap

    s around - # "paragraphs" that are wrapped in non-block-level tags, such as anchors, - # phrase emphasis, and spans. The list of tags we're looking for is - # hard-coded: - my $block_tags_a = qr/p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del/; - my $block_tags_b = qr/p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math/; - - # First, look for nested blocks, e.g.: - #

    - # - # The outermost tags must start at the left margin for this to match, and - # the inner nested divs must be indented. - # We need to do this before the next, more liberal match, because the next - # match will start at the first `
    ` and stop at the first `
    `. - $text =~ s{ - ( # save in $1 - ^ # start of line (with /m) - <($block_tags_a) # start tag = $2 - \b # word break - (.*\n)*? # any number of lines, minimally matching - # the matching end tag - [ \t]* # trailing spaces/tabs - (?=\n+|\Z) # followed by a newline or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egmx; - - - # - # Now match more liberally, simply from `\n` to `\n` - # - $text =~ s{ - ( # save in $1 - ^ # start of line (with /m) - <($block_tags_b) # start tag = $2 - \b # word break - (.*\n)*? # any number of lines, minimally matching - .* # the matching end tag - [ \t]* # trailing spaces/tabs - (?=\n+|\Z) # followed by a newline or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egmx; - # Special case just for
    . It was easier to make a special case than - # to make the other regex more complicated. - $text =~ s{ - (?: - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - [ ]{0,$less_than_tab} - <(hr) # start tag = $2 - \b # word break - ([^<>])*? # - /?> # the matching end tag - [ \t]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egx; - - # Special case for standalone HTML comments: - $text =~ s{ - (?: - (?<=\n\n) # Starting after a blank line - | # or - \A\n? # the beginning of the doc - ) - ( # save in $1 - [ ]{0,$less_than_tab} - (?s: - - ) - [ \t]* - (?=\n{2,}|\Z) # followed by a blank line or end of document - ) - }{ - my $key = md5_hex($1); - $g_html_blocks{$key} = $1; - "\n\n" . $key . "\n\n"; - }egx; - - - return $text; -} - - -sub _RunBlockGamut { -# -# These are all the transformations that form block-level -# tags like paragraphs, headers, and list items. -# - my $text = shift; - - $text = _DoHeaders($text); - - # Do Horizontal Rules: - $text =~ s{^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$}{\n tags around block-level tags. - $text = _HashHTMLBlocks($text); - - $text = _FormParagraphs($text); - - return $text; -} - - -sub _RunSpanGamut { -# -# These are all the transformations that occur *within* block-level -# tags like paragraphs, headers, and list items. -# - my $text = shift; - - $text = _DoCodeSpans($text); - - $text = _EscapeSpecialChars($text); - - # Process anchor and image tags. Images must come first, - # because ![foo][f] looks like an anchor. - $text = _DoImages($text); - $text = _DoAnchors($text); - - # Make links out of things like `` - # Must come after _DoAnchors(), because you can use < and > - # delimiters in inline links like [this](). - $text = _DoAutoLinks($text); - - $text = _EncodeAmpsAndAngles($text); - - $text = _DoItalicsAndBold($text); - - # Do hard breaks: - $text =~ s/ {2,}\n/ or tags. -# my $tags_to_skip = qr!<(/?)(?:pre|code|kbd|script|math)[\s>]!; - - foreach my $cur_token (@$tokens) { - if ($cur_token->[0] eq "tag") { - # Within tags, encode * and _ so they don't conflict - # with their use in Markdown for italics and strong. - # We're replacing each such character with its - # corresponding MD5 checksum value; this is likely - # overkill, but it should prevent us from colliding - # with the escape values by accident. - $cur_token->[1] =~ s! \* !$g_escape_table{'*'}!gx; - $cur_token->[1] =~ s! _ !$g_escape_table{'_'}!gx; - $text .= $cur_token->[1]; - } else { - my $t = $cur_token->[1]; - $t = _EncodeBackslashEscapes($t); - $text .= $t; - } - } - return $text; -} - - -sub _DoAnchors { -# -# Turn Markdown link shortcuts into XHTML
    tags. -# - my $text = shift; - - # - # First, handle reference-style links: [link text] [id] - # - $text =~ s{ - ( # wrap whole match in $1 - \[ - ($g_nested_brackets) # link text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - ) - }{ - my $result; - my $whole_match = $1; - my $link_text = $2; - my $link_id = lc $3; - - if ($link_id eq "") { - $link_id = lc $link_text; # for shortcut links like [this][]. - } - - if (defined $g_urls{$link_id}) { - my $url = $g_urls{$link_id}; - $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid - $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold. - $result = "? # href = $3 - [ \t]* - ( # $4 - (['"]) # quote char = $5 - (.*?) # Title = $6 - \5 # matching quote - )? # title is optional - \) - ) - }{ - my $result; - my $whole_match = $1; - my $link_text = $2; - my $url = $3; - my $title = $6; - - $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid - $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold. - $result = " tags. -# - my $text = shift; - - # - # First, handle reference-style labeled images: ![alt text][id] - # - $text =~ s{ - ( # wrap whole match in $1 - !\[ - (.*?) # alt text = $2 - \] - - [ ]? # one optional space - (?:\n[ ]*)? # one optional newline followed by spaces - - \[ - (.*?) # id = $3 - \] - - ) - }{ - my $result; - my $whole_match = $1; - my $alt_text = $2; - my $link_id = lc $3; - - if ($link_id eq "") { - $link_id = lc $alt_text; # for shortcut links like ![this][]. - } - - $alt_text =~ s/"/"/g; - if (defined $g_urls{$link_id}) { - my $url = $g_urls{$link_id}; - $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid - $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold. - $result = "\"$alt_text\"";? # src url = $3 - [ \t]* - ( # $4 - (['"]) # quote char = $5 - (.*?) # title = $6 - \5 # matching quote - [ \t]* - )? # title is optional - \) - ) - }{ - my $result; - my $whole_match = $1; - my $alt_text = $2; - my $url = $3; - my $title = ''; - if (defined($6)) { - $title = $6; - } - - $alt_text =~ s/"/"/g; - $title =~ s/"/"/g; - $url =~ s! \* !$g_escape_table{'*'}!gx; # We've got to encode these to avoid - $url =~ s! _ !$g_escape_table{'_'}!gx; # conflicting with italics/bold. - $result = "\"$alt_text\"";" . _RunSpanGamut($1) . "